1
2#ifndef _MIDI_SYNTH_H
3#define _MIDI_SYNTH_H
4
5#include <BeBuild.h>
6#include <Midi.h>
7#include <Synth.h>
8#include <MidiDefs.h>
9
10class BSynth;
11
12class BMidiSynth : public BMidi {
13public:
14
15	BMidiSynth();
16	virtual ~BMidiSynth();
17
18	status_t EnableInput(bool enable, bool loadInstruments);
19	bool IsInputEnabled(void) const;
20
21	void SetVolume(double volume);
22	double Volume(void) const;
23
24	void SetTransposition(int16 offset);
25	int16 Transposition(void) const;
26
27	void MuteChannel(int16 channel, bool do_mute);
28	void GetMuteMap(char* pChannels) const;
29
30	void SoloChannel(int16 channel, bool do_solo);
31	void GetSoloMap(char* pChannels) const;
32
33	status_t LoadInstrument(int16 instrument);
34	status_t UnloadInstrument(int16 instrument);
35	status_t RemapInstrument(int16 from, int16 to);
36
37	void FlushInstrumentCache(bool startStopCache);
38
39	uint32 Tick(void) const;
40
41	virtual void NoteOff(
42		uchar channel, uchar note, uchar velocity, uint32 time = B_NOW);
43
44	virtual void NoteOn(
45		uchar channel, uchar note, uchar velocity, uint32 time = B_NOW);
46
47	virtual void KeyPressure(
48		uchar channel, uchar note, uchar pressure, uint32 time = B_NOW);
49
50	virtual void ControlChange(
51		uchar channel, uchar controlNumber, uchar controlValue,
52		uint32 time = B_NOW);
53
54	virtual void ProgramChange(
55		uchar channel, uchar programNumber, uint32 time = B_NOW);
56
57	virtual void ChannelPressure(
58		uchar channel, uchar pressure, uint32 time = B_NOW);
59
60	virtual void PitchBend(
61		uchar channel, uchar lsb, uchar msb, uint32 time = B_NOW);
62
63	virtual void AllNotesOff(bool justChannel, uint32 time = B_NOW);
64
65protected:
66
67	void* fSongVariables;
68	void* fPerformanceVariables;
69	bool fMidiQueue;
70
71private:
72
73	friend class BSynth;
74
75	virtual void _ReservedMidiSynth1();
76	virtual void _ReservedMidiSynth2();
77	virtual void _ReservedMidiSynth3();
78	virtual void _ReservedMidiSynth4();
79
80	virtual void Run();
81
82	bigtime_t fCreationTime;
83	int16 fTranspose;
84	bool fInputEnabled;
85};
86
87#endif // _MIDI_SYNTH_H
88