[Scummvm-git-logs] scummvm master -> 5b18d1aa6b7831af2581afdb11942ff04050d18b

AndywinXp noreply at scummvm.org
Mon Jan 2 22:31:04 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
5b18d1aa6b SCUMM: DIMUSE: Implement support for higher internal sample rates


Commit: 5b18d1aa6b7831af2581afdb11942ff04050d18b
    https://github.com/scummvm/scummvm/commit/5b18d1aa6b7831af2581afdb11942ff04050d18b
Author: AndywinXp (andywinxp at gmail.com)
Date: 2023-01-02T23:30:57+01:00

Commit Message:
SCUMM: DIMUSE: Implement support for higher internal sample rates

This lays the ground for:
* Supporting fan dubbings and self-made high quality music replacement;
* Reintroduction of support for compressed audio.

Changed paths:
    engines/scumm/imuse_digi/dimuse_engine.cpp
    engines/scumm/imuse_digi/dimuse_engine.h
    engines/scumm/scumm.cpp


diff --git a/engines/scumm/imuse_digi/dimuse_engine.cpp b/engines/scumm/imuse_digi/dimuse_engine.cpp
index 3763e908196..f05fad7b7d6 100644
--- a/engines/scumm/imuse_digi/dimuse_engine.cpp
+++ b/engines/scumm/imuse_digi/dimuse_engine.cpp
@@ -41,7 +41,7 @@ void IMuseDigital::timer_handler(void *refCon) {
 	diMUSE->callback();
 }
 
-IMuseDigital::IMuseDigital(ScummEngine_v7 *scumm, Audio::Mixer *mixer, Common::Mutex *mutex)
+IMuseDigital::IMuseDigital(ScummEngine_v7 *scumm, int sampleRate, Audio::Mixer *mixer, Common::Mutex *mutex)
 	: _vm(scumm), _mixer(mixer), _mutex(mutex) {
 	assert(_vm);
 	assert(mixer);
@@ -50,7 +50,7 @@ IMuseDigital::IMuseDigital(ScummEngine_v7 *scumm, Audio::Mixer *mixer, Common::M
 	_callbackFps = DIMUSE_TIMER_BASE_RATE_HZ;
 	_usecPerInt = DIMUSE_TIMER_BASE_RATE_USEC;
 
-	_internalSampleRate = DIMUSE_BASE_SAMPLERATE;
+	_internalSampleRate = sampleRate;
 	_internalFeedSize = (int)(DIMUSE_BASE_FEEDSIZE * ((float)_internalSampleRate / DIMUSE_BASE_SAMPLERATE));
 
 	_splayer = nullptr;
diff --git a/engines/scumm/imuse_digi/dimuse_engine.h b/engines/scumm/imuse_digi/dimuse_engine.h
index 9f9aafa8876..072ed91ebdb 100644
--- a/engines/scumm/imuse_digi/dimuse_engine.h
+++ b/engines/scumm/imuse_digi/dimuse_engine.h
@@ -307,7 +307,7 @@ private:
 	byte waveOutGetStreamFlags();
 
 public:
-	IMuseDigital(ScummEngine_v7 *scumm, Audio::Mixer *mixer, Common::Mutex *mutex);
+	IMuseDigital(ScummEngine_v7 *scumm, int sampleRate, Audio::Mixer *mixer, Common::Mutex *mutex);
 	~IMuseDigital() override;
 
 	// Wrapper functions used by the main engine
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index ddc0932eefc..c56c9ad10e6 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -1430,7 +1430,20 @@ void ScummEngine_v7::setupScumm(const Common::String &macResourceFile) {
 		filesAreCompressed |= _sound->isSfxFileCompressed();
 	}
 
-	_musicEngine = _imuseDigital = new IMuseDigital(this, _mixer, &_resourceAccessMutex);
+	int sampleRate = DIMUSE_BASE_SAMPLERATE;
+
+	ConfMan.registerDefault("dimuse_sample_rate", DIMUSE_BASE_SAMPLERATE);
+	if (ConfMan.hasKey("dimuse_sample_rate", _targetName)) {
+		// Only accept sample rates which are a multiple or submultiple of 22050, with
+		// lower and upper bounds set to what the internal mixer is currently able to achieve...
+		if ((ConfMan.getInt("dimuse_sample_rate") % (DIMUSE_BASE_SAMPLERATE / 2)) == 0 &&
+			(ConfMan.getInt("dimuse_sample_rate") >= DIMUSE_BASE_SAMPLERATE / 2) &&
+			(ConfMan.getInt("dimuse_sample_rate") <= DIMUSE_BASE_SAMPLERATE * 4)) {
+			sampleRate = ConfMan.getInt("dimuse_sample_rate");
+		}
+	}
+
+	_musicEngine = _imuseDigital = new IMuseDigital(this, sampleRate, _mixer, &_resourceAccessMutex);
 
 	if (filesAreCompressed) {
 		GUI::MessageDialog dialog(_(




More information about the Scummvm-git-logs mailing list