diff options
Diffstat (limited to 'misc/tsrc.c')
| -rw-r--r-- | misc/tsrc.c | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/misc/tsrc.c b/misc/tsrc.c deleted file mode 100644 index 6791b51..0000000 --- a/misc/tsrc.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - tsrc.c - David Rowe - Sat Nov 3 2012 - - Unit test for libresample code. - - build: gcc tsrc.c -o tsrc -lm -lsamplerate - - */ - -#include <assert.h> -#include <math.h> -#include <string.h> -#include <stdlib.h> -#include <stdio.h> -#include <samplerate.h> -#include <unistd.h> - -#define N 10000 /* processing buffer size */ - -void display_help(void) { - fprintf(stderr, "\nusage: tsrc inputRawFile OutputRawFile OutSampleRatio [-l] [-c]\n"); - fprintf(stderr, "\nUse - for stdin/stdout\n\n"); - fprintf(stderr, "-l fast linear resampler\n"); - fprintf(stderr, "-c complex (two channel) resampling\n\n"); -} - -int main(int argc, char *argv[]) { - FILE *fin, *fout; - short in_short[N], out_short[N]; - float in[N], out[N]; - SRC_STATE *src; - SRC_DATA data; - int error, nin, nremaining, i; - - if (argc < 3) { - display_help(); - exit(1); - } - - if (strcmp(argv[1], "-") == 0) - fin = stdin; - else - fin = fopen(argv[1], "rb"); - assert(fin != NULL); - - if (strcmp(argv[2], "-") == 0) - fout = stdout; - else - fout = fopen(argv[2], "wb"); - assert(fout != NULL); - - data.data_in = in; - data.data_out = out; - data.end_of_input = 0; - data.src_ratio = atof(argv[3]); - - int channels = 1; - int resampler = SRC_SINC_FASTEST; - int opt; - while ((opt = getopt(argc, argv, "lc")) != -1) { - switch (opt) { - case 'l': resampler = SRC_LINEAR; break; - case 'c': channels = 2; break; - default: - display_help(); - exit(1); - } - } - - data.input_frames = N/channels; - data.output_frames = N/channels; - - src = src_new(resampler, channels, &error); - assert(src != NULL); - - int total_in = 0; - int total_out = 0; - - nin = data.input_frames; - nremaining = 0; - while(fread(&in_short[nremaining*channels], sizeof(short)*channels, nin, fin) == nin) { - src_short_to_float_array(in_short, in, N); - error = src_process(src, &data); - assert(error == 0); - src_float_to_short_array(out, out_short, data.output_frames_gen*channels); - - fwrite(out_short, sizeof(short), data.output_frames_gen*channels, fout); - if (fout == stdout) fflush(stdout); - - nremaining = data.input_frames - data.input_frames_used; - nin = data.input_frames_used; - //fprintf(stderr, "input frames: %d output_frames %d nremaining: %d\n", - // (int)data.input_frames_used, (int)data.output_frames_gen, nremaining); - for(i=0; i<nremaining*channels; i++) - in_short[i] = in_short[i+nin*channels]; - - total_in += data.input_frames_used; - total_out += data.output_frames_gen; - } - - //fprintf(stderr, "total_in: %d total_out: %d\n", total_in, total_out); - - fclose(fout); - fclose(fin); - - return 0; -} |
