From 7ecf553e24ce6d8267e66bb903388ff55805e418 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Sun, 28 Jun 2015 01:16:43 +0200 Subject: GROOVIE: add support for Miles Audio MIDI driver - currently optional, to enable set milesAudioEnabled to true --- engines/groovie/music.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'engines/groovie/music.cpp') diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp index 2c164e020c..795a6e6f2d 100644 --- a/engines/groovie/music.cpp +++ b/engines/groovie/music.cpp @@ -36,6 +36,7 @@ #include "common/textconsole.h" #include "audio/audiostream.h" #include "audio/midiparser.h" +#include "audio/miles.h" namespace Groovie { @@ -384,7 +385,42 @@ MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String >lName) // Create the driver MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM); - _driver = MidiDriver::createMidi(dev); + MusicType musicType = MidiDriver::getMusicType(dev); + _driver = NULL; + + // new Miles Audio support, to enable set milesAudioEnabled to true + // Attention: MT32 timbre file currently not supported, work in progress + _milesAudioMode = false; + bool milesAudioEnabled = false; + + if (milesAudioEnabled) { + // 7th Guest uses FAT.AD/FAT.OPL/FAT.MT + // 11th Hour uses SAMPLE.AD/SAMPLE.OPL/SAMPLE.MT + switch (musicType) { + case MT_ADLIB: + _driver = Audio::MidiDriver_Miles_AdLib_create(gtlName + ".AD", gtlName + ".OPL"); + break; + case MT_MT32: + _driver = Audio::MidiDriver_Miles_MT32_create(gtlName + ".MT"); + break; + case MT_GM: + if (ConfMan.getBool("native_mt32")) { + _driver = Audio::MidiDriver_Miles_MT32_create(gtlName + "FAT.MT"); + musicType = MT_MT32; + } + break; + } + } + + if (_driver) { + _milesAudioMode = true; + } + + if (!_driver) { + // No driver yet? create a generic one + _driver = MidiDriver::createMidi(dev); + } + assert(_driver); _driver->open(); // TODO: Handle return value != 0 (indicating an error) @@ -400,6 +436,9 @@ MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String >lName) _chanBanks[i] = 0; } + if (_milesAudioMode) + return; + // Load the Global Timbre Library if (MidiDriver::getMusicType(dev) == MT_ADLIB) { // MIDI through AdLib @@ -433,6 +472,11 @@ MusicPlayerXMI::~MusicPlayerXMI() { } void MusicPlayerXMI::send(uint32 b) { + if (_milesAudioMode) { + MusicPlayerMidi::send(b); + return; + } + if ((b & 0xFFF0) == 0x72B0) { // XMIDI Patch Bank Select 114 // From AIL2's documentation: XMIDI Patch Bank Select controller (114) // selects a bank to be used when searching the next patches -- cgit v1.2.3 From 30de61dcce96275b36c42f17f369b2e6e8c35e8e Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sun, 28 Jun 2015 20:04:02 -0400 Subject: GROOVIE: Silence a gcc warning --- engines/groovie/music.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/groovie/music.cpp') diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp index 795a6e6f2d..f72e3e4e5a 100644 --- a/engines/groovie/music.cpp +++ b/engines/groovie/music.cpp @@ -409,6 +409,8 @@ MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String >lName) musicType = MT_MT32; } break; + default: + break; } } -- cgit v1.2.3 From bf180101a696b5def2335ad296dc7949969ebd99 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Tue, 30 Jun 2015 16:11:26 +0200 Subject: GROOVIE: add support for TIMB chunk also fix MT32 instrument filename (which was "fatFAT.MT" by accident) --- engines/groovie/music.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'engines/groovie/music.cpp') diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp index f72e3e4e5a..c00290b155 100644 --- a/engines/groovie/music.cpp +++ b/engines/groovie/music.cpp @@ -380,18 +380,16 @@ bool MusicPlayerMidi::loadParser(Common::SeekableReadStream *stream, bool loop) MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String >lName) : MusicPlayerMidi(vm) { - // Create the parser - _midiParser = MidiParser::createParser_XMIDI(); // Create the driver MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM); MusicType musicType = MidiDriver::getMusicType(dev); _driver = NULL; - // new Miles Audio support, to enable set milesAudioEnabled to true - // Attention: MT32 timbre file currently not supported, work in progress + // new Miles Audio support, to disable set milesAudioEnabled to false _milesAudioMode = false; - bool milesAudioEnabled = false; + bool milesAudioEnabled = true; + MidiParser::XMidiNewTimbreListProc newTimbreListProc = NULL; if (milesAudioEnabled) { // 7th Guest uses FAT.AD/FAT.OPL/FAT.MT @@ -405,13 +403,17 @@ MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String >lName) break; case MT_GM: if (ConfMan.getBool("native_mt32")) { - _driver = Audio::MidiDriver_Miles_MT32_create(gtlName + "FAT.MT"); + _driver = Audio::MidiDriver_Miles_MT32_create(gtlName + ".MT"); musicType = MT_MT32; } break; default: break; } + + if (musicType == MT_MT32) { + newTimbreListProc = Audio::MidiDriver_Miles_MT32_processXMIDITimbreChunk; + } } if (_driver) { @@ -425,6 +427,9 @@ MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String >lName) assert(_driver); + // Create the parser + _midiParser = MidiParser::createParser_XMIDI(NULL, NULL, newTimbreListProc, _driver); + _driver->open(); // TODO: Handle return value != 0 (indicating an error) // Set the parser's driver -- cgit v1.2.3