# HG changeset patch # User uau # Date 1196473179 0 # Node ID e816d546c4fed2c1fe4683a96b6522d87b1a16ee # Parent 55783f005bf3ba121b78885590c068ab256c7bf2 ao_null: Make duration of "buffered" audio constant Choose the "buffer size" for the amount of audio the driver accepts so that it corresponds to about 0.2 seconds of playback based on the number of channels, sample size and samplerate. diff -r 55783f005bf3 -r e816d546c4fe libao2/ao_null.c --- a/libao2/ao_null.c Fri Nov 30 23:46:32 2007 +0000 +++ b/libao2/ao_null.c Sat Dec 01 01:39:39 2007 +0000 @@ -50,14 +50,14 @@ // return: 1=success 0=fail static int init(int rate,int channels,int format,int flags){ - ao_data.buffersize= 16384*channels; - ao_data.outburst=512*channels; + int samplesize = (format == AF_FORMAT_U8 || format == AF_FORMAT_S8) ? 1: 2; + ao_data.outburst = 256 * channels * samplesize; + // A "buffer" for about 0.2 seconds of audio + ao_data.buffersize = (int)(rate * 0.2 / 256 + 1) * ao_data.outburst; ao_data.channels=channels; ao_data.samplerate=rate; ao_data.format=format; - ao_data.bps=channels*rate; - if (format != AF_FORMAT_U8 && format != AF_FORMAT_S8) - ao_data.bps*=2; + ao_data.bps=channels*rate*samplesize; buffer=0; gettimeofday(&last_tv, 0);