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_SMF(int8 source = -1);
|
||||||
static MidiParser *createParser_XMIDI(XMidiCallbackProc proc = defaultXMidiCallback, void *refCon = 0, int 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(); }
|
static void timerCallback(void *data) { ((MidiParser *) data)->onTimer(); }
|
||||||
};
|
};
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "audio/midiparser_qt.h"
|
#include "audio/midiparser_qt.h"
|
||||||
|
#include "audio/mididrv.h"
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
#include "common/memstream.h"
|
#include "common/memstream.h"
|
||||||
|
|
||||||
|
@ -399,6 +400,22 @@ void MidiParser_QT::resetTracking() {
|
||||||
_partMap.clear();
|
_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) {
|
Common::QuickTimeParser::SampleDesc *MidiParser_QT::readSampleDesc(Track *track, uint32 format, uint32 descSize) {
|
||||||
if (track->codecType == CODEC_TYPE_MIDI) {
|
if (track->codecType == CODEC_TYPE_MIDI) {
|
||||||
debug(0, "MIDI Codec FourCC '%s'", tag2str(format));
|
debug(0, "MIDI Codec FourCC '%s'", tag2str(format));
|
||||||
|
@ -495,6 +512,6 @@ uint32 MidiParser_QT::readUint32() {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
MidiParser *MidiParser::createParser_QT() {
|
MidiParser *MidiParser::createParser_QT(int8 source) {
|
||||||
return new MidiParser_QT();
|
return new MidiParser_QT(source);
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,12 +55,12 @@
|
||||||
*/
|
*/
|
||||||
class MidiParser_QT : public MidiParser, public Common::QuickTimeParser {
|
class MidiParser_QT : public MidiParser, public Common::QuickTimeParser {
|
||||||
public:
|
public:
|
||||||
MidiParser_QT() {}
|
MidiParser_QT(int8 source = -1) : _source(source) {}
|
||||||
~MidiParser_QT() {}
|
~MidiParser_QT() {}
|
||||||
|
|
||||||
// MidiParser
|
// MidiParser
|
||||||
bool loadMusic(byte *data, uint32 size);
|
bool loadMusic(byte *data, uint32 size) override;
|
||||||
void unloadMusic();
|
void unloadMusic() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the MIDI from a 'Tune' resource
|
* Load the MIDI from a 'Tune' resource
|
||||||
|
@ -79,11 +79,23 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// MidiParser
|
// MidiParser
|
||||||
void parseNextEvent(EventInfo &info);
|
void parseNextEvent(EventInfo &info) override;
|
||||||
void resetTracking();
|
void resetTracking() override;
|
||||||
|
|
||||||
|
void sendToDriver(uint32 b) override;
|
||||||
|
void sendMetaEventToDriver(byte type, byte *data, uint16 length) override;
|
||||||
|
|
||||||
// QuickTimeParser
|
// 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:
|
private:
|
||||||
struct MIDITrackInfo {
|
struct MIDITrackInfo {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue