Skip to content
Permalink
Browse files

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.
  • Loading branch information
icculus committed Oct 13, 2009
1 parent b19996d commit 76503860569c5ac3be68f9bf91d5af58aded9735
Showing with 7 additions and 8 deletions.
  1. +7 −8 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;
}
}

0 comments on commit 7650386

Please sign in to comment.