ScummVM API documentation
midiadlib.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef QUEEN_MIDIADLIB_H
23#define QUEEN_MIDIADLIB_H
24
25#include "audio/fmopl.h"
26#include "audio/mididrv.h"
27
28namespace Queen {
29
31public:
32
34 _adlibWaveformSelect = 0;
35 _isOpen = false;
36 }
37
38 ~AdLibMidiDriver() override {}
39
40 // MidiDriver
41 int open() override;
42 void close() override;
43 void send(uint32 b) override;
44 void metaEvent(byte type, const byte *data, uint16 length) override;
45 MidiChannel *allocateChannel() override { return 0; }
46 MidiChannel *getPercussionChannel() override { return 0; }
47 void setTimerCallback(void *timerParam, Common::TimerManager::TimerProc timerProc) override;
48 bool isOpen() const override { return _isOpen; }
49 uint32 getBaseTempo() override { return 1000000 / OPL::OPL::kDefaultCallbackFrequency; }
50
51 void setVolume(uint32 volume);
52
53private:
54
55 void handleMidiEvent0x90_NoteOn(int channel, int param1, int param2);
56 void handleSequencerSpecificMetaEvent1(int channel, const uint8 *data);
57 void handleSequencerSpecificMetaEvent2(uint8 value);
58 void handleSequencerSpecificMetaEvent3(uint8 value);
59
60 void adlibWrite(uint8 port, uint8 value);
61 void adlibSetupCard();
62 void adlibSetupChannels(int fl);
63 void adlibResetAmpVibratoRhythm(int am, int vib, int kso);
64 void adlibResetChannels();
65 void adlibSetAmpVibratoRhythm();
66 void adlibSetCSMKeyboardSplit();
67 void adlibSetNoteMul(int mul);
68 void adlibSetWaveformSelect(int fl);
69 void adlibSetPitchBend(int channel, int range);
70 void adlibPlayNote(int channel);
71 uint8 adlibPlayNoteHelper(int channel, int note1, int note2, int oct);
72 void adlibTurnNoteOff(int channel);
73 void adlibTurnNoteOn(int channel, int note);
74 void adlibSetupChannelFromSequence(int channel, const uint8 *src, int fl);
75 void adlibSetupChannel(int channel, const uint16 *src, int fl);
76 void adlibSetNoteVolume(int channel, int volume);
77 void adlibSetChannelVolume(int channel, uint8 volume);
78 void adlibSetupChannelHelper(int channel);
79 void adlibSetChannel0x40(int channel);
80 void adlibSetChannel0xC0(int channel);
81 void adlibSetChannel0x60(int channel);
82 void adlibSetChannel0x80(int channel);
83 void adlibSetChannel0x20(int channel);
84 void adlibSetChannel0xE0(int channel);
85
86 void onTimer();
87
88 OPL::OPL *_opl;
89 int _midiNumberOfChannels;
90 int _adlibNoteMul;
91 int _adlibWaveformSelect;
92 int _adlibAMDepthEq48;
93 int _adlibVibratoDepthEq14;
94 int _adlibRhythmEnabled;
95 int _adlibKeyboardSplitOn;
96 int _adlibVibratoRhythm;
97 uint8 _midiChannelsFreqTable[9];
98 uint8 _adlibChannelsLevelKeyScalingTable[11];
99 uint8 _adlibSetupChannelSequence1[14 * 18];
100 uint16 _adlibSetupChannelSequence2[14];
101 int16 _midiChannelsNote2Table[9];
102 uint8 _midiChannelsNote1Table[9];
103 uint8 _midiChannelsOctTable[9];
104 uint16 _adlibChannelsVolume[11];
105 uint16 _adlibMetaSequenceData[28];
106 uint8 _adlibChannelsVolumeTable[11];
107
108 bool _isOpen;
109 Common::TimerManager::TimerProc _adlibTimerProc;
110 void *_adlibTimerParam;
111
112 static const uint8 _adlibChannelsMappingTable1[];
113 static const uint8 _adlibChannelsNoFeedback[];
114 static const uint8 _adlibChannelsMappingTable2[];
115 static const uint8 _adlibChannelsMappingTable3[];
116 static const uint8 _adlibChannelsKeyScalingTable1[];
117 static const uint8 _adlibChannelsKeyScalingTable2[];
118 static const uint8 _adlibInitSequenceData1[];
119 static const uint8 _adlibInitSequenceData2[];
120 static const uint8 _adlibInitSequenceData3[];
121 static const uint8 _adlibInitSequenceData4[];
122 static const uint8 _adlibInitSequenceData5[];
123 static const uint8 _adlibInitSequenceData6[];
124 static const uint8 _adlibInitSequenceData7[];
125 static const uint8 _adlibInitSequenceData8[];
126 static const int16 _midiChannelsNoteTable[];
127 static const int16 _midiNoteFreqTable[];
128};
129
130} // End of namespace Queen
131
132#endif // QUEEN_MIDIADLIB_H
void(* TimerProc)(void *refCon)
Definition: timer.h:42
Definition: mididrv.h:541
Definition: mididrv.h:313
Definition: fmopl.h:116
@ kDefaultCallbackFrequency
Definition: fmopl.h:161
Definition: midiadlib.h:30
uint32 getBaseTempo() override
Definition: midiadlib.h:49
void send(uint32 b) override
void close() override
bool isOpen() const override
Definition: midiadlib.h:48
int open() override
Definition: bankman.h:28