131 lines
3.1 KiB
C
131 lines
3.1 KiB
C
/*
|
|
* 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;
|
|
}
|