#ifndef QMPCOREWRAPPER_H #define QMPCOREWRAPPER_H #include #include #include #include #include "../core/qmpmidiplay.hpp" class CQMPCoreWrapper:public QObject { Q_OBJECT private: CMidiPlayer *mp; std::thread *playerTh; int curprog; public: explicit CQMPCoreWrapper(QObject* parent=0):QObject(parent) { mp=new CMidiPlayer(); } ~CQMPCoreWrapper(){delete mp;} Q_INVOKABLE void initFluidSynth(QUrl sfpath) { mp->fluid()->setOptStr("audio.driver","pulseaudio"); mp->fluid()->deviceInit(); mp->fluid()->loadSFont(sfpath.toLocalFile().toStdString().c_str()); for(int i=0;i<16;++i) mp->setChannelOutput(i,0); } Q_INVOKABLE void deinitFluidSynth() { mp->fluid()->deviceDeinit(); } Q_INVOKABLE void loadFile(QUrl file) { mp->playerLoadFile(file.toLocalFile().toStdString().c_str()); mp->playerInit();curprog=0; } Q_INVOKABLE void playFile() { playerTh=new std::thread(&CMidiPlayer::playerThread,mp); } Q_INVOKABLE void stop() { mp->playerDeinit();playerTh->join();delete playerTh; mp->playerPanic(); } Q_INVOKABLE int getProgress() { while(!mp->isFinished()&&mp->getTCeptr()>mp->getStamp(curprog) &&curprog<=100) ++curprog; return curprog; } Q_INVOKABLE void panic(){mp->playerPanic();} Q_INVOKABLE void setTCeptr(int perct) { mp->setTCeptr(mp->getStamp(perct),perct);curprog=perct; } }; #endif // QMPCOREWRAPPER_H