From c68662a8c773da009d06ec4a1ae89c99fe5f20ed Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 21 Oct 2004 12:10:55 +0000 Subject: sine sweep generator git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13722 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libaf/af_sweep.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 libaf/af_sweep.c (limited to 'libaf/af_sweep.c') diff --git a/libaf/af_sweep.c b/libaf/af_sweep.c new file mode 100644 index 0000000000..ee2c97ddb3 --- /dev/null +++ b/libaf/af_sweep.c @@ -0,0 +1,95 @@ +// Copyright (c) 2004 Michael Niedermayer +// #inlcude + +#include +#include +#include +#include +#include + +#include "../config.h" +#include "af.h" + +typedef struct af_sweep_s{ + double x; + double delta; +}af_sweept; + + +// Initialization and runtime control +static int control(struct af_instance_s* af, int cmd, void* arg) +{ + af_sweept* s = (af_sweept*)af->setup; + af_data_t *data= (af_data_t*)arg; + + switch(cmd){ + case AF_CONTROL_REINIT: + if(data->format != (AF_FORMAT_SI | AF_FORMAT_NE)) + return AF_ERROR; + + af->data->nch = data->nch; + af->data->format = AF_FORMAT_SI | AF_FORMAT_NE; + af->data->bps = 2; + af->data->rate = data->rate; + + return AF_OK; + case AF_CONTROL_COMMAND_LINE: + sscanf((char*)arg,"%lf", &s->delta); + return AF_OK; +/* case AF_CONTROL_RESAMPLE_RATE | AF_CONTROL_SET: + af->data->rate = *(int*)arg; + return AF_OK;*/ + } + return AF_UNKNOWN; +} + +// Deallocate memory +static void uninit(struct af_instance_s* af) +{ + if(af->data) + free(af->data); + if(af->setup){ + af_sweept *s = af->setup; + free(s); + } +} + +// Filter data through filter +static af_data_t* play(struct af_instance_s* af, af_data_t* data) +{ + af_sweept *s = af->setup; + int i, j; + int16_t *in = (int16_t*)data->audio; + int chans = data->nch; + int in_len = data->len/(2*chans); + + for(i=0; ix*s->x); + s->x += s->delta; + if(2*s->x*s->delta >= 3.141592) s->x=0; + } + + return data; +} + +static int open(af_instance_t* af){ + af->control=control; + af->uninit=uninit; + af->play=play; + af->mul.n=1; + af->mul.d=1; + af->data=calloc(1,sizeof(af_data_t)); + af->setup=calloc(1,sizeof(af_sweept)); + return AF_OK; +} + +af_info_t af_info_sweep = { + "sine sweep", + "sweep", + "Michael Niedermayer", + "", + AF_FLAGS_REENTRANT, + open +}; + -- cgit v1.2.3