AUDIO: Add Audio::MidiPlayer::createDriver(), let some engines use it

This commit is contained in:
Max Horn 2011-03-28 18:06:24 +02:00
parent a33ee051d0
commit 8c931fd1e8
10 changed files with 24 additions and 50 deletions

View File

@ -61,6 +61,17 @@ MidiPlayer::~MidiPlayer() {
}
}
void MidiPlayer::createDriver(int flags) {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(flags);
_nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"));
_driver = MidiDriver::createMidi(dev);
assert(_driver);
if (_nativeMT32)
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
}
void MidiPlayer::setVolume(int volume) {
volume = CLIP(volume, 0, 255);
if (_masterVolume == volume)

View File

@ -142,6 +142,9 @@ protected:
static void timerCallback(void *data);
void createDriver(int flags = MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
protected:
enum {
/**
* The number of MIDI channels supported.

View File

@ -72,16 +72,7 @@ MIDISound::MIDISound(uint8 *data, uint32 len, int resnum, SoundMgr &manager) : A
}
SoundGenMIDI::SoundGenMIDI(AgiEngine *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMixer), _isGM(false) {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB);
_driver = MidiDriver::createMidi(dev);
assert(_driver);
if (ConfMan.getBool("native_mt32") || MidiDriver::getMusicType(dev) == MT_MT32) {
_nativeMT32 = true;
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
} else {
_nativeMT32 = false;
}
MidiPlayer::createDriver(MDT_MIDI | MDT_ADLIB);
int ret = _driver->open();
if (ret == 0) {

View File

@ -38,14 +38,7 @@ namespace Draci {
MusicPlayer::MusicPlayer(const char *pathMask) : _pathMask(pathMask), _isGM(false), _track(-1) {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
_nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"));
//bool adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB);
_driver = MidiDriver::createMidi(dev);
assert(_driver);
if (_nativeMT32)
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
MidiPlayer::createDriver();
int ret = _driver->open();
if (ret == 0) {

View File

@ -36,13 +36,7 @@ namespace M4 {
MidiPlayer::MidiPlayer(MadsM4Engine *vm) : _vm(vm), _isGM(false) {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
_nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"));
_driver = MidiDriver::createMidi(dev);
assert(_driver);
if (_nativeMT32)
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
MidiPlayer::createDriver();
int ret = _driver->open();
if (ret == 0) {

View File

@ -38,14 +38,7 @@
namespace Made {
MusicPlayer::MusicPlayer() : _isGM(false) {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
_nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"));
//bool adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB);
_driver = MidiDriver::createMidi(dev);
assert(_driver);
if (_nativeMT32)
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
MidiPlayer::createDriver();
int ret = _driver->open();
if (ret == 0) {

View File

@ -45,14 +45,10 @@ namespace Saga {
MusicDriver::MusicDriver() : _isGM(false) {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
_nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"));
MidiPlayer::createDriver();
_driver = MidiDriver::createMidi(dev);
assert(_driver);
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
_driverType = MidiDriver::getMusicType(dev);
if (_nativeMT32)
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
int retValue = _driver->open();
if (retValue == 0) {

View File

@ -52,7 +52,7 @@ public:
virtual void pause();
virtual void resume();
bool isAdlib() { return _driverType == MT_ADLIB; }
bool isAdlib() const { return _driverType == MT_ADLIB; }
// FIXME
bool isPlaying() const { return _parser && _parser->isPlaying(); }

View File

@ -53,8 +53,8 @@ GmMusic::~GmMusic() {
stopMusic();
// Send All Sound Off and All Notes Off (for external synths)
for (int i = 0; i < 16; i++) {
_midiDrv->send ((120 << 8) | 0xB0 | i);
_midiDrv->send ((123 << 8) | 0xB0 | i);
_midiDrv->send((120 << 8) | 0xB0 | i);
_midiDrv->send((123 << 8) | 0xB0 | i);
}
_midiDrv->close();
delete _midiDrv;

View File

@ -387,14 +387,7 @@ void DeleteMidiBuffer() {
}
MidiMusicPlayer::MidiMusicPlayer() {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
_nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"));
//bool adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB);
_driver = MidiDriver::createMidi(dev);
assert(_driver);
if (_nativeMT32)
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
MidiPlayer::createDriver();
int ret = _driver->open();
if (ret == 0) {