From 09b188ac29717b8445df22ee3ee352db12c3c79d Mon Sep 17 00:00:00 2001 From: Clownacy Date: Tue, 3 Sep 2019 00:11:57 +0100 Subject: [PATCH 1/2] Add a bugfix for a bizarre function call --- src/Sound.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Sound.cpp b/src/Sound.cpp index 30da484d..faf7131a 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -41,7 +41,10 @@ BOOL InitDirectSound(HWND hwnd) if (DirectSoundCreate(NULL, &lpDS, NULL) != DS_OK) { lpDS = NULL; +#ifndef FIX_BUGS + // This makes absolutely no sense here StartOrganya(lpDS, "Org\\Wave.dat"); +#endif return FALSE; } From 8f1bc269f071e2e5eb607ecb26133656fc850527 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Tue, 3 Sep 2019 00:34:47 +0100 Subject: [PATCH 2/2] I might have found out why Sound.cpp uses DSBUFFERDESC1 --- src/Organya.cpp | 4 ++-- src/Sound.cpp | 33 +++++++++++++++++---------------- src/Sound.h | 3 +++ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/Organya.cpp b/src/Organya.cpp index 5df4d760..bf67aea8 100644 --- a/src/Organya.cpp +++ b/src/Organya.cpp @@ -177,9 +177,9 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi) else data_size = wave_size; - ZeroMemory(&dsbd, sizeof(DSBUFFERDESC)); + ZeroMemory(&dsbd, sizeof(dsbd)); - dsbd.dwSize = sizeof(DSBUFFERDESC); + dsbd.dwSize = sizeof(dsbd); dsbd.dwBufferBytes = data_size; dsbd.lpwfxFormat = &format_tbl2; dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; diff --git a/src/Sound.cpp b/src/Sound.cpp index faf7131a..787cfe56 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -17,6 +17,7 @@ equivalents. #include #include +#define DIRECTSOUND_VERSION 0x500 #include #include "WindowsWrapper.h" @@ -35,7 +36,7 @@ LPDIRECTSOUNDBUFFER lpSECONDARYBUFFER[SE_MAX]; BOOL InitDirectSound(HWND hwnd) { int i; - DSBUFFERDESC1 dsbd; + DSBUFFERDESC dsbd; // DirectDrawの初期化 (DirectDraw initialization) if (DirectSoundCreate(NULL, &lpDS, NULL) != DS_OK) @@ -51,10 +52,10 @@ BOOL InitDirectSound(HWND hwnd) lpDS->SetCooperativeLevel(hwnd, DSSCL_EXCLUSIVE); // 一次バッファの初期化 (Initializing the primary buffer) - ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); - dsbd.dwSize = sizeof(DSBUFFERDESC1); + ZeroMemory(&dsbd, sizeof(dsbd)); + dsbd.dwSize = sizeof(dsbd); dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME; - lpDS->CreateSoundBuffer((DSBUFFERDESC*)&dsbd, &lpPRIMARYBUFFER, NULL); + lpDS->CreateSoundBuffer(&dsbd, &lpPRIMARYBUFFER, NULL); for (i = 0; i < SE_MAX; i++) lpSECONDARYBUFFER[i] = NULL; @@ -91,7 +92,7 @@ void EndDirectSound(void) BOOL InitSoundObject(LPCSTR resname, int no) { HRSRC hrscr; - DSBUFFERDESC1 dsbd; + DSBUFFERDESC dsbd; DWORD *lpdword; // リソースのアドレス (Resource address) if (lpDS == NULL) @@ -105,13 +106,13 @@ BOOL InitSoundObject(LPCSTR resname, int no) lpdword = (DWORD*)LockResource(LoadResource(NULL, hrscr)); // 二次バッファの生成 (Create secondary buffer) - ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); - dsbd.dwSize = sizeof(DSBUFFERDESC1); + ZeroMemory(&dsbd, sizeof(dsbd)); + dsbd.dwSize = sizeof(dsbd); dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; dsbd.dwBufferBytes = *(DWORD*)((BYTE*)lpdword+0x36); // WAVEデータのサイズ (WAVE data size) dsbd.lpwfxFormat = (LPWAVEFORMATEX)(lpdword+5); - if (lpDS->CreateSoundBuffer((DSBUFFERDESC*)&dsbd, &lpSECONDARYBUFFER[no], NULL) != DS_OK) + if (lpDS->CreateSoundBuffer(&dsbd, &lpSECONDARYBUFFER[no], NULL) != DS_OK) return FALSE; LPVOID lpbuf1, lpbuf2; @@ -178,14 +179,14 @@ BOOL LoadSoundObject(LPCSTR file_name, int no) fclose(fp); // セカンダリバッファの生成 (Create secondary buffer) - DSBUFFERDESC1 dsbd; - ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); - dsbd.dwSize = sizeof(DSBUFFERDESC1); + DSBUFFERDESC dsbd; + ZeroMemory(&dsbd, sizeof(dsbd)); + dsbd.dwSize = sizeof(dsbd); dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; dsbd.dwBufferBytes = *(DWORD*)((BYTE*)wp+0x36); // WAVEデータのサイズ (WAVE data size) dsbd.lpwfxFormat = (LPWAVEFORMATEX)(wp+5); - if (lpDS->CreateSoundBuffer((DSBUFFERDESC*)&dsbd, &lpSECONDARYBUFFER[no], NULL) != DS_OK) + if (lpDS->CreateSoundBuffer(&dsbd, &lpSECONDARYBUFFER[no], NULL) != DS_OK) { #ifdef FIX_BUGS free(wp); // The updated Organya source code includes this fix @@ -293,7 +294,7 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no) int i; int j; - DSBUFFERDESC1 dsbd; + DSBUFFERDESC dsbd; WavHeader wav_header; const PIXTONEPARAMETER *ptp_pointer; int sample_count; @@ -333,13 +334,13 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no) ++ptp_pointer; } - ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); - dsbd.dwSize = sizeof(DSBUFFERDESC1); + ZeroMemory(&dsbd, sizeof(dsbd)); + dsbd.dwSize = sizeof(dsbd); dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; dsbd.dwBufferBytes = sample_count; dsbd.lpwfxFormat = (WAVEFORMATEX*)&wav_header.audio_format; - if (lpDS->CreateSoundBuffer((DSBUFFERDESC*)&dsbd, &lpSECONDARYBUFFER[no], 0) != DS_OK) + if (lpDS->CreateSoundBuffer(&dsbd, &lpSECONDARYBUFFER[no], 0) != DS_OK) return -1; pcm_buffer = mixed_pcm_buffer = NULL; diff --git a/src/Sound.h b/src/Sound.h index 7d396dbb..26e0fa0d 100644 --- a/src/Sound.h +++ b/src/Sound.h @@ -2,6 +2,9 @@ #include +#ifndef DIRECTSOUND_VERSION +#define DIRECTSOUND_VERSION 0x500 +#endif #include #include "WindowsWrapper.h"