aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2015-06-28 11:56:58 +0200
committerTorbjörn Andersson2015-06-28 11:56:58 +0200
commitbfebfbc127c4cead483f6d187c542ee5343d7954 (patch)
treefd0f725f8d959d11276ad6228387ad1e3aa8664e
parent343d0c41dbc7e4473787b2ae0275ba7e80b27480 (diff)
downloadscummvm-rg350-bfebfbc127c4cead483f6d187c542ee5343d7954.tar.gz
scummvm-rg350-bfebfbc127c4cead483f6d187c542ee5343d7954.tar.bz2
scummvm-rg350-bfebfbc127c4cead483f6d187c542ee5343d7954.zip
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.
-rw-r--r--NEWS5
-rw-r--r--engines/toltecs/music.cpp38
-rw-r--r--engines/toltecs/music.h1
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 {