aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2003-08-31 10:45:14 +0000
committerTorbjörn Andersson2003-08-31 10:45:14 +0000
commit3b62d9b4da96e4860ff596b0f11b18cc5ee0ff67 (patch)
treeb31f8e0c1032fee06a31dff36b06c2f4791e64bb
parent155f4591c97704b6d235e8eb397166b3d432cd65 (diff)
downloadscummvm-rg350-3b62d9b4da96e4860ff596b0f11b18cc5ee0ff67.tar.gz
scummvm-rg350-3b62d9b4da96e4860ff596b0f11b18cc5ee0ff67.tar.bz2
scummvm-rg350-3b62d9b4da96e4860ff596b0f11b18cc5ee0ff67.zip
No longer assume that all sound effects are 22 kHz. Some are 11 kHz.
svn-id: r9939
-rw-r--r--sword2/driver/d_sound.cpp11
-rw-r--r--sword2/driver/d_sound.h1
2 files changed, 8 insertions, 4 deletions
diff --git a/sword2/driver/d_sound.cpp b/sword2/driver/d_sound.cpp
index 1b0bb65090..25a7bc2465 100644
--- a/sword2/driver/d_sound.cpp
+++ b/sword2/driver/d_sound.cpp
@@ -328,6 +328,7 @@ int32 Sword2Sound::InitialiseSound(uint16 freq, uint16 channels, uint16 bitDepth
memset(fxCached, 0, sizeof(fxCached));
memset(fxiPaused, 0, sizeof(fxiPaused));
memset(fxLooped, 0, sizeof(fxLooped));
+ memset(fxRate, 0, sizeof(fxRate));
memset(musStreaming, 0, sizeof(musStreaming));
memset(musicPaused, 0, sizeof(musicPaused));
@@ -686,6 +687,8 @@ int32 Sword2Sound::OpenFx(int32 id, uint8 *data) {
if (wav->channels == 2)
flagsFx[fxi] |= SoundMixer::FLAG_STEREO;
+ fxRate[fxi] = wav->samplesPerSec;
+
//Until the mixer supports LE samples natively, we need to convert our LE ones to BE
for (int32 j = 0; j < (bufferSizeFx[fxi] / 2); j++)
bufferFx[fxi][j] = TO_BE_16(bufferFx[fxi][j]);
@@ -831,7 +834,7 @@ int32 Sword2Sound::PlayFx(int32 id, uint8 *data, uint8 vol, int8 pan, uint8 type
// IDirectSoundBuffer_SetVolume(dsbFx[i], musicVolTable[volMusic[0]]);
}
// IDirectSoundBuffer_SetPan(dsbFx[i], 0);
- g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], 22050, flagsFx[i]);
+ g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], fxRate[i], flagsFx[i]);
fxCached[i] = RDSE_FXTOCLEAR;
} else {
@@ -855,7 +858,7 @@ int32 Sword2Sound::PlayFx(int32 id, uint8 *data, uint8 vol, int8 pan, uint8 type
}
// IDirectSoundBuffer_SetPan(dsbFx[i], panTable[pan+16]);
- g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], 22050, flagsFx[i]);
+ g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], fxRate[i], flagsFx[i]);
if (id == (int32) 0xffffffff) {
fxCached[i] = RDSE_FXTOCLEAR;
}
@@ -878,7 +881,7 @@ int32 Sword2Sound::PlayFx(int32 id, uint8 *data, uint8 vol, int8 pan, uint8 type
// IDirectSoundBuffer_SetVolume(dsbFx[i], musicVolTable[volMusic[0]]);
}
// IDirectSoundBuffer_SetPan(dsbFx[i], 0);
- g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], 22050, flagsFx[i]);
+ g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], fxRate[i], flagsFx[i]);
} else {
hr = OpenFx(id, data);
if (hr != RD_OK) {
@@ -904,7 +907,7 @@ int32 Sword2Sound::PlayFx(int32 id, uint8 *data, uint8 vol, int8 pan, uint8 type
// IDirectSoundBuffer_SetVolume(dsbFx[i], volTable[vol*fxVol]);
}
// IDirectSoundBuffer_SetPan(dsbFx[i], panTable[pan+16]);
- g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], 22050, flagsFx[i]);
+ g_engine->_mixer->playRaw(&soundHandleFx[i], bufferFx[i], bufferSizeFx[i], fxRate[i], flagsFx[i]);
}
}
}
diff --git a/sword2/driver/d_sound.h b/sword2/driver/d_sound.h
index 7fb4af60fa..d0b61eee0e 100644
--- a/sword2/driver/d_sound.h
+++ b/sword2/driver/d_sound.h
@@ -98,6 +98,7 @@ class Sword2Sound {
uint8 fxiPaused[MAXFX];
uint8 fxLooped[MAXFX];
uint8 fxVolume[MAXFX];
+ uint16 fxRate[MAXFX];
uint32 flagsFx[MAXFX];
uint16 *bufferFx[MAXFX];
int32 bufferSizeFx[MAXFX];