Files
sonobulus/src/main.cpp
2026-06-14 15:34:51 -05:00

53 lines
1.6 KiB
C++

#include <iostream>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "TimerComponent.hpp"
#include "LoggerService.hpp"
#include "ConfigService.hpp"
#include "synth/AudioEngine.hpp"
#include "synth/KeyboardController.hpp"
#include "synth/Scope.hpp"
#include "synth/MidiController.hpp"
int main(int argc, char* argv[]) {
// create application
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
// create app objects
ConfigService config = ConfigService("config/sonobulus.cfg");
LoggerService logger = LoggerService(&config, "Engine");
NoteQueue queue = NoteQueue(&config, &logger);
ScopeBuffer scopeBuffer = ScopeBuffer(&config, &logger, 2048);
KeyboardController keyboard(&config, &logger, &queue);
MidiController midi(&config, &logger, &queue);
Synth synth(&config, &logger, &scopeBuffer, &queue);
// audio synthesizer doohickey
AudioEngine audioEngine = AudioEngine(&config, &logger, &synth);
audioEngine.start();
// attach backend gui components
qmlRegisterType<TimerComponent>("AppDemo", 1, 0, "TimerComponent");
qmlRegisterType<Scope>("AppDemo", 1, 0, "Scope");
// attach backend services to qml
engine.rootContext()->setContextProperty("keyboardController", &keyboard);
engine.rootContext()->setContextProperty("scopeBuffer", &scopeBuffer);
// load qml
engine.load(QUrl::fromLocalFile("ui/Main.qml")); // ugh
if(engine.rootObjects().isEmpty()) {
logger.log("Main", LogFlag::Error, "Engine is empty.");
return -1;
}
// execute app
return app.exec();
}