1 #ifndef _MIDI_SINK_H 2 #define _MIDI_SINK_H 3 4 #include <MidiEndpoint.h> 5 6 class BMidiDispatcher; 7 8 class BMidiConsumer : public BMidiEndpoint 9 { 10 public: 11 bigtime_t Latency() const; 12 13 private: 14 friend class BMidiLocalConsumer; 15 friend class BMidiLocalProducer; 16 friend class BMidiRoster; 17 18 BMidiConsumer(const char *name = NULL); 19 virtual ~BMidiConsumer(); 20 21 virtual void _Reserved1(); 22 virtual void _Reserved2(); 23 virtual void _Reserved3(); 24 virtual void _Reserved4(); 25 virtual void _Reserved5(); 26 virtual void _Reserved6(); 27 virtual void _Reserved7(); 28 virtual void _Reserved8(); 29 30 port_id fEventPort; 31 bigtime_t fLatency; 32 33 uint32 _reserved[2]; 34 }; 35 36 class BMidiLocalConsumer : public BMidiConsumer 37 { 38 public: 39 BMidiLocalConsumer(const char *name = NULL); 40 41 void SetLatency(bigtime_t latency); 42 int32 GetProducerID(void); 43 44 void SetTimeout(bigtime_t when, void *data); 45 virtual void Timeout(void *data); 46 47 virtual void Data(uchar *data, size_t length, bool atomic, 48 bigtime_t time); 49 // Raw Midi data has been received. 50 // The default implementation calls one of the virtuals below: 51 52 virtual void NoteOff(uchar channel, uchar note, uchar velocity, 53 bigtime_t time); 54 virtual void NoteOn(uchar channel, uchar note, uchar velocity, 55 bigtime_t time); 56 virtual void KeyPressure(uchar channel, uchar note, uchar pressure, 57 bigtime_t time); 58 virtual void ControlChange(uchar channel, uchar controlNumber, 59 uchar controlValue, 60 bigtime_t time); 61 virtual void ProgramChange(uchar channel, uchar programNumber, 62 bigtime_t time); 63 virtual void ChannelPressure(uchar channel, uchar pressure, 64 bigtime_t time); 65 virtual void PitchBend(uchar channel, uchar lsb, uchar msb, 66 bigtime_t time); 67 virtual void SystemExclusive(void* data, size_t dataLength, 68 bigtime_t time); 69 virtual void SystemCommon(uchar statusByte, uchar data1, uchar data2, 70 bigtime_t time); 71 virtual void SystemRealTime(uchar statusByte, 72 bigtime_t time); 73 virtual void TempoChange(int32 bpm, 74 bigtime_t time); 75 virtual void AllNotesOff(bool justChannel, 76 bigtime_t time); 77 protected: 78 ~BMidiLocalConsumer(); 79 80 private: 81 82 friend class BMidiRoster; 83 friend class BMidiDispatcher; 84 85 virtual void _Reserved1(); 86 virtual void _Reserved2(); 87 virtual void _Reserved3(); 88 virtual void _Reserved4(); 89 virtual void _Reserved5(); 90 virtual void _Reserved6(); 91 virtual void _Reserved7(); 92 virtual void _Reserved8(); 93 94 BMidiDispatcher *fDispatcher; 95 bigtime_t fTimeout; 96 void *fTimeoutData; 97 98 int32 fCurrentProducer; 99 uint32 _reserved[1]; 100 }; 101 102 #endif 103