[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