53 lines
1.6 KiB
C++
53 lines
1.6 KiB
C++
|
|
#include <iostream>
|
|
|
|
#include <QGuiApplication>
|
|
#include <QQmlApplicationEngine>
|
|
#include <QQmlContext>
|
|
|
|
#include "TimerComponent.hpp"
|
|
#include "LoggerService.hpp"
|
|
#include "config/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();
|
|
}
|