AUDIO/MIDI: Add multisource support to QuickTime MIDI parser
Adds support for passing a source number to the MIDI driver to the QuickTime MIDI parser.
This commit is contained in:
parent
9f96a86fec
commit
3c16991c05
3 changed files with 38 additions and 9 deletions
|
@ -492,7 +492,7 @@ public:
|
|||
|
||||
static MidiParser *createParser_SMF(int8 source = -1);
|
||||
static MidiParser *createParser_XMIDI(XMidiCallbackProc proc = defaultXMidiCallback, void *refCon = 0, int source = -1);
|
||||
static MidiParser *createParser_QT();
|
||||
static MidiParser *createParser_QT(int8 source = -1);
|
||||
static void timerCallback(void *data) { ((MidiParser *) data)->onTimer(); }
|
||||
};
|
||||
/** @} */
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
#include "audio/midiparser_qt.h"
|
||||
#include "audio/mididrv.h"
|
||||
#include "common/debug.h"
|
||||
#include "common/memstream.h"
|
||||
|
||||
|
@ -399,6 +400,22 @@ void MidiParser_QT::resetTracking() {
|
|||
_partMap.clear();
|
||||
}
|
||||
|
||||
void MidiParser_QT::sendToDriver(uint32 b) {
|
||||
if (_source < 0) {
|
||||
MidiParser::sendToDriver(b);
|
||||
} else {
|
||||
_driver->send(_source, b);
|
||||
}
|
||||
}
|
||||
|
||||
void MidiParser_QT::sendMetaEventToDriver(byte type, byte *data, uint16 length) {
|
||||
if (_source < 0) {
|
||||
MidiParser::sendMetaEventToDriver(type, data, length);
|
||||
} else {
|
||||
_driver->metaEvent(_source, type, data, length);
|
||||
}
|
||||
}
|
||||
|
||||
Common::QuickTimeParser::SampleDesc *MidiParser_QT::readSampleDesc(Track *track, uint32 format, uint32 descSize) {
|
||||
if (track->codecType == CODEC_TYPE_MIDI) {
|
||||
debug(0, "MIDI Codec FourCC '%s'", tag2str(format));
|
||||
|
@ -495,6 +512,6 @@ uint32 MidiParser_QT::readUint32() {
|
|||
return value;
|
||||
}
|
||||
|
||||
MidiParser *MidiParser::createParser_QT() {
|
||||
return new MidiParser_QT();
|
||||
MidiParser *MidiParser::createParser_QT(int8 source) {
|
||||
return new MidiParser_QT(source);
|
||||
}
|
||||
|
|
|
@ -55,12 +55,12 @@
|
|||
*/
|
||||
class MidiParser_QT : public MidiParser, public Common::QuickTimeParser {
|
||||
public:
|
||||
MidiParser_QT() {}
|
||||
MidiParser_QT(int8 source = -1) : _source(source) {}
|
||||
~MidiParser_QT() {}
|
||||
|
||||
// MidiParser
|
||||
bool loadMusic(byte *data, uint32 size);
|
||||
void unloadMusic();
|
||||
bool loadMusic(byte *data, uint32 size) override;
|
||||
void unloadMusic() override;
|
||||
|
||||
/**
|
||||
* Load the MIDI from a 'Tune' resource
|
||||
|
@ -79,11 +79,23 @@ public:
|
|||
|
||||
protected:
|
||||
// MidiParser
|
||||
void parseNextEvent(EventInfo &info);
|
||||
void resetTracking();
|
||||
void parseNextEvent(EventInfo &info) override;
|
||||
void resetTracking() override;
|
||||
|
||||
void sendToDriver(uint32 b) override;
|
||||
void sendMetaEventToDriver(byte type, byte *data, uint16 length) override;
|
||||
|
||||
// QuickTimeParser
|
||||
SampleDesc *readSampleDesc(Track *track, uint32 format, uint32 descSize);
|
||||
SampleDesc *readSampleDesc(Track *track, uint32 format, uint32 descSize) override;
|
||||
|
||||
/**
|
||||
* The source number to use when sending MIDI messages to the driver.
|
||||
* When using multiple sources, use source 0 and higher. This must be
|
||||
* used when source volume or channel locking is used.
|
||||
* By default this is -1, which means the parser is the only source
|
||||
* of MIDI messages and multiple source functionality is disabled.
|
||||
*/
|
||||
int8 _source;
|
||||
|
||||
private:
|
||||
struct MIDITrackInfo {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue