From 76503860569c5ac3be68f9bf91d5af58aded9735 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 13 Oct 2009 08:27:28 +0000 Subject: [PATCH] Corrected my snd_pcm_writei fix. Apparently ALSA says "frames" but it means samples...you don't split this into groups by number of channels. The adventure continues. --- src/audio/alsa/SDL_alsa_audio.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/audio/alsa/SDL_alsa_audio.c b/src/audio/alsa/SDL_alsa_audio.c index 55990971e..b55b97ec0 100644 --- a/src/audio/alsa/SDL_alsa_audio.c +++ b/src/audio/alsa/SDL_alsa_audio.c @@ -305,17 +305,16 @@ static __inline__ void swizzle_alsa_channels(_THIS) static void ALSA_PlayAudio(_THIS) { int status; - snd_pcm_uframes_t frames_left; + snd_pcm_uframes_t samps_left; const Uint8 *sample_buf = (const Uint8 *) mixbuf; - const int frame_size = ( ((int) this->spec.channels) * - (((int) (this->spec.format & 0xFF)) / 8) ); + const int sample_size = ((int) (this->spec.format & 0xFF)) / 8; swizzle_alsa_channels(this); - frames_left = ((snd_pcm_uframes_t) this->spec.samples) / this->spec.channels; + samps_left = ((snd_pcm_uframes_t) this->spec.samples); - while ( frames_left > 0 ) { - status = SDL_NAME(snd_pcm_writei)(pcm_handle, sample_buf, frames_left); + while ( samps_left > 0 ) { + status = SDL_NAME(snd_pcm_writei)(pcm_handle, sample_buf, samps_left); if ( status < 0 ) { if ( status == -EAGAIN ) { SDL_Delay(1); @@ -337,8 +336,8 @@ static void ALSA_PlayAudio(_THIS) } continue; } - sample_buf += status * frame_size; - frames_left -= status; + sample_buf += status * sample_size; + samps_left -= status; } }