/* * iaxclient_lib: An Inter-Asterisk eXchange communication library * * Module: audio_file * Purpose: Audio code to read/write to files * based on audio_portaudio, originally Developed by: Shawn Lawrence, Terrace Communications Inc. * Developed by: Steve Kann * Creation Date: October 30, 2003 * * This program is free software, distributed under the terms of * the GNU Lesser (Library) General Public License * * IAX library Copyright (c) 2001 Linux Support Services * IAXlib is free software, distributed under the terms of * the GNU Lesser (Library) General Public License * * This library uses the PortAudio Portable Audio Library * For more information see: http://www.portaudio.com * PortAudio Copyright (c) 1999-2000 Ross Bencina and Phil Burk * */ #include "iaxclient_lib.h" typedef short SAMPLE; static FILE *inFile=NULL, *outFile=NULL; #define FRAMES_PER_BUFFER 80 /* 80 frames == 10ms */ static int file_play_sound(struct iaxc_sound *inSound, int ring) { return 0; } static int file_stop_sound(int soundID) { return 0; } static int file_start (struct iaxc_audio_driver *d ) { return 0; } static int file_stop (struct iaxc_audio_driver *d ) { return 0; } /* not used static void file_shutdown_audio() { return; } */ static int file_input(struct iaxc_audio_driver *d, void *samples, int *nSamples) { *nSamples = 0; return 0; } static int file_output(struct iaxc_audio_driver *d, void *samples, int nSamples) { if(outFile) { fwrite(samples, sizeof(SAMPLE), nSamples, outFile); } return 0; } static int file_select_devices (struct iaxc_audio_driver *d, int input, int output, int ring) { return 0; } static int file_selected_devices (struct iaxc_audio_driver *d, int *input, int *output, int *ring) { *input = 0; *output = 0; *ring = 0; return 0; } static int file_destroy (struct iaxc_audio_driver *d ) { /* TODO: something should happen here */ return 0; } static float file_input_level_get(struct iaxc_audio_driver *d){ return -1; } static float file_output_level_get(struct iaxc_audio_driver *d){ return -1; } static int file_input_level_set(struct iaxc_audio_driver *d, float level){ return -1; } static int file_output_level_set(struct iaxc_audio_driver *d, float level){ return -1; } EXPORT int iaxc_set_files(FILE *input, FILE *output) { inFile = input; outFile = output; return 0; } /* initialize audio driver */ int file_initialize (struct iaxc_audio_driver *d , int sample_rate) { if(sample_rate != 8000 ) return -1; /* setup methods */ d->initialize = file_initialize; d->destroy = file_destroy; d->select_devices = file_select_devices; d->selected_devices = file_selected_devices; d->start = file_start; d->stop = file_stop; d->output = file_output; d->input = file_input; d->input_level_get = file_input_level_get; d->input_level_set = file_input_level_set; d->output_level_get = file_output_level_get; d->output_level_set = file_output_level_set; d->play_sound = file_play_sound; d->stop_sound = file_stop_sound; return 0; }