kopia lustrzana https://github.com/projecthorus/radiosonde_auto_rx
81 wiersze
1.7 KiB
C
81 wiersze
1.7 KiB
C
/*
|
|
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 <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_DATA data;
|
|
int error, nin, nremaining, i, output_rate, symbol_rate, samples_per_symbol;
|
|
|
|
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);
|
|
|
|
output_rate = atof(argv[3]);
|
|
symbol_rate = atof(argv[4]);
|
|
samples_per_symbol = output_rate / symbol_rate;
|
|
|
|
char in_char;
|
|
|
|
while(fread(&in_char, 1, 1, fin) == 1) {
|
|
|
|
if(in_char == 0){
|
|
for (i=0; i<samples_per_symbol; i++){
|
|
fprintf('\0')
|
|
}
|
|
}
|
|
|
|
fwrite(out_short, sizeof(short), data.output_frames_gen*channels, fout);
|
|
if (fout == stdout) fflush(stdout);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
//fprintf(stderr, "total_in: %d total_out: %d\n", total_in, total_out);
|
|
|
|
fclose(fout);
|
|
fclose(fin);
|
|
|
|
return 0;
|
|
}
|