25#include "audio/mididrv.h"
26#include "audio/mididrv_ms.h"
27#include "common/list.h"
28#include "common/mutex.h"
113 static const byte MT32_DEFAULT_INSTRUMENTS[8];
114 static const int16 MT32_DEFAULT_INSTRUMENTS_CONTROLLER_DEFAULTS[16];
115 static const byte MT32_DEFAULT_PANNING[8];
116 static const uint8 MT32_DEFAULT_CHANNEL_VOLUME = 102;
117 static const uint8 GM_DEFAULT_CHANNEL_VOLUME = 100;
119 static const uint8 GS_DRUMKIT_FALLBACK_MAP[128];
121 static const uint8 MT32_DISPLAY_NUM_CHARS = 20;
122 static const uint32 MT32_DISPLAY_MEMORY_ADDRESS = 0x20 << 14;
125 static const uint8 MAXIMUM_MT32_ACTIVE_NOTES = 48;
126 static const uint8 MAXIMUM_GM_ACTIVE_NOTES = 96;
139 bool sourceVolumeApplied;
145 byte channelPressure;
159 byte pitchBendSensitivity;
162 sourceVolumeApplied(
false),
163 pitchWheel(MIDI_PITCH_BEND_DEFAULT),
170 panPosition(MIDI_PANNING_DEFAULT),
171 expression(MIDI_EXPRESSION_DEFAULT),
174 pitchBendSensitivity(0) { }
191 uint16 neutralVolume;
193 uint16 fadeStartVolume;
195 uint16 fadeEndVolume;
197 int32 fadePassedTime;
201 int8 channelMap[MIDI_CHANNEL_COUNT];
203 uint16 availableChannels;
207 fadeEndVolume(0), fadePassedTime(0), fadeDuration(0), availableChannels(0xFFFF) {
208 memset(channelMap, 0,
sizeof(channelMap));
245 memset(data, 0,
sizeof(data));
253 static void timerCallback(
void *data);
263 bool isOpen()
const override {
return _isOpen; }
269 void send(int8 source, uint32 b)
override;
270 void sysEx(
const byte *msg, uint16 length)
override;
279 void sysExQueue(
const byte *msg, uint16 length, int8 source = -1);
299 uint16
sysExMT32(
const byte *msg, uint16 length,
const uint32 targetAddress,
bool queue =
false,
bool delay =
true, int8 source = -1);
300 uint16
sysExMT32(
const byte *msg, uint16 length,
bool queue =
false,
bool delay =
true, int8 source = -1);
301 void metaEvent(int8 source,
byte type,
const byte *data, uint16 length)
override;
362 virtual void initGM(
bool initForMT32,
bool enableGS);
406 virtual void noteOnOff(
byte outputChannel,
byte command,
byte note,
byte velocity,
433 virtual void controlChange(
byte outputChannel,
byte controllerNumber,
byte controllerValue,
476 virtual void pitchBend(
byte outputChannel, uint8 pitchBendLsb, uint8 pitchBendMsb,
552 bool _midiDataReversePanning;
557 bool _midiDeviceReversePanning;
559 bool _scaleGSPercussionVolumeToMT32;
564 uint16 _outputChannelMask;
576 const byte *_mt32ToGMInstrumentMap;
577 const byte *_gmToMT32InstrumentMap;
579 uint8 _maximumActiveNotes;
Definition: mididrv.h:541
virtual void send(uint32 b)=0
void send(int8 source, uint32 b) override
byte correctInstrumentBank(byte outputChannel, byte patchId)
virtual byte mapMT32InstrumentToGM(byte mt32Instrument)
bool isOutputChannelUsed(int8 outputChannel)
virtual void polyAftertouch(byte outputChannel, byte note, byte pressure, int8 source, MidiChannelControlData &controlData, bool channelLockedByOtherSource=false)
void applySourceVolume(uint8 source) override
uint16 sysExNoDelay(const byte *msg, uint16 length) override
bool isReady(int8 source=-1) override
virtual void initMT32(bool initForGM)
virtual bool removeActiveNote(uint8 outputChannel, uint8 note, int8 source)
void stopAllNotes(bool stopSustainedNotes=false) override
virtual void pitchBend(byte outputChannel, uint8 pitchBendLsb, uint8 pitchBendMsb, int8 source, MidiChannelControlData &controlData, bool channelLockedByOtherSource=false)
virtual void noteOnOff(byte outputChannel, byte command, byte note, byte velocity, int8 source, MidiChannelControlData &controlData)
void sysExQueue(const byte *msg, uint16 length, int8 source=-1)
virtual void controlChange(byte outputChannel, byte controllerNumber, byte controllerValue, int8 source, MidiChannelControlData &controlData, bool channelLockedByOtherSource=false)
virtual bool addActiveNote(uint8 outputChannel, uint8 note, int8 source)
virtual void initGM(bool initForMT32, bool enableGS)
virtual void removeActiveNotes(uint8 outputChannel, bool sustainedNotes)
void send(uint32 b) override
bool isOpen() const override
Definition: mt32gm.h:263
void deinitSource(uint8 source) override
void metaEvent(int8 source, byte type, const byte *data, uint16 length) override
virtual int8 mapSourceChannel(uint8 source, uint8 dataChannel)
virtual void initControlData()
virtual void channelAftertouch(byte outputChannel, byte pressure, int8 source, MidiChannelControlData &controlData, bool channelLockedByOtherSource=false)
uint32 getBaseTempo() override
uint32 property(int prop, uint32 param) override
virtual byte mapGMInstrumentToMT32(byte gmInstrument)
virtual void processEvent(int8 source, uint32 b, uint8 outputChannel, MidiChannelControlData &controlData, bool channelLockedByOtherSource=false)
virtual bool allocateSourceChannels(uint8 source, uint8 numChannels)
virtual void initMidiDevice()
uint16 sysExMT32(const byte *msg, uint16 length, const uint32 targetAddress, bool queue=false, bool delay=true, int8 source=-1)
void stopAllNotes(uint8 source, uint8 channel) override
virtual void applyControllerDefaults(uint8 source, MidiChannelControlData &controlData, uint8 outputChannel, bool channelLockedByOtherSource)
virtual void programChange(byte outputChannel, byte patchId, int8 source, MidiChannelControlData &controlData, bool channelLockedByOtherSource=false)
void sysEx(const byte *msg, uint16 length) override
Definition: mididrv_ms.h:86
static const uint8 MAXIMUM_SOURCES
Definition: mididrv_ms.h:92
static const uint16 DEFAULT_SOURCE_NEUTRAL_VOLUME
Definition: mididrv_ms.h:100
SourceType
Definition: mididrv_ms.h:110
@ SOURCE_TYPE_UNDEFINED
Definition: mididrv_ms.h:114
Definition: mididrv.h:313
MusicType
Definition: mididrv.h:44