--- xmms_sndfile.c.orig Sat Jul 12 07:07:32 2003 +++ xmms_sndfile.c Wed Jan 24 02:18:34 2007 @@ -224,13 +224,15 @@ samples = sf_read_short (sndfile, buffer, BUFFER_SIZE) ; if (samples > 0 && decoding) - { xmms_sndfile_ip.output->write_audio (buffer, samples * sizeof (short)) ; + { + if (samples != BUFFER_SIZE) { + memset((void *)(buffer + samples), 0, (BUFFER_SIZE - samples) * sizeof (short)); + samples = BUFFER_SIZE ; + } + while ((xmms_sndfile_ip.output->buffer_free () < (samples * sizeof (short))) && decoding) + xmms_usleep (10000) ; + xmms_sndfile_ip.output->write_audio (buffer, samples * sizeof (short)) ; xmms_sndfile_ip.add_vis_pcm (xmms_sndfile_ip.output->written_time (), HOST_SIGNED_SHORT, sfinfo.channels, samples * sizeof (short), buffer) ; - - /* Not sure why this is needed, but it can stutter at - ** the start of the first file if this isn't here. - */ - xmms_usleep (100) ; } else xmms_usleep (10000) ;