[Scummvm-git-logs] scummvm master -> 56ff3ac2a0a40de25f1eda19c5f34a36f4307b47
bluegr
noreply at scummvm.org
Mon Jun 9 16:57:38 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
56ff3ac2a0 MADE: Split up the music player class to support other platforms
Commit: 56ff3ac2a0a40de25f1eda19c5f34a36f4307b47
https://github.com/scummvm/scummvm/commit/56ff3ac2a0a40de25f1eda19c5f34a36f4307b47
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-06-09T19:57:34+03:00
Commit Message:
MADE: Split up the music player class to support other platforms
Changed paths:
engines/made/made.cpp
engines/made/music.cpp
engines/made/music.h
engines/made/scriptfuncs.cpp
engines/made/scriptfuncs.h
diff --git a/engines/made/made.cpp b/engines/made/made.cpp
index 8cefda048f4..fcb0a6a4a25 100644
--- a/engines/made/made.cpp
+++ b/engines/made/made.cpp
@@ -111,7 +111,8 @@ MadeEngine::~MadeEngine() {
void MadeEngine::syncSoundSettings() {
Engine::syncSoundSettings();
- _music->syncSoundSettings();
+ if (_music)
+ _music->syncSoundSettings();
}
int16 MadeEngine::getTicks() {
@@ -249,7 +250,10 @@ void MadeEngine::handleEvents() {
}
Common::Error MadeEngine::run() {
- _music = new MusicPlayer(this, getGameID() == GID_RTZ);
+ if (getPlatform() == Common::kPlatformMacintosh)
+ _music = nullptr; // TODO: Macintosh music player
+ else
+ _music = new DOSMusicPlayer(this, getGameID() == GID_RTZ);
syncSoundSettings();
// Initialize backend
@@ -308,7 +312,8 @@ Common::Error MadeEngine::run() {
_script->runScript(_dat->getMainCodeObjectIndex());
#endif
- _music->close();
+ if (_music)
+ _music->close();
return Common::kNoError;
}
diff --git a/engines/made/music.cpp b/engines/made/music.cpp
index c28d047ad7d..9eb257de1b0 100644
--- a/engines/made/music.cpp
+++ b/engines/made/music.cpp
@@ -35,9 +35,9 @@
namespace Made {
-const uint8 MusicPlayer::MT32_GOODBYE_MSG[] = { 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x54, 0x6F, 0x20, 0x5A, 0x6F, 0x72, 0x6B, 0x20, 0x53, 0x6F, 0x6F, 0x6E, 0x21 };
+const uint8 DOSMusicPlayer::MT32_GOODBYE_MSG[] = { 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x54, 0x6F, 0x20, 0x5A, 0x6F, 0x72, 0x6B, 0x20, 0x53, 0x6F, 0x6F, 0x6E, 0x21 };
-MusicPlayer::MusicPlayer(MadeEngine *vm, bool milesAudio) : _vm(vm), _parser(nullptr) {
+DOSMusicPlayer::DOSMusicPlayer(MadeEngine *vm, bool milesAudio) : _vm(vm), _parser(nullptr) {
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MT32);
_driverType = MidiDriver::getMusicType(dev);
if (_driverType == MT_GM && ConfMan.getBool("native_mt32"))
@@ -83,7 +83,7 @@ MusicPlayer::MusicPlayer(MadeEngine *vm, bool milesAudio) : _vm(vm), _parser(nul
syncSoundSettings();
}
-MusicPlayer::~MusicPlayer() {
+DOSMusicPlayer::~DOSMusicPlayer() {
if (_parser) {
_parser->stopPlaying();
delete _parser;
@@ -95,7 +95,7 @@ MusicPlayer::~MusicPlayer() {
}
}
-void MusicPlayer::close() {
+void DOSMusicPlayer::close() {
if (_parser)
_parser->stopPlaying();
@@ -107,7 +107,39 @@ void MusicPlayer::close() {
}
}
-void MusicPlayer::playXMIDI(GenericResource *midiResource) {
+bool DOSMusicPlayer::load(int16 musicNum) {
+ GenericResource *xmidi = _vm->_res->getXmidi(musicNum);
+ if (xmidi) {
+ _vm->_res->freeResource(xmidi);
+ return true;
+ }
+ return false;
+}
+
+void DOSMusicPlayer::play(int16 musicNum) {
+ if (_vm->getGameID() == GID_RTZ) {
+ if (musicNum > 0) {
+ _musicRes = _vm->_res->getXmidi(musicNum);
+ if (_musicRes)
+ playXMIDI(_musicRes);
+ }
+ } else {
+ // HACK: music number 2 in LGOP2 is file MT32SET.TON, which
+ // is used to set the MT32 instruments. This is not loaded
+ // correctly and the game freezes, and since we don't support
+ // MT32 music yet, we ignore it here
+ // FIXME: Remove this hack and handle this file properly
+ if (_vm->getGameID() == GID_LGOP2 && musicNum == 2)
+ return;
+ if (musicNum > 0) {
+ _musicRes = _vm->_res->getMidi(musicNum);
+ if (_musicRes)
+ playSMF(_musicRes);
+ }
+ }
+}
+
+void DOSMusicPlayer::playXMIDI(GenericResource *midiResource) {
if (_parser) {
_parser->unloadMusic();
} else {
@@ -123,7 +155,7 @@ void MusicPlayer::playXMIDI(GenericResource *midiResource) {
_parser->loadMusic(midiResource->getData(), midiResource->getSize());
}
-void MusicPlayer::playSMF(GenericResource *midiResource) {
+void DOSMusicPlayer::playSMF(GenericResource *midiResource) {
if (_parser) {
_parser->unloadMusic();
} else {
@@ -139,37 +171,42 @@ void MusicPlayer::playSMF(GenericResource *midiResource) {
_parser->loadMusic(midiResource->getData(), midiResource->getSize());
}
-void MusicPlayer::pause() {
+void DOSMusicPlayer::pause() {
if (_parser)
_parser->pausePlaying();
}
-void MusicPlayer::resume() {
+void DOSMusicPlayer::resume() {
if (_parser)
_parser->resumePlaying();
}
-void MusicPlayer::stop() {
+void DOSMusicPlayer::stop() {
if (_parser)
_parser->stopPlaying();
+
+ if (_musicRes) {
+ _vm->_res->freeResource(_musicRes);
+ _musicRes = nullptr;
+ }
}
-bool MusicPlayer::isPlaying() {
+bool DOSMusicPlayer::isPlaying() {
return _parser ? _parser->isPlaying() : false;
}
-void MusicPlayer::syncSoundSettings() {
+void DOSMusicPlayer::syncSoundSettings() {
if (_driver)
_driver->syncSoundSettings();
}
-void MusicPlayer::onTimer() {
+void DOSMusicPlayer::onTimer() {
if (_parser)
_parser->onTimer();
}
-void MusicPlayer::timerCallback(void *data) {
- ((MusicPlayer *)data)->onTimer();
+void DOSMusicPlayer::timerCallback(void *data) {
+ ((DOSMusicPlayer *)data)->onTimer();
}
MidiDriver_ADLIB_MADE::MidiDriver_ADLIB_MADE(OPL::Config::OplType oplType) : MidiDriver_ADLIB_Multisource(oplType) {
diff --git a/engines/made/music.h b/engines/made/music.h
index db459a01611..b9db4068f9a 100644
--- a/engines/made/music.h
+++ b/engines/made/music.h
@@ -37,23 +37,39 @@ namespace Made {
class GenericResource;
class MusicPlayer {
+public:
+ virtual ~MusicPlayer() {}
+
+ virtual void close() = 0;
+
+ virtual bool load(int16 musicNum) = 0;
+ virtual void play(int16 musicNum) = 0;
+ virtual void stop() = 0;
+ virtual void pause() = 0;
+ virtual void resume() = 0;
+
+ virtual bool isPlaying() = 0;
+ virtual void syncSoundSettings() = 0;
+};
+
+class DOSMusicPlayer : public MusicPlayer {
private:
static const uint8 MT32_GOODBYE_MSG[MidiDriver_MT32GM::MT32_DISPLAY_NUM_CHARS];
public:
- MusicPlayer(MadeEngine *vm, bool milesAudio);
- ~MusicPlayer();
+ DOSMusicPlayer(MadeEngine *vm, bool milesAudio);
+ ~DOSMusicPlayer();
- void close();
+ void close() override;
- void playXMIDI(GenericResource *midiResource);
- void playSMF(GenericResource *midiResource);
- void stop();
- void pause();
- void resume();
+ bool load(int16 musicNum) override;
+ void play(int16 musicNum) override;
+ void stop() override;
+ void pause() override;
+ void resume() override;
- bool isPlaying();
- void syncSoundSettings();
+ bool isPlaying() override;
+ void syncSoundSettings() override;
private:
MadeEngine *_vm;
@@ -62,6 +78,11 @@ private:
MusicType _driverType;
+ GenericResource *_musicRes;
+
+ void playXMIDI(GenericResource *midiResource);
+ void playSMF(GenericResource *midiResource);
+
static void timerCallback(void *refCon);
void onTimer();
};
diff --git a/engines/made/scriptfuncs.cpp b/engines/made/scriptfuncs.cpp
index eb5e4d2e1eb..bacf1d73db4 100644
--- a/engines/made/scriptfuncs.cpp
+++ b/engines/made/scriptfuncs.cpp
@@ -42,7 +42,6 @@ ScriptFunctions::ScriptFunctions(MadeEngine *vm) : _vm(vm), _soundStarted(false)
_vm->_system->getMixer()->playStream(Audio::Mixer::kMusicSoundType, &_pcSpeakerHandle1, _pcSpeaker1);
_vm->_system->getMixer()->playStream(Audio::Mixer::kMusicSoundType, &_pcSpeakerHandle2, _pcSpeaker2);
_soundResource = nullptr;
- _musicRes = nullptr;
}
ScriptFunctions::~ScriptFunctions() {
@@ -271,41 +270,21 @@ int16 ScriptFunctions::sfPlayMusic(int16 argc, int16 *argv) {
_vm->_musicBeatStart = _vm->_system->getMillis();
- if (_vm->getGameID() == GID_RTZ) {
- if (musicNum > 0) {
- _musicRes = _vm->_res->getXmidi(musicNum);
- if (_musicRes)
- _vm->_music->playXMIDI(_musicRes);
- }
- } else {
- // HACK: music number 2 in LGOP2 is file MT32SET.TON, which
- // is used to set the MT32 instruments. This is not loaded
- // correctly and the game freezes, and since we don't support
- // MT32 music yet, we ignore it here
- // FIXME: Remove this hack and handle this file properly
- if (_vm->getGameID() == GID_LGOP2 && musicNum == 2)
- return 0;
- if (musicNum > 0) {
- _musicRes = _vm->_res->getMidi(musicNum);
- if (_musicRes)
- _vm->_music->playSMF(_musicRes);
- }
- }
+ if (_vm->_music)
+ _vm->_music->play(musicNum);
return 0;
}
int16 ScriptFunctions::sfStopMusic(int16 argc, int16 *argv) {
- if (_vm->_music->isPlaying() && _musicRes) {
+ if (_vm->_music && _vm->_music->isPlaying()) {
_vm->_music->stop();
- _vm->_res->freeResource(_musicRes);
- _musicRes = nullptr;
}
return 0;
}
int16 ScriptFunctions::sfIsMusicPlaying(int16 argc, int16 *argv) {
- if (_vm->_music->isPlaying())
+ if (_vm->_music && _vm->_music->isPlaying())
return 1;
else
return 0;
@@ -782,12 +761,10 @@ int16 ScriptFunctions::sfLoadSound(int16 argc, int16 *argv) {
}
int16 ScriptFunctions::sfLoadMusic(int16 argc, int16 *argv) {
- GenericResource *xmidi = _vm->_res->getXmidi(argv[0]);
- if (xmidi) {
- _vm->_res->freeResource(xmidi);
+ if (_vm->_music && _vm->_music->load(argv[0]))
return 1;
- }
- return 0;
+ else
+ return 0;
}
int16 ScriptFunctions::sfLoadPicture(int16 argc, int16 *argv) {
diff --git a/engines/made/scriptfuncs.h b/engines/made/scriptfuncs.h
index 1243ebdeeda..47c61a804c6 100644
--- a/engines/made/scriptfuncs.h
+++ b/engines/made/scriptfuncs.h
@@ -74,7 +74,6 @@ protected:
Common::Array<const ExternalFunc *> _externalFuncs;
Common::Array<const char *> _externalFuncNames;
- GenericResource *_musicRes;
int16 sfSystemCall(int16 argc, int16 *argv);
int16 sfInitGraf(int16 argc, int16 *argv);
More information about the Scummvm-git-logs
mailing list