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