[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