MidiPort.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef MIDIPORT_H
  2. #define MIDIPORT_H
  3. #include "utils.h"
  4. class MidiMessage;
  5. class MidiMessageList;
  6. typedef void (*MidiInCallback)(double ts, const MidiMessage*, void* data);
  7. typedef void (*MidiInErrorCallback)(RtMidiError::Type type, const std::string &errorText, void* data);
  8. class IMidiPortListener
  9. {
  10. public:
  11. virtual ~IMidiPortListener(){}
  12. virtual void on_new_message(double ts, MidiMessage* m)=0;
  13. };
  14. class IMidiPortErrorListener
  15. {
  16. public:
  17. virtual ~IMidiPortErrorListener(){}
  18. virtual void on_error(RtMidiError::Type type, const std::string &errorText)=0;
  19. };
  20. class MidiPortBase
  21. {
  22. public:
  23. MidiPortBase();
  24. virtual ~MidiPortBase(){}
  25. virtual void _error_handler(RtMidiError::Type type, const std::string &errorText);
  26. protected:
  27. void* m_error_callback_data;
  28. MidiInErrorCallback m_error_callback;
  29. IMidiPortErrorListener* m_error_listener;
  30. };
  31. class MidiPortIn : public RtMidiIn, public MidiPortBase
  32. {
  33. public:
  34. MidiPortIn(const std::string &clientName);
  35. virtual ~MidiPortIn(){}
  36. void set_callback(MidiInCallback cb, void *cbd=NULL){
  37. m_callback=cb;
  38. m_listener=NULL;
  39. m_callback_data=NULL;
  40. }
  41. void set_listener(IMidiPortListener* cb){
  42. m_callback=NULL;
  43. m_listener=cb;
  44. }
  45. void _handler(double ts, MidiRawMessage* rm);
  46. static std::vector<std::string> get_ports();
  47. protected:
  48. void* m_callback_data;
  49. MidiInCallback m_callback;
  50. IMidiPortListener* m_listener;
  51. private:
  52. };
  53. class MidiPortOut : public RtMidiOut, public MidiPortBase
  54. {
  55. public:
  56. MidiPortOut(const std::string &clientName);
  57. virtual ~MidiPortOut(){}
  58. void send(const MidiMessage& m );
  59. void send(const MidiMessageList& m );
  60. static std::vector<std::string> get_ports();
  61. };
  62. #endif // MIDIPORT_H