Skip to content
Snippets Groups Projects
Commit 67dba346 authored by deuce's avatar deuce
Browse files

Include GetAudioStatus in sdl struct.

Don't pause/unpause output... just keep playing silence the whole time.
Fixes problem with click/pops on cut-off audio buffers.
Lower buffer size for lower latency.
parent 3ef92e03
No related branches found
No related tags found
No related merge requests found
...@@ -58,6 +58,7 @@ int load_sdl_funcs(struct sdlfuncs *sdlf) ...@@ -58,6 +58,7 @@ int load_sdl_funcs(struct sdlfuncs *sdlf)
sdlf->PauseAudio=SDL_PauseAudio; sdlf->PauseAudio=SDL_PauseAudio;
sdlf->LockAudio=SDL_LockAudio; sdlf->LockAudio=SDL_LockAudio;
sdlf->UnlockAudio=SDL_UnlockAudio; sdlf->UnlockAudio=SDL_UnlockAudio;
sdlf->GetAudioStatus=SDL_GetAudioStatus;
sdlf->gotfuncs=1; sdlf->gotfuncs=1;
sdl_funcs_loaded=1; sdl_funcs_loaded=1;
return(0); return(0);
...@@ -221,6 +222,10 @@ int load_sdl_funcs(struct sdlfuncs *sdlf) ...@@ -221,6 +222,10 @@ int load_sdl_funcs(struct sdlfuncs *sdlf)
FreeLibrary(sdl_dll); FreeLibrary(sdl_dll);
return(-1); return(-1);
} }
if((sdlf->GetAudioStatus=GetProcAddress(sdl_dll, "SDL_GetAudioStatus"))==NULL) {
FreeLibrary(sdl_dll);
return(-1);
}
sdlf->gotfuncs=1; sdlf->gotfuncs=1;
sdl_funcs_loaded=1; sdl_funcs_loaded=1;
return(0); return(0);
...@@ -378,6 +383,10 @@ int load_sdl_funcs(struct sdlfuncs *sdlf) ...@@ -378,6 +383,10 @@ int load_sdl_funcs(struct sdlfuncs *sdlf)
dlclose(sdl_dll); dlclose(sdl_dll);
return(-1); return(-1);
} }
if((sdlf->GetAudioStatus=dlsym(sdl_dll, "SDL_GetAudioStatus"))==NULL) {
dlclose(sdl_dll);
return(-1);
}
sdlf->gotfuncs=1; sdlf->gotfuncs=1;
sdl_funcs_loaded=1; sdl_funcs_loaded=1;
return(0); return(0);
......
...@@ -45,6 +45,7 @@ struct sdlfuncs { ...@@ -45,6 +45,7 @@ struct sdlfuncs {
void (*LockAudio)(void); void (*LockAudio)(void);
void (*UnlockAudio)(void); void (*UnlockAudio)(void);
void (*PauseAudio)(int pause_on); void (*PauseAudio)(int pause_on);
void (*GetAudioStatus)(int pause_on);
int gotfuncs; int gotfuncs;
}; };
......
...@@ -240,8 +240,8 @@ BOOL xptone_open(void) ...@@ -240,8 +240,8 @@ BOOL xptone_open(void)
spec.freq=22050; spec.freq=22050;
spec.format=AUDIO_U8; spec.format=AUDIO_U8;
spec.channels=1; spec.channels=1;
spec.samples=512; /* Size of audio buffer */ spec.samples=256; /* Size of audio buffer */
spec.size=512; spec.size=256;
spec.callback=sdl_fillbuf; spec.callback=sdl_fillbuf;
spec.userdata=NULL; spec.userdata=NULL;
if(sdl.OpenAudio(&spec, NULL)==-1) { if(sdl.OpenAudio(&spec, NULL)==-1) {
...@@ -249,6 +249,9 @@ BOOL xptone_open(void) ...@@ -249,6 +249,9 @@ BOOL xptone_open(void)
} }
else { else {
sdlToneDone=sdl.SDL_CreateSemaphore(0); sdlToneDone=sdl.SDL_CreateSemaphore(0);
sdl_audio_buf_len=0;
sdl_audio_buf_pos=0;
sdl.PauseAudio(FALSE);
handle_type=SOUND_DEVICE_SDL; handle_type=SOUND_DEVICE_SDL;
return(TRUE); return(TRUE);
} }
...@@ -434,9 +437,7 @@ BOOL DLLCALL xptone(double freq, DWORD duration, enum WAVE_SHAPE shape) ...@@ -434,9 +437,7 @@ BOOL DLLCALL xptone(double freq, DWORD duration, enum WAVE_SHAPE shape)
sdl_audio_buf_len=S_RATE/freq*2; sdl_audio_buf_len=S_RATE/freq*2;
makewave(freq,swave,sdl_audio_buf_len,shape); makewave(freq,swave,sdl_audio_buf_len,shape);
sdl.UnlockAudio(); sdl.UnlockAudio();
sdl.PauseAudio(FALSE);
sdl.SemWait(sdlToneDone); sdl.SemWait(sdlToneDone);
sdl.PauseAudio(TRUE);
} }
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment