diff --git a/src/twn_audio.c b/src/twn_audio.c index c39ebc9..7288f5f 100644 --- a/src/twn_audio.c +++ b/src/twn_audio.c @@ -256,6 +256,7 @@ void audio_play(const char *path, request.freq = AUDIO_FREQUENCY; request.format = AUDIO_F32; request.channels = 2; + request.samples = 4096; #ifndef TWN_FEATURE_PUSH_AUDIO request.callback = audio_callback; #endif diff --git a/src/twn_loop.c b/src/twn_loop.c index 12bacaf..0310358 100644 --- a/src/twn_loop.c +++ b/src/twn_loop.c @@ -226,6 +226,9 @@ static void main_loop(void) { /* TODO: make it works when ctx.ticks_per_second != 60 */ #ifdef TWN_FEATURE_PUSH_AUDIO + uint64_t const queued_frames = SDL_GetQueuedAudioSize(ctx.audio_device) / sizeof (float) / 2; + if (queued_frames >= 4096 * 2) + SDL_ClearQueuedAudio(ctx.audio_device); static uint8_t audio_buffer[(AUDIO_FREQUENCY / 60) * sizeof (float) * 2]; if (ctx.audio_initialized) { audio_callback(NULL, audio_buffer, sizeof audio_buffer);