Mercurial > hg > dmlib
changeset 783:865f45701390
Fix audio support.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 30 Jul 2013 17:43:02 +0300 |
parents | 2f32e178854a |
children | 35b881454ea2 |
files | dmengine.h dmsimple.c |
diffstat | 2 files changed, 23 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/dmengine.h Tue Jul 30 15:31:12 2013 +0300 +++ b/dmengine.h Tue Jul 30 17:43:02 2013 +0300 @@ -250,9 +250,11 @@ int optResFlags; char *optDataPath, *optPackFilename; + // Audio related SDL_AudioSpec optAfmt; int optAudioSetup; + int audioStatus; DMMutex *audioStreamMutex; Uint8 * audioStreamBuf; size_t audioStreamLen;
--- a/dmsimple.c Tue Jul 30 15:31:12 2013 +0300 +++ b/dmsimple.c Tue Jul 30 17:43:02 2013 +0300 @@ -102,11 +102,26 @@ } +static void enginePauseAudio(int status) +{ + if (status) + engine.audioStatus = SDL_AUDIO_PAUSED; + else + engine.audioStatus = SDL_AUDIO_PLAYING; + + SDL_PauseAudio(status); +} + + static int engineAudioThreadFunc(void *userdata) { do { - engineAudioCallback(userdata, engine.audioSimBuf, engine.audioSimBufSize); + if (engine.audioStatus == SDL_AUDIO_PLAYING) + { + engineAudioCallback(userdata, engine.audioSimBuf, engine.audioSimBufSize); + } + SDL_Delay(engine.audioSimDelay); } while (!engine.audioSimDone); @@ -724,6 +739,7 @@ dmPrint(1, "Trying to init SDL audio with: fmt=%d, chn=%d, freq=%d\n", engine.optAfmt.format, engine.optAfmt.channels, engine.optAfmt.freq); + engine.audioStatus = SDL_AUDIO_STOPPED; engine.optAfmt.callback = engineAudioCallback; engine.audioStreamMutex = dmCreateMutex(); @@ -743,8 +759,9 @@ } engine.audioSimDelay = 1000 / 50; - engine.audioSimBufSize = (engine.optAfmt.freq * sampleSize) / 50; + engine.audioSimBufSize = (engine.optAfmt.freq / 50) * sampleSize; engine.audioSimBuf = dmMalloc(engine.audioSimBufSize); + engine.audioSimDone = FALSE; engine.audioSimThread = SDL_CreateThread(engineAudioThreadFunc, NULL); } @@ -817,7 +834,7 @@ dmPrint(1, "Starting up.\n"); SDL_LockAudio(); - SDL_PauseAudio(0); + enginePauseAudio(0); SDL_UnlockAudio(); engine.startTime = SDL_GetTicks(); @@ -923,7 +940,7 @@ SDL_ShowCursor(SDL_ENABLE); SDL_LockAudio(); - SDL_PauseAudio(1); + enginePauseAudio(1); #ifdef DM_USE_JSS if (engine.optAudioSetup == DM_ASETUP_JSS) {