Skip to content
Snippets Groups Projects
Commit 44a79bf3 authored by deuce's avatar deuce
Browse files

Revert back to rev 1.33 for simplicity since SDL audio will be preferred going forward.

parent e1da6410
Branches
Tags
No related merge requests found
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment