[Scummvm-cvs-logs] CVS: scummvm/kyra kyra.cpp,1.8,1.9 sound.cpp,1.1,1.2 sound.h,1.1,1.2
James Brown
ender at users.sourceforge.net
Sun Nov 14 06:13:00 CET 2004
Update of /cvsroot/scummvm/scummvm/kyra
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1845/kyra
Modified Files:
kyra.cpp sound.cpp sound.h
Log Message:
Patch #1066150 from eriktorbjorn - Enable adlib emulated midi as fallback where hardware synth is unavailable.
Index: kyra.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- kyra.cpp 11 Nov 2004 13:35:21 -0000 1.8
+++ kyra.cpp 14 Nov 2004 14:11:54 -0000 1.9
@@ -121,19 +121,25 @@
} else {
error("unknown game");
}
-
- MidiDriver *driver = GameDetector::createMidi(GameDetector::detectMusicDriver(MDT_NATIVE | MDT_PREFER_NATIVE));
- if (driver) {
- if (ConfMan.getBool("native_mt32"))
- driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
- _midiDriver = new MusicPlayer(driver, this);
- assert(_midiDriver);
- _midiDriver->hasNativeMT32(ConfMan.getBool("native_mt32"));
- _midiDriver->setVolume(255);
- } else {
- warning("Couldn't create MIDI driver... No music!");
- _midiDriver = NULL;
- };
+
+ int midiDrv = GameDetector::detectMusicDriver(MDT_NATIVE | MDT_ADLIB | MDT_PREFER_NATIVE);
+ bool native_mt32 = (ConfMan.getBool("native_mt32") || (midiDrv == MD_MT32));
+
+ MidiDriver *driver = GameDetector::createMidi(midiDrv);
+ if (!driver) {
+ // In this case we should play the Adlib tracks, but for now
+ // the automagic MIDI-to-Adlib conversion will do.
+ driver = MidiDriver_ADLIB_create(_mixer);
+ } else if (native_mt32)
+ driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
+
+ _midiDriver = new MusicPlayer(driver, this);
+ assert(_midiDriver);
+ _midiDriver->hasNativeMT32(native_mt32);
+ _midiDriver->setVolume(255);
+
+ if (midiDrv == MD_MT32)
+ _midiDriver->setPassThrough(true);
// Initialize backen
syst->initSize(320, 200);
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/sound.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- sound.cpp 11 Nov 2004 13:37:35 -0000 1.1
+++ sound.cpp 14 Nov 2004 14:11:54 -0000 1.2
@@ -18,6 +18,7 @@
MusicPlayer::MusicPlayer(MidiDriver* driver, KyraEngine* engine) {
_engine = engine;
_driver = driver;
+ _passThrough = false;
_isPlaying = _nativeMT32 = false;
memset(_channel, 0, sizeof(MidiChannel*) * 16);
@@ -73,6 +74,11 @@
}
void MusicPlayer::send(uint32 b) {
+ if (_passThrough) {
+ _driver->send(b);
+ return;
+ }
+
uint8 channel = (byte)(b & 0x0F);
if ((b & 0xFFF0) == 0x07B0) {
// Adjust volume changes by master volume
Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/sound.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- sound.h 11 Nov 2004 13:37:35 -0000 1.1
+++ sound.h 14 Nov 2004 14:11:54 -0000 1.2
@@ -25,6 +25,7 @@
void stopMusic();
void playTrack(uint8 track);
+ void setPassThrough(bool b) { _passThrough = b; }
//MidiDriver interface implementation
int open();
@@ -47,6 +48,7 @@
uint8 _channelVolume[16];
MidiDriver* _driver;
bool _nativeMT32;
+ bool _passThrough;
uint8 _volume;
bool _isPlaying;
MidiParser* _parser;
More information about the Scummvm-git-logs
mailing list