changeset 25194:e816d546c4fe

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.
author uau
date Sat, 01 Dec 2007 01:39:39 +0000
parents 55783f005bf3
children 1aec672af2d2
files libao2/ao_null.c
diffstat 1 files changed, 5 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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);