xref: /haiku/headers/os/midi2/MidiConsumer.h (revision 75a7beab8ffd5d06d2a94c5a6403bd2478cf205f)
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