From 44a79bf35c303db1c50dee090d3d7b4e40b9ce81 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Sun, 28 May 2006 22:12:24 +0000 Subject: [PATCH] Revert back to rev 1.33 for simplicity since SDL audio will be preferred going forward. --- src/xpdev/xpbeep.c | 89 ++++++++-------------------------------------- 1 file changed, 15 insertions(+), 74 deletions(-) diff --git a/src/xpdev/xpbeep.c b/src/xpdev/xpbeep.c index df7cf1f542..0a39519c21 100644 --- a/src/xpdev/xpbeep.c +++ b/src/xpdev/xpbeep.c @@ -62,12 +62,8 @@ static int handle_type=SOUND_DEVICE_CLOSED; #ifdef _WIN32 static HWAVEOUT waveOut; -static WAVEHDR *wh; -static WAVEHDR wh_bufs[2]; -static WAVEHDR silence; -static unsigned char silence_data=128; -static unsigned char wave[2][S_RATE*15/2+1]; -static int curr_wh=0; +static WAVEHDR wh; +static unsigned char wave[S_RATE*15/2+1]; #endif #ifdef USE_ALSA_SOUND @@ -228,49 +224,10 @@ BOOL xptone_open(void) sound_device_open_failed=TRUE; if(sound_device_open_failed) return(FALSE); - memset(&wh_bufs, 0, sizeof(wh_bufs)); - memset(wave, 128, sizeof(wave)); /* Ensure that if silence DOES timeout, you still get silence */ - wh_bufs[0].lpData=wave[0]; - wh_bufs[0].dwBufferLength=S_RATE*15/2+1; - if(waveOutPrepareHeader(waveOut, &wh_bufs[0], sizeof(wh_bufs[0]))!=MMSYSERR_NOERROR) { - sound_device_open_failed=TRUE; - waveOutClose(waveOut); - return(FALSE); - } - wh_bufs[1].lpData=wave[1]; - wh_bufs[1].dwBufferLength=S_RATE*15/2+1; - if(waveOutPrepareHeader(waveOut, &wh_bufs[1], sizeof(wh_bufs[1]))!=MMSYSERR_NOERROR) { - waveOutUnprepareHeader(waveOut, &wh_bufs[0], sizeof(wh_bufs[0])); - sound_device_open_failed=TRUE; - waveOutClose(waveOut); - return(FALSE); - } - memset(&silence, 0, sizeof(silence)); - silence.lpData=&silence_data; - silence.dwBufferLength=1; - silence.dwFlags=WHDR_BEGINLOOP|WHDR_ENDLOOP; - silence.dwLoops=0xffffffffUL; /* Good for 54 hours of silence @ 22010 */ - if(waveOutPrepareHeader(waveOut, &silence, sizeof(silence))!=MMSYSERR_NOERROR) { - waveOutUnprepareHeader(waveOut, &wh_bufs[0], sizeof(wh_bufs[0])); - waveOutUnprepareHeader(waveOut, &wh_bufs[1], sizeof(wh_bufs[1])); - sound_device_open_failed=TRUE; - waveOutClose(waveOut); - return(FALSE); - } - if(waveOutWrite(waveOut, &silence, sizeof(silence))!=MMSYSERR_NOERROR) { - waveOutUnprepareHeader(waveOut, &wh_bufs[0], sizeof(wh_bufs[0])); - waveOutUnprepareHeader(waveOut, &wh_bufs[1], sizeof(wh_bufs[1])); - waveOutUnprepareHeader(waveOut, &silence, sizeof(wh)); - sound_device_open_failed=TRUE; - waveOutClose(waveOut); - return(FALSE); - } - wh=&wh_bufs[0]; - curr_wh=0; - if(waveOutWrite(waveOut, wh, sizeof(wh_bufs[0]))!=MMSYSERR_NOERROR) { - waveOutUnprepareHeader(waveOut, &wh_bufs[0], sizeof(wh_bufs[0])); - waveOutUnprepareHeader(waveOut, &wh_bufs[1], sizeof(wh_bufs[1])); - waveOutUnprepareHeader(waveOut, &silence, sizeof(wh)); + memset(&wh, 0, sizeof(wh)); + wh.lpData=wave; + wh.dwBufferLength=S_RATE*15/2+1; + if(waveOutPrepareHeader(waveOut, &wh, sizeof(wh))!=MMSYSERR_NOERROR) { sound_device_open_failed=TRUE; waveOutClose(waveOut); return(FALSE); @@ -363,14 +320,9 @@ BOOL xptone_close(void) { #ifdef _WIN32 if(handle_type==SOUND_DEVICE_WIN32) { - waveOutBreakLoop(waveOut); - while(waveOutUnprepareHeader(waveOut, &wh_bufs[0], sizeof(wh_bufs[0]))==WAVERR_STILLPLAYING) - SLEEP(1); - while(waveOutUnprepareHeader(waveOut, &wh_bufs[1], sizeof(wh_bufs[1]))==WAVERR_STILLPLAYING) - SLEEP(1); - while(waveOutUnprepareHeader(waveOut, &silence, sizeof(silence))==WAVERR_STILLPLAYING) - SLEEP(1); waveOutClose(waveOut); + while(waveOutUnprepareHeader(waveOut, &wh, sizeof(wh))==WAVERR_STILLPLAYING) + SLEEP(1); } #endif @@ -400,33 +352,22 @@ BOOL xptone(double freq, DWORD duration, enum WAVE_SHAPE shape) { BOOL success=FALSE; BOOL must_close=FALSE; - WAVEHDR *this_wh; if(handle_type==SOUND_DEVICE_CLOSED) { must_close=TRUE; xptone_open(); } - this_wh=wh; - wh->dwBufferLength=S_RATE*duration/1000; - if(wh->dwBufferLength<=S_RATE/freq*2) - wh->dwBufferLength=S_RATE/freq*2; - - makewave(freq,wave[curr_wh],wh->dwBufferLength,shape); - - waveOutBreakLoop(waveOut); - success=TRUE; + wh.dwBufferLength=S_RATE*duration/1000; + if(wh.dwBufferLength<=S_RATE/freq*2) + wh.dwBufferLength=S_RATE/freq*2; - /* Put the silence back in */ - waveOutWrite(waveOut, &silence, sizeof(silence)); + makewave(freq,wave,wh.dwBufferLength,shape); - /* Prepare for next note */ - curr_wh=1-curr_wh; - memset(wave[curr_wh], 128, sizeof(wave[0])); /* Ensure that if silence DOES timeout, you still get silence */ - wh=&wh_bufs[curr_wh]; - waveOutWrite(waveOut, wh, sizeof(wh_bufs[0])); + if(waveOutWrite(waveOut, &wh, sizeof(wh))==MMSYSERR_NOERROR) + success=TRUE; - while(!(this_wh->dwFlags & WHDR_DONE)) + while(!(wh.dwFlags & WHDR_DONE)) SLEEP(1); if(must_close) -- GitLab