xref: /haiku/headers/os/midi2/MidiConsumer.h (revision 4614b80ee6f99f7d36de0fe3fb7766fe8714faad)
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 
43 	void SetTimeout(bigtime_t when, void *data);
44 	virtual void Timeout(void *data);
45 
46 	virtual void Data(uchar *data, size_t length, bool atomic,
47 					  bigtime_t time);
48 	// Raw Midi data has been received.
49 	// The default implementation calls one of the virtuals below:
50 
51 	virtual	void NoteOff(uchar channel, uchar note, uchar velocity,
52 						 bigtime_t time);
53 	virtual	void NoteOn(uchar channel, uchar note, uchar velocity,
54 						bigtime_t time);
55 	virtual	void KeyPressure(uchar channel, uchar note, uchar pressure,
56 							 bigtime_t time);
57 	virtual	void ControlChange(uchar channel, uchar controlNumber,
58 							   uchar controlValue,
59 							   bigtime_t time);
60 	virtual	void ProgramChange(uchar channel, uchar programNumber,
61 							   bigtime_t time);
62 	virtual	void ChannelPressure(uchar channel, uchar pressure,
63 								 bigtime_t time);
64 	virtual	void PitchBend(uchar channel, uchar lsb, uchar msb,
65 						   bigtime_t time);
66 	virtual	void SystemExclusive(void* data, size_t dataLength,
67 								 bigtime_t time);
68 	virtual	void SystemCommon(uchar statusByte, uchar data1, uchar data2,
69 							  bigtime_t time);
70 	virtual	void SystemRealTime(uchar statusByte,
71 								bigtime_t time);
72 	virtual	void TempoChange(int32 bpm,
73 							 bigtime_t time);
74 	virtual void AllNotesOff(bool justChannel,
75 							 bigtime_t time);
76 protected:
77 	~BMidiLocalConsumer();
78 
79 private:
80 
81 	friend class BMidiRoster;
82 
83 	virtual void _Reserved1();
84 	virtual void _Reserved2();
85 	virtual void _Reserved3();
86 	virtual void _Reserved4();
87 	virtual void _Reserved5();
88 	virtual void _Reserved6();
89 	virtual void _Reserved7();
90 	virtual void _Reserved8();
91 
92 	BMidiDispatcher *fDispatcher;
93 	bigtime_t fTimeout;
94 	void *fTimeoutData;
95 
96 	uint32 _reserved[2];
97 };
98 
99 #endif
100