Update sound.cpp
parent
c33ca3a6ed
commit
6fa04c45ac
|
@ -63,10 +63,10 @@ void __fastcall snd_update(bool bStopAll)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
v3 = DSBs[v2];
|
v3 = DSBs[v2];
|
||||||
if ( v3 && (v1 || IDirectSoundBuffer_GetStatus(v3, &v4) || v4 != DSBSTATUS_PLAYING) ) // FIX_ME: double check
|
if ( v3 && (v1 || v3->GetStatus(&v4) || v4 != DSBSTATUS_PLAYING) ) // FIX_ME: double check
|
||||||
{
|
{
|
||||||
IDirectSoundBuffer_Stop(DSBs[v2]);
|
DSBs[v2]->Stop();
|
||||||
IDirectSoundBuffer_Release(DSBs[v2]);
|
DSBs[v2]->Release();
|
||||||
DSBs[v2] = 0;
|
DSBs[v2] = 0;
|
||||||
}
|
}
|
||||||
++v2;
|
++v2;
|
||||||
|
@ -83,7 +83,7 @@ void __fastcall snd_stop_snd(TSnd *pSnd)
|
||||||
{
|
{
|
||||||
v1 = pSnd->DSB;
|
v1 = pSnd->DSB;
|
||||||
if ( v1 )
|
if ( v1 )
|
||||||
IDirectSoundBuffer_Stop(v1);
|
v1->Stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ bool __fastcall snd_playing(TSnd *pSnd)
|
||||||
v3 = (unsigned long)pSnd;
|
v3 = (unsigned long)pSnd;
|
||||||
if ( pSnd
|
if ( pSnd
|
||||||
&& (v1 = pSnd->DSB) != 0
|
&& (v1 = pSnd->DSB) != 0
|
||||||
&& !IDirectSoundBuffer_GetStatus(v1, &v3) )
|
&& !v1->GetStatus(&v3) )
|
||||||
{
|
{
|
||||||
result = v3 == DSBSTATUS_PLAYING;
|
result = v3 == DSBSTATUS_PLAYING;
|
||||||
}
|
}
|
||||||
|
@ -145,22 +145,14 @@ void __fastcall snd_play_snd(TSnd *pSnd, int lVolume, int lPan)
|
||||||
{
|
{
|
||||||
v7 = -1600;
|
v7 = -1600;
|
||||||
}
|
}
|
||||||
IDirectSoundBuffer_SetVolume(v5, v7);
|
v5->SetVolume(v7);
|
||||||
IDirectSoundBuffer_SetPan(v5, lPan);
|
v5->SetPan(lPan);
|
||||||
v8 = IDirectSoundBuffer_Play(
|
v8 = v5->Play(0, 0, 0);
|
||||||
v5,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
if ( v8 == DSERR_BUFFERLOST )
|
if ( v8 == DSERR_BUFFERLOST )
|
||||||
{
|
{
|
||||||
//_LOBYTE(v9) = sound_file_reload(v3, v5);
|
//_LOBYTE(v9) = sound_file_reload(v3, v5);
|
||||||
if ( sound_file_reload(v3, v5) )
|
if ( sound_file_reload(v3, v5) )
|
||||||
IDirectSoundBuffer_Play(
|
v5->Play(0, 0, 0);
|
||||||
v5,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
}
|
}
|
||||||
else if ( v8 )
|
else if ( v8 )
|
||||||
{
|
{
|
||||||
|
@ -195,10 +187,7 @@ IDirectSoundBuffer *__fastcall sound_dup_channel(IDirectSoundBuffer *DSB)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
v2 = &DSBs[(_DWORD)result];
|
v2 = &DSBs[(_DWORD)result];
|
||||||
if ( IDirectSound_DuplicateSoundBuffer(
|
if ( sglpDS->DuplicateSoundBuffer(DSB, &DSBs[(_DWORD)result]) )
|
||||||
sglpDS,
|
|
||||||
DSB,
|
|
||||||
&DSBs[(_DWORD)result]) )
|
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -223,24 +212,16 @@ bool __fastcall sound_file_reload(TSnd *sound_file, IDirectSoundBuffer *DSB)
|
||||||
|
|
||||||
v2 = DSB;
|
v2 = DSB;
|
||||||
v3 = sound_file;
|
v3 = sound_file;
|
||||||
if ( IDirectSoundBuffer_Restore(DSB) )
|
if ( DSB->Restore() )
|
||||||
return 0;
|
return 0;
|
||||||
v5 = v3->sound_path;
|
v5 = v3->sound_path;
|
||||||
v8 = 0;
|
v8 = 0;
|
||||||
WOpenFile(v5, &a1, 0);
|
WOpenFile(v5, &a1, 0);
|
||||||
WSetFilePointer(a1, v3->offset, 0, 0);
|
WSetFilePointer(a1, v3->offset, 0, 0);
|
||||||
if ( !IDirectSoundBuffer_Lock(
|
if ( !v2->Lock(0, v3->len, &aptr1, &asize1, &aptr2, &asize2, 0) )
|
||||||
v2,
|
|
||||||
0,
|
|
||||||
v3->len,
|
|
||||||
&aptr1,
|
|
||||||
&asize1,
|
|
||||||
&aptr2,
|
|
||||||
&asize2,
|
|
||||||
0) )
|
|
||||||
{
|
{
|
||||||
WReadFile(a1, (char *)aptr1, asize1);
|
WReadFile(a1, (char *)aptr1, asize1);
|
||||||
if ( !IDirectSoundBuffer_Unlock(v2, aptr1, asize1, aptr2, asize2) )
|
if ( !v2->Unlock(aptr1, asize1, aptr2, asize2) )
|
||||||
v8 = 1;
|
v8 = 1;
|
||||||
}
|
}
|
||||||
WCloseFile(a1);
|
WCloseFile(a1);
|
||||||
|
@ -276,20 +257,11 @@ TSnd *__fastcall sound_file_load(char *path)
|
||||||
if ( !ptr )
|
if ( !ptr )
|
||||||
TermMsg("Invalid sound format on file %s", v4->sound_path);
|
TermMsg("Invalid sound format on file %s", v4->sound_path);
|
||||||
sound_CreateSoundBuffer(v4);
|
sound_CreateSoundBuffer(v4);
|
||||||
v5 = IDirectSoundBuffer_Lock(
|
v5 = v4->DSB->Lock(0, v4->len, &aptr1, &asize1, &aptr2, &asize2, 0); //v7);
|
||||||
v4->DSB,
|
|
||||||
0,
|
|
||||||
v4->len,
|
|
||||||
&aptr1,
|
|
||||||
&asize1,
|
|
||||||
&aptr2,
|
|
||||||
&asize2,
|
|
||||||
0);
|
|
||||||
//v7);
|
|
||||||
if ( v5 )
|
if ( v5 )
|
||||||
DSErrDlg(v5, 318, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
DSErrDlg(v5, 318, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
||||||
memcpy(aptr1, (char *)ptr + v4->offset, asize1);
|
memcpy(aptr1, (char *)ptr + v4->offset, asize1);
|
||||||
v6 = IDirectSoundBuffer_Unlock(v4->DSB, aptr1, asize1, aptr2, asize2);
|
v6 = v4->DSB->Unlock(aptr1, asize1, aptr2, asize2);
|
||||||
if ( v6 )
|
if ( v6 )
|
||||||
DSErrDlg(v6, 325, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
DSErrDlg(v6, 325, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
||||||
mem_free_dbg(ptr);
|
mem_free_dbg(ptr);
|
||||||
|
@ -311,11 +283,7 @@ void __fastcall sound_CreateSoundBuffer(TSnd *sound_file)
|
||||||
v3.lpwfxFormat = &v1->fmt;
|
v3.lpwfxFormat = &v1->fmt;
|
||||||
v3.dwSize = 20;
|
v3.dwSize = 20;
|
||||||
v3.dwFlags = DSBCAPS_CTRLVOLUME|DSBCAPS_CTRLPAN|DSBCAPS_STATIC;
|
v3.dwFlags = DSBCAPS_CTRLVOLUME|DSBCAPS_CTRLPAN|DSBCAPS_STATIC;
|
||||||
v2 = IDirectSound_CreateSoundBuffer(
|
v2 = sglpDS->CreateSoundBuffer(&v3, &v1->DSB, NULL);
|
||||||
sglpDS,
|
|
||||||
&v3,
|
|
||||||
&v1->DSB,
|
|
||||||
NULL);
|
|
||||||
if ( v2 )
|
if ( v2 )
|
||||||
DSErrDlg(v2, 282, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
DSErrDlg(v2, 282, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
||||||
}
|
}
|
||||||
|
@ -332,8 +300,8 @@ void __fastcall sound_file_cleanup(TSnd *sound_file)
|
||||||
v2 = sound_file->DSB;
|
v2 = sound_file->DSB;
|
||||||
if ( v2 )
|
if ( v2 )
|
||||||
{
|
{
|
||||||
IDirectSoundBuffer_Stop(sound_file->DSB);
|
sound_file->DSB->Stop();
|
||||||
IDirectSoundBuffer_Release(v1->DSB);
|
v1->DSB->Release();
|
||||||
v1->DSB = 0;
|
v1->DSB = 0;
|
||||||
}
|
}
|
||||||
mem_free_dbg(v1);
|
mem_free_dbg(v1);
|
||||||
|
@ -349,7 +317,7 @@ void __fastcall snd_init(HWND hWnd)
|
||||||
gbMusicOn = sglMusicVolume > -1600;
|
gbMusicOn = sglMusicVolume > -1600;
|
||||||
if ( sound_DirectSoundCreate(NULL, &sglpDS, NULL) )
|
if ( sound_DirectSoundCreate(NULL, &sglpDS, NULL) )
|
||||||
sglpDS = 0;
|
sglpDS = 0;
|
||||||
if ( sglpDS && !IDirectSound_SetCooperativeLevel(sglpDS, hWnd, DSSCL_EXCLUSIVE) )
|
if ( sglpDS && !sglpDS->SetCooperativeLevel(hWnd, DSSCL_EXCLUSIVE) )
|
||||||
sound_create_primary_buffer(0);
|
sound_create_primary_buffer(0);
|
||||||
SVidInitialize(sglpDS);
|
SVidInitialize(sglpDS);
|
||||||
SFileDdaInitialize(sglpDS);
|
SFileDdaInitialize(sglpDS);
|
||||||
|
@ -402,18 +370,14 @@ void __fastcall sound_create_primary_buffer(int music_track)
|
||||||
memset(&v4, 0, 0x14u);
|
memset(&v4, 0, 0x14u);
|
||||||
v4.dwSize = 20;
|
v4.dwSize = 20;
|
||||||
v4.dwFlags = DSBCAPS_PRIMARYBUFFER;
|
v4.dwFlags = DSBCAPS_PRIMARYBUFFER;
|
||||||
v1 = IDirectSound_CreateSoundBuffer(
|
v1 = sglpDS->CreateSoundBuffer(&v4, &sglpDSB, NULL);
|
||||||
sglpDS,
|
|
||||||
&v4,
|
|
||||||
&sglpDSB,
|
|
||||||
NULL);
|
|
||||||
if ( v1 )
|
if ( v1 )
|
||||||
DSErrDlg(v1, 375, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
DSErrDlg(v1, 375, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
||||||
}
|
}
|
||||||
if ( sglpDSB )
|
if ( sglpDSB )
|
||||||
{
|
{
|
||||||
v3.dwSize = 96;
|
v3.dwSize = 96;
|
||||||
v2 = IDirectSound_GetCaps(sglpDS, &v3);
|
v2 = sglpDS->GetCaps(&v3);
|
||||||
if ( v2 )
|
if ( v2 )
|
||||||
DSErrDlg(v2, 383, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
DSErrDlg(v2, 383, "C:\\Src\\Diablo\\Source\\SOUND.CPP");
|
||||||
if ( !a1 || !LoadWaveFormat((HANDLE)a1, &a2) )
|
if ( !a1 || !LoadWaveFormat((HANDLE)a1, &a2) )
|
||||||
|
@ -427,7 +391,7 @@ void __fastcall sound_create_primary_buffer(int music_track)
|
||||||
a2.nChannels = 2;
|
a2.nChannels = 2;
|
||||||
a2.nBlockAlign = 2 * a2.wBitsPerSample / 8; // a2.nChannels * x / 8 (BUG_FIX: per MSDN)
|
a2.nBlockAlign = 2 * a2.wBitsPerSample / 8; // a2.nChannels * x / 8 (BUG_FIX: per MSDN)
|
||||||
a2.nAvgBytesPerSec = a2.nSamplesPerSec * a2.nBlockAlign;
|
a2.nAvgBytesPerSec = a2.nSamplesPerSec * a2.nBlockAlign;
|
||||||
IDirectSoundBuffer_SetFormat(sglpDSB, &a2);
|
sglpDSB->SetFormat(&a2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 69F100: using guessed type int sglpDSB;
|
// 69F100: using guessed type int sglpDSB;
|
||||||
|
@ -469,7 +433,7 @@ void __cdecl sound_cleanup()
|
||||||
SFileDdaDestroy();
|
SFileDdaDestroy();
|
||||||
if ( sglpDS )
|
if ( sglpDS )
|
||||||
{
|
{
|
||||||
IDirectSound_Release(sglpDS);
|
sglpDS->Release();
|
||||||
sglpDS = 0;
|
sglpDS = 0;
|
||||||
}
|
}
|
||||||
if ( gbSndInited )
|
if ( gbSndInited )
|
||||||
|
|
Loading…
Reference in New Issue