From add4e69374f90afc09f7a5e1389b8a372a119713 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Tue, 13 Aug 2019 20:45:50 +0100 Subject: [PATCH] Made Sound.cpp more accurate --- msvc2003/devilution/comparer-config.toml | 15 +++++++++++++++ src/Sound.cpp | 23 ++++++++++++----------- src/Sound.h | 4 ++-- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/msvc2003/devilution/comparer-config.toml b/msvc2003/devilution/comparer-config.toml index 21fc54fc..fca6656a 100644 --- a/msvc2003/devilution/comparer-config.toml +++ b/msvc2003/devilution/comparer-config.toml @@ -1066,6 +1066,21 @@ addr = 0x41FE70 name = "PlaySoundObject" addr = 0x420640 +[[func]] +name = "ChangeSoundFrequency" +addr = 0x420720 +size = 0x34 + +[[func]] +name = "ChangeSoundVolume" +addr = 0x420760 +size = 0x35 + +[[func]] +name = "ChangeSoundPan" +addr = 0x4207A0 +size = 0x36 + [[func]] name = "TransferStage" addr = 0x420BE0 diff --git a/src/Sound.cpp b/src/Sound.cpp index 225c211c..20120718 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -221,7 +221,7 @@ void AudioCallback(void *userdata, Uint8 *stream, int len) } //Sound things -SOUNDBUFFER* lpSECONDARYBUFFER[SOUND_NO]; +SOUNDBUFFER* lpSECONDARYBUFFER[SE_MAX]; BOOL InitDirectSound() { @@ -250,6 +250,9 @@ BOOL InitDirectSound() //Unpause audio device SDL_PauseAudioDevice(audioDevice, 0); + for (unsigned int i = 0; i < SE_MAX; ++i) + lpSECONDARYBUFFER[i] = NULL; + //Start organya StartOrganya(); return TRUE; @@ -257,14 +260,15 @@ BOOL InitDirectSound() void EndDirectSound() { - //Quit sub-system + EndOrganya(); + + for (unsigned int i = 0; i < SE_MAX; ++i) + lpSECONDARYBUFFER[i]->Release(); + SDL_QuitSubSystem(SDL_INIT_AUDIO); - //Close audio device SDL_CloseAudioDevice(audioDevice); - //End organya - EndOrganya(); } //Sound effects playing @@ -293,20 +297,17 @@ void PlaySoundObject(int no, int mode) void ChangeSoundFrequency(int no, unsigned long rate) { - if (lpSECONDARYBUFFER[no]) - lpSECONDARYBUFFER[no]->SetFrequency(10 * rate + 100); + lpSECONDARYBUFFER[no]->SetFrequency((rate * 10) + 100); } void ChangeSoundVolume(int no, long volume) { - if (lpSECONDARYBUFFER[no]) - lpSECONDARYBUFFER[no]->SetVolume(8 * volume - 2400); + lpSECONDARYBUFFER[no]->SetVolume((volume - 300) * 8); } void ChangeSoundPan(int no, long pan) { - if (lpSECONDARYBUFFER[no]) - lpSECONDARYBUFFER[no]->SetPan(10 * (pan - 256)); + lpSECONDARYBUFFER[no]->SetPan((pan - 256) * 10); } int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no) diff --git a/src/Sound.h b/src/Sound.h index 8803644c..57c6af05 100644 --- a/src/Sound.h +++ b/src/Sound.h @@ -90,8 +90,8 @@ enum MUSIC_IDS mus_White = 0x29 }; -#define SOUND_NO 0x100 -extern SOUNDBUFFER* lpSECONDARYBUFFER[SOUND_NO]; +#define SE_MAX 160 // According to the Organya source code release, this is the real name for this constant +extern SOUNDBUFFER* lpSECONDARYBUFFER[SE_MAX]; BOOL InitDirectSound(); void EndDirectSound();