#include #include #include #include #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("AppDemo", 1, 0, "TimerComponent"); qmlRegisterType("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(); }