# HG changeset patch # User atmosfear # Date 992343615 0 # Node ID 9d764880d989959c574a4f0553da165dfcb18ffe # Parent 7255ea9a55d5bc6644759a0edc7a2c4ac76246d9 Added raw PCM writer ao driver. diff -r 7255ea9a55d5 -r 9d764880d989 libao2/Makefile --- a/libao2/Makefile Tue Jun 12 09:07:36 2001 +0000 +++ b/libao2/Makefile Tue Jun 12 11:00:15 2001 +0000 @@ -4,7 +4,7 @@ LIBNAME = libao2.a # TODO: moveout ao_sdl.c so it's only used when SDL is detected -SRCS=audio_out.c ao_null.c $(OPTIONAL_SRCS) +SRCS=audio_out.c ao_null.c ao_pcm.c $(OPTIONAL_SRCS) OBJS=$(SRCS:.c=.o) CFLAGS = $(OPTFLAGS) -I. -I.. $(SDL_INC) diff -r 7255ea9a55d5 -r 9d764880d989 libao2/ao_pcm.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libao2/ao_pcm.c Tue Jun 12 11:00:15 2001 +0000 @@ -0,0 +1,97 @@ +#include +#include + +#include "audio_out.h" +#include "audio_out_internal.h" + +static ao_info_t info = +{ + "PCM writer audio output", + "pcm", + "Atmosfear", + "" +}; + +LIBAO_EXTERN(pcm) + +// there are some globals: +// ao_samplerate +// ao_channels +// ao_format +// ao_bps +// ao_outburst +// ao_buffersize + +static FILE *fp = NULL; + +// to set/get/query special features/parameters +static int control(int cmd,int arg){ + return -1; +} + +// open & setup audio device +// return: 1=success 0=fail +static int init(int rate,int channels,int format,int flags){ + + printf("PCM: File: audiodump.pcm Samplerate: %iHz Channels: %s Format %s\n", rate, (channels > 1) ? "Stereo" : "Mono", audio_out_format_name(format)); + printf("PCM: Info - fastest dumping is achieved with -vo null -hardframedrop.\n"); + fp = fopen("audiodump.pcm", "wb"); + + ao_outburst = 4096; + + + if(fp) return 1; + printf("PCM: Failed to open audiodump.pcm for writing!\n"); + return 0; +} + +// close audio device +static void uninit(){ + fclose(fp); +} + +// stop playing and empty buffers (for seeking/pause) +static void reset(){ + +} + +// stop playing, keep buffers (for pause) +static void audio_pause() +{ + // for now, just call reset(); + reset(); +} + +// resume playing, after audio_pause() +static void audio_resume() +{ +} + +// return: how many bytes can be played without blocking +static int get_space(){ + + return ao_outburst; +} + +// plays 'len' bytes of 'data' +// it should round it down to outburst*n +// return: number of bytes played +static int play(void* data,int len,int flags){ + + //printf("PCM: Writing chunk!\n"); + fwrite(data,len,1,fp); + + return len; +} + +// return: how many unplayed bytes are in the buffer +static int get_delay(){ + + return 0; +} + + + + + + diff -r 7255ea9a55d5 -r 9d764880d989 libao2/audio_out.c --- a/libao2/audio_out.c Tue Jun 12 09:07:36 2001 +0000 +++ b/libao2/audio_out.c Tue Jun 12 11:00:15 2001 +0000 @@ -33,6 +33,7 @@ #ifdef USE_SUN_AUDIO extern ao_functions_t audio_out_sun; #endif +extern ao_functions_t audio_out_pcm; ao_functions_t* audio_out_drivers[] = { @@ -55,6 +56,7 @@ #ifdef USE_SUN_AUDIO &audio_out_sun, #endif + &audio_out_pcm, NULL };