#ifndef QMPMIDIMAPPERS_H #define QMPMIDIMAPPERS_H #include #include #define QMP_MAIN #include "../include/qmpcorepublic.hpp" #include "rtmidi/RtMidi.h" struct qmpDeviceInitializer { CMidiTrack initseq; struct BankStore { std::unordered_map presets; std::string bankname; }; std::unordered_map banks; uint8_t initv[130]; static qmpDeviceInitializer* parse(const char* path); }; class qmpMidiOutRtMidi:public qmpMidiOutDevice { private: unsigned portid; RtMidiOut* outport; qmpDeviceInitializer* devinit; public: qmpMidiOutRtMidi(unsigned _portid); ~qmpMidiOutRtMidi(); void deviceInit(); void deviceDeinit(); void basicMessage(uint8_t type,uint8_t p1,uint8_t p2); void extendedMessage(uint8_t length,const char *data); void rpnMessage(uint8_t ch,uint16_t type,uint16_t val); void nrpnMessage(uint8_t ch,uint16_t type,uint16_t val); void panic(uint8_t ch); void reset(uint8_t ch); void onMapped(uint8_t ch,int refcnt); void onUnmapped(uint8_t ch,int refcnt); std::vector> getBankList(); std::vector> getPresets(uint16_t bank); std::string getPresetName(uint16_t bank,uint8_t preset); bool getChannelPreset(int ch,uint16_t *bank,uint8_t *preset,std::string &presetname); uint8_t getInitialCCValue(uint8_t cc); void setInitializerFile(const char* path); }; class qmpRtMidiManager { private: static RtMidiOut* dummy; std::vector> devices; public: void createDevices(); void deleteDevices(); std::vector> getDevices(); }; #endif // QMPMIDIMAPPERS_H