Skip to content

Commit

Permalink
Corrected my snd_pcm_writei fix.
Browse files Browse the repository at this point in the history
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 7650386
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/audio/alsa/SDL_alsa_audio.c
Expand Up @@ -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);
Expand All @@ -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;
}
}

Expand Down

0 comments on commit 7650386

Please sign in to comment.