From bfebfbc127c4cead483f6d187c542ee5343d7954 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sun, 28 Jun 2015 11:56:58 +0200 Subject: TOLTECS: Use the Miles audio drivers for AdLib and MT-32 There doesn't seem to be much music in the game, so I've only been able to test it with the music when riding the trolley. The MT-32 music is just as bad as in DOSBox, and you should feel bad. --- NEWS | 5 ++++- engines/toltecs/music.cpp | 38 +++++++++++++++++++++++++++++++++----- engines/toltecs/music.h | 1 + 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index 51cef25384..2c57bff077 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,9 @@ For a more comprehensive changelog of the latest experimental code, see: General: - Updated Munt MT-32 emulation code to version 1.5.0. + 3 Skulls of the Toltecs: + - Improved AdLib music support. + AGI: - It is now possible to disable mouse support (except for Amiga versions and fanmade games, that require a mouse). @@ -42,7 +45,7 @@ For a more comprehensive changelog of the latest experimental code, see: Tentacle, with a few caveats. See README for details. Tinsel: - - improved AdLib music support in Discworld 1 + - Improved AdLib music support in Discworld 1 1.7.0 (2014-07-21) New Games: diff --git a/engines/toltecs/music.cpp b/engines/toltecs/music.cpp index e4e067de39..97d8b1aea2 100644 --- a/engines/toltecs/music.cpp +++ b/engines/toltecs/music.cpp @@ -21,6 +21,7 @@ */ #include "audio/midiparser.h" +#include "audio/miles.h" #include "common/textconsole.h" #include "toltecs/toltecs.h" @@ -30,20 +31,47 @@ namespace Toltecs { MusicPlayer::MusicPlayer(bool isGM) : _isGM(isGM), _buffer(NULL) { - MidiPlayer::createDriver(); + MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM); + MusicType musicType = MidiDriver::getMusicType(dev); + + switch (musicType) { + case MT_ADLIB: + _milesAudioMode = true; + _driver = Audio::MidiDriver_Miles_AdLib_create("SAMPLE.AD", "SAMPLE.OPL"); + break; + case MT_MT32: + // Not recommended since it sounds awful, but apparently the + // original sounded just as bad. I guess MT-32 support was + // added by default, not because anyone actually put any work + // into it. + _milesAudioMode = true; + _driver = Audio::MidiDriver_Miles_MT32_create(""); + break; + default: + _milesAudioMode = false; + MidiPlayer::createDriver(); + break; + } int ret = _driver->open(); if (ret == 0) { - if (_nativeMT32) - _driver->sendMT32Reset(); - else - _driver->sendGMReset(); + if (musicType != MT_ADLIB) { + if (musicType == MT_MT32 || _nativeMT32) + _driver->sendMT32Reset(); + else + _driver->sendGMReset(); + } _driver->setTimerCallback(this, &timerCallback); } } void MusicPlayer::send(uint32 b) { + if (_milesAudioMode) { + _driver->send(b); + return; + } + if ((b & 0xF0) == 0xC0 && !_isGM && !_nativeMT32) { b = (b & 0xFFFF00FF) | MidiDriver::_mt32ToGm[(b >> 8) & 0xFF] << 8; } diff --git a/engines/toltecs/music.h b/engines/toltecs/music.h index e6dc3dd146..25d67e9334 100644 --- a/engines/toltecs/music.h +++ b/engines/toltecs/music.h @@ -47,6 +47,7 @@ protected: private: byte *_buffer; + bool _milesAudioMode; }; class Music : public MusicPlayer { -- cgit v1.2.3