Merge branch 'accurate' into portable

This commit is contained in:
Clownacy 2019-09-03 14:19:43 +01:00
commit 7ed6731e46
3 changed files with 25 additions and 18 deletions

View file

@ -178,9 +178,9 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
else else
data_size = wave_size; 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.dwBufferBytes = data_size;
dsbd.lpwfxFormat = &format_tbl2; dsbd.lpwfxFormat = &format_tbl2;
dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY;

View file

@ -17,6 +17,7 @@ equivalents.
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define DIRECTSOUND_VERSION 0x500
#include <dsound.h> #include <dsound.h>
#include "WindowsWrapper.h" #include "WindowsWrapper.h"
@ -35,23 +36,26 @@ LPDIRECTSOUNDBUFFER lpSECONDARYBUFFER[SE_MAX];
BOOL InitDirectSound(HWND hwnd) BOOL InitDirectSound(HWND hwnd)
{ {
int i; int i;
DSBUFFERDESC1 dsbd; DSBUFFERDESC dsbd;
// DirectDrawの初期化 (DirectDraw initialization) // DirectDrawの初期化 (DirectDraw initialization)
if (DirectSoundCreate(NULL, &lpDS, NULL) != DS_OK) if (DirectSoundCreate(NULL, &lpDS, NULL) != DS_OK)
{ {
lpDS = NULL; lpDS = NULL;
#ifndef FIX_BUGS
// This makes absolutely no sense here
StartOrganya(lpDS, "Org\\Wave.dat"); StartOrganya(lpDS, "Org\\Wave.dat");
#endif
return FALSE; return FALSE;
} }
lpDS->SetCooperativeLevel(hwnd, DSSCL_EXCLUSIVE); lpDS->SetCooperativeLevel(hwnd, DSSCL_EXCLUSIVE);
// 一次バッファの初期化 (Initializing the primary buffer) // 一次バッファの初期化 (Initializing the primary buffer)
ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); ZeroMemory(&dsbd, sizeof(dsbd));
dsbd.dwSize = sizeof(DSBUFFERDESC1); dsbd.dwSize = sizeof(dsbd);
dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME; 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++) for (i = 0; i < SE_MAX; i++)
lpSECONDARYBUFFER[i] = NULL; lpSECONDARYBUFFER[i] = NULL;
@ -88,7 +92,7 @@ void EndDirectSound(void)
BOOL InitSoundObject(LPCSTR resname, int no) BOOL InitSoundObject(LPCSTR resname, int no)
{ {
HRSRC hrscr; HRSRC hrscr;
DSBUFFERDESC1 dsbd; DSBUFFERDESC dsbd;
DWORD *lpdword; // リソースのアドレス (Resource address) DWORD *lpdword; // リソースのアドレス (Resource address)
if (lpDS == NULL) if (lpDS == NULL)
@ -102,13 +106,13 @@ BOOL InitSoundObject(LPCSTR resname, int no)
lpdword = (DWORD*)LockResource(LoadResource(NULL, hrscr)); lpdword = (DWORD*)LockResource(LoadResource(NULL, hrscr));
// 二次バッファの生成 (Create secondary buffer) // 二次バッファの生成 (Create secondary buffer)
ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); ZeroMemory(&dsbd, sizeof(dsbd));
dsbd.dwSize = sizeof(DSBUFFERDESC1); dsbd.dwSize = sizeof(dsbd);
dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY;
dsbd.dwBufferBytes = *(DWORD*)((BYTE*)lpdword+0x36); // WAVEデータのサイズ (WAVE data size) dsbd.dwBufferBytes = *(DWORD*)((BYTE*)lpdword+0x36); // WAVEデータのサイズ (WAVE data size)
dsbd.lpwfxFormat = (LPWAVEFORMATEX)(lpdword+5); 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; return FALSE;
LPVOID lpbuf1, lpbuf2; LPVOID lpbuf1, lpbuf2;
@ -175,14 +179,14 @@ BOOL LoadSoundObject(LPCSTR file_name, int no)
fclose(fp); fclose(fp);
// セカンダリバッファの生成 (Create secondary buffer) // セカンダリバッファの生成 (Create secondary buffer)
DSBUFFERDESC1 dsbd; DSBUFFERDESC dsbd;
ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); ZeroMemory(&dsbd, sizeof(dsbd));
dsbd.dwSize = sizeof(DSBUFFERDESC1); dsbd.dwSize = sizeof(dsbd);
dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY;
dsbd.dwBufferBytes = *(DWORD*)((BYTE*)wp+0x36); // WAVEデータのサイズ (WAVE data size) dsbd.dwBufferBytes = *(DWORD*)((BYTE*)wp+0x36); // WAVEデータのサイズ (WAVE data size)
dsbd.lpwfxFormat = (LPWAVEFORMATEX)(wp+5); 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 #ifdef FIX_BUGS
free(wp); // The updated Organya source code includes this fix free(wp); // The updated Organya source code includes this fix
@ -290,7 +294,7 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no)
int i; int i;
int j; int j;
DSBUFFERDESC1 dsbd; DSBUFFERDESC dsbd;
WavHeader wav_header; WavHeader wav_header;
const PIXTONEPARAMETER *ptp_pointer; const PIXTONEPARAMETER *ptp_pointer;
int sample_count; int sample_count;
@ -330,13 +334,13 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no)
++ptp_pointer; ++ptp_pointer;
} }
ZeroMemory(&dsbd, sizeof(DSBUFFERDESC1)); ZeroMemory(&dsbd, sizeof(dsbd));
dsbd.dwSize = sizeof(DSBUFFERDESC1); dsbd.dwSize = sizeof(dsbd);
dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY;
dsbd.dwBufferBytes = sample_count; dsbd.dwBufferBytes = sample_count;
dsbd.lpwfxFormat = (WAVEFORMATEX*)&wav_header.audio_format; 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; return -1;
pcm_buffer = mixed_pcm_buffer = NULL; pcm_buffer = mixed_pcm_buffer = NULL;

View file

@ -2,6 +2,9 @@
#include <stddef.h> #include <stddef.h>
#ifndef DIRECTSOUND_VERSION
#define DIRECTSOUND_VERSION 0x500
#endif
#include <dsound.h> #include <dsound.h>
#include "WindowsWrapper.h" #include "WindowsWrapper.h"