|
enum | SourceType { SOURCE_TYPE_UNDEFINED,
SOURCE_TYPE_MUSIC,
SOURCE_TYPE_SFX
} |
|
enum | FadeAbortType { FADE_ABORT_TYPE_END_VOLUME,
FADE_ABORT_TYPE_CURRENT_VOLUME,
FADE_ABORT_TYPE_START_VOLUME
} |
|
enum | ControllerDefaultType {
CONTROLLER_DEFAULT_PROGRAM,
CONTROLLER_DEFAULT_INSTRUMENT_BANK,
CONTROLLER_DEFAULT_DRUMKIT,
CONTROLLER_DEFAULT_CHANNEL_PRESSURE,
CONTROLLER_DEFAULT_PITCH_BEND,
CONTROLLER_DEFAULT_MODULATION,
CONTROLLER_DEFAULT_VOLUME,
CONTROLLER_DEFAULT_PANNING,
CONTROLLER_DEFAULT_EXPRESSION,
CONTROLLER_DEFAULT_SUSTAIN,
CONTROLLER_DEFAULT_RPN,
CONTROLLER_DEFAULT_PITCH_BEND_SENSITIVITY
} |
|
enum | DeviceStringType { kDriverName,
kDriverId,
kDeviceName,
kDeviceId
} |
|
enum | { MERR_CANNOT_CONNECT = 1,
MERR_DEVICE_NOT_AVAILABLE = 3,
MERR_ALREADY_OPEN = 4
} |
|
enum | {
PROP_OLD_ADLIB = 2,
PROP_CHANNEL_MASK = 3,
PROP_SCUMM_OPL3 = 4,
PROP_USER_VOLUME_SCALING = 5,
PROP_MIDI_DATA_REVERSE_PANNING = 6,
PROP_OPL_ACCURACY_MODE = 7,
PROP_OPL_CHANNEL_ALLOCATION_MODE = 8,
PROP_MILES_VERSION = 9,
PROP_OPL_RHYTHM_MODE_IGNORE_NOTE_OFF = 10
} |
|
typedef uint32 | DeviceHandle |
|
|
void | send (uint32 b) override |
|
void | send (int8 source, uint32 b) override=0 |
|
uint32 | property (int prop, uint32 param) override |
|
virtual void | deinitSource (uint8 source) |
|
void | setSourceType (SourceType type) |
|
void | setSourceType (uint8 source, SourceType type) |
|
void | setSourceVolume (uint16 volume) |
|
void | setSourceVolume (uint8 source, uint16 volume) |
|
void | resetSourceVolume () |
|
void | resetSourceVolume (uint8 source) |
|
void | setSourceNeutralVolume (uint16 volume) |
|
void | setSourceNeutralVolume (uint8 source, uint16 volume) |
|
void | startFade (uint16 duration, uint16 targetVolume) |
|
void | startFade (uint8 source, uint16 duration, uint16 targetVolume) |
|
void | abortFade (FadeAbortType abortType=FADE_ABORT_TYPE_END_VOLUME) |
|
void | abortFade (uint8 source, FadeAbortType abortType=FADE_ABORT_TYPE_END_VOLUME) |
|
bool | isFading () |
|
bool | isFading (uint8 source) |
|
void | setControllerDefault (ControllerDefaultType type) |
|
void | setControllerDefault (ControllerDefaultType type, int16 value) |
|
void | setControllerDefaults (ControllerDefaultType type, int16 *values) |
|
void | clearControllerDefault (ControllerDefaultType type) |
|
void | setInstrumentRemapping (const byte *instrumentRemapping) |
|
void | syncSoundSettings () |
|
virtual void | stopAllNotes (uint8 source, uint8 channel)=0 |
|
void | setTimerCallback (void *timer_param, Common::TimerManager::TimerProc timer_proc) override |
|
void | midiDriverCommonSend (uint32 b) |
|
void | midiDriverCommonSysEx (const byte *msg, uint16 length) |
|
virtual int | open ()=0 |
|
virtual bool | isOpen () const =0 |
|
virtual void | close ()=0 |
|
virtual void | setPitchBendRange (byte channel, uint range) |
|
void | sendMT32Reset () |
|
void | sendGMReset () |
|
virtual uint32 | getBaseTempo ()=0 |
|
virtual MidiChannel * | allocateChannel ()=0 |
|
virtual MidiChannel * | getPercussionChannel ()=0 |
|
virtual void | setEngineSoundFont (Common::SeekableReadStream *soundFontData) |
|
virtual bool | acceptsSoundFontData () |
|
void | send (byte status, byte firstOp, byte secondOp) |
|
void | send (int8 source, byte status, byte firstOp, byte secondOp) |
|
virtual void | sysEx (const byte *msg, uint16 length) |
|
virtual uint16 | sysExNoDelay (const byte *msg, uint16 length) |
|
virtual void | metaEvent (byte type, byte *data, uint16 length) |
|
virtual void | metaEvent (int8 source, byte type, byte *data, uint16 length) |
|
virtual void | stopAllNotes (bool stopSustainedNotes=false) |
|
virtual bool | isReady (int8 source=-1) |
|
|
static const uint8 | MAXIMUM_SOURCES = 10 |
|
static const uint16 | DEFAULT_SOURCE_NEUTRAL_VOLUME = 255 |
|
static const byte | _mt32ToGm [128] |
|
static const byte | _gmToMt32 [128] |
|
static const uint8 | MIDI_CHANNEL_COUNT = 16 |
|
static const uint8 | MIDI_RHYTHM_CHANNEL = 9 |
|
static const byte | MIDI_COMMAND_NOTE_OFF = 0x80 |
|
static const byte | MIDI_COMMAND_NOTE_ON = 0x90 |
|
static const byte | MIDI_COMMAND_POLYPHONIC_AFTERTOUCH = 0xA0 |
|
static const byte | MIDI_COMMAND_CONTROL_CHANGE = 0xB0 |
|
static const byte | MIDI_COMMAND_PROGRAM_CHANGE = 0xC0 |
|
static const byte | MIDI_COMMAND_CHANNEL_AFTERTOUCH = 0xD0 |
|
static const byte | MIDI_COMMAND_PITCH_BEND = 0xE0 |
|
static const byte | MIDI_COMMAND_SYSTEM = 0xF0 |
|
static const byte | MIDI_CONTROLLER_BANK_SELECT_MSB = 0x00 |
|
static const byte | MIDI_CONTROLLER_MODULATION = 0x01 |
|
static const byte | MIDI_CONTROLLER_DATA_ENTRY_MSB = 0x06 |
|
static const byte | MIDI_CONTROLLER_VOLUME = 0x07 |
|
static const byte | MIDI_CONTROLLER_BALANCE = 0x08 |
|
static const byte | MIDI_CONTROLLER_PANNING = 0x0A |
|
static const byte | MIDI_CONTROLLER_EXPRESSION = 0x0B |
|
static const byte | MIDI_CONTROLLER_BANK_SELECT_LSB = 0x20 |
|
static const byte | MIDI_CONTROLLER_DATA_ENTRY_LSB = 0x26 |
|
static const byte | MIDI_CONTROLLER_SUSTAIN = 0x40 |
|
static const byte | MIDI_CONTROLLER_PORTAMENTO = 0x41 |
|
static const byte | MIDI_CONTROLLER_SOSTENUTO = 0x42 |
|
static const byte | MIDI_CONTROLLER_SOFT = 0x43 |
|
static const byte | MIDI_CONTROLLER_REVERB = 0x5B |
|
static const byte | MIDI_CONTROLLER_CHORUS = 0x5D |
|
static const byte | MIDI_CONTROLLER_RPN_LSB = 0x64 |
|
static const byte | MIDI_CONTROLLER_RPN_MSB = 0x65 |
|
static const byte | MIDI_CONTROLLER_ALL_SOUND_OFF = 0x78 |
|
static const byte | MIDI_CONTROLLER_RESET_ALL_CONTROLLERS = 0x79 |
|
static const byte | MIDI_CONTROLLER_ALL_NOTES_OFF = 0x7B |
|
static const byte | MIDI_CONTROLLER_OMNI_ON = 0x7C |
|
static const byte | MIDI_CONTROLLER_OMNI_OFF = 0x7D |
|
static const byte | MIDI_CONTROLLER_MONO_ON = 0x7E |
|
static const byte | MIDI_CONTROLLER_POLY_ON = 0x7F |
|
static const uint16 | MIDI_RPN_PITCH_BEND_SENSITIVITY = 0x0000 |
|
static const uint16 | MIDI_RPN_MASTER_TUNING_FINE = 0x0001 |
|
static const uint16 | MIDI_RPN_MASTER_TUNING_COARSE = 0x0002 |
|
static const uint16 | MIDI_RPN_NULL = 0x7F7F |
|
static const uint8 | MIDI_META_END_OF_TRACK = 0x2F |
|
static const uint8 | MIDI_META_SEQUENCER = 0x7F |
|
static const uint16 | MIDI_PITCH_BEND_DEFAULT = 0x2000 |
|
static const uint8 | MIDI_PANNING_DEFAULT = 0x40 |
|
static const uint8 | MIDI_EXPRESSION_DEFAULT = 0x7F |
|
static const uint16 | MIDI_MASTER_TUNING_FINE_DEFAULT = 0x2000 |
|
static const uint8 | MIDI_MASTER_TUNING_COARSE_DEFAULT = 0x40 |
|
static const uint8 | MT32_PITCH_BEND_SENSITIVITY_DEFAULT = 0x0C |
|
static const uint8 | GM_PITCH_BEND_SENSITIVITY_DEFAULT = 0x02 |
|
static const uint8 | GS_RHYTHM_FIRST_NOTE = 0x1B |
|
static const uint8 | GS_RHYTHM_LAST_NOTE = 0x58 |
|
Abstract base class for MIDI drivers supporting multiple simultaneous sources of MIDI data.
These drivers support the following features:
- Multiple MIDI sources If the game plays multiple streams of MIDI data at the same time, each stream can be marked with a source number. When a source has finished playing, it must be deinitialized to release any resources allocated to it. This is done automatically when an End Of Track MIDI meta event is received, or manually by calling deinitSource. Using source numbers enables the following features:
- Music/SFX volume Using setSourceType a MIDI source can be designated as music or sound effects. The driver will then apply the appropriate user volume setting to the MIDI channel volume. This setting sticks after deinitializing a source, so if you use the same source numbers for the same types of MIDI data, you don't need to set the source type repeatedly. The default setup is music for source 0 and SFX for sources 1 and higher.
- Source volume If the game changes the volume of the MIDI playback, you can use setSourceVolume to set the volume level for a source. The driver will then adjust the current MIDI channel volume and any received MIDI volume controller messages. Use setSourceNeutralVolume to set the neutral volume for a source (MIDI volume is not changed when source volume is at this level; if it is lower or higher, MIDI volume is reduced or increased).
- Volume fading If the game needs to gradually change the volume of the MIDI playback (typically for a fade-out), you can use the startFade function. You can check the status of the fade using isFading, and abort a fade using abortFade. An active fade is automatically aborted when the fading source is deinitialized. The fading functionality uses the source volume, so you should not set this while a fade is active. After the fade the source volume will remain at the target level, so if you perform f.e. a fade-out, the source volume will remain at 0. If you want to start playback again using this source, use setSourceVolume to set the correct playback volume. Note that when you stop MIDI playback, notes will not be immediately silent but will gradually die out ("release"). So if you fade out a source, stop playback, and immediately reset the source volume, the note release will be audible. It is recommended to wait about 0.5s before resetting the source volume.
- User volume settings The driver can scale the MIDI channel volume using the user specified volume settings. Just call syncSoundSettings when the user has changed the volume settings. Set the USER_VOLUME_SCALING property to true to enable this functionality.
A driver extending this class must implement the following functions:
- send(source, data): process a MIDI event for a specific source.
- stopAllNotes(source, channel): stop all active notes for a source and/or MIDI channel (called when a source is deinitialized).
- applySourceVolume(source): set the current source volume on active notes and/or MIDI channels.
Specify a default value for a controller which should be set when a new track is started. Use this if a game uses a MIDI controller, but does not consistently set it to a value at the start of every track, causing incorrect playback. Do not use this if a game depends on controller values carrying over to the next track for correct playback.
This functionality will not work if the fallback MIDI source -1 is used. It is also necessary to call deinitSource whenever playback of a track is stopped, as this sets up the contoller reset.
Use the setControllerDefault(ControllerDefaultType) overload if the General MIDI default value for the controller should be used.
- Parameters
-
type | The controller which should be reset. |
value | The default value which should be set. |