summaryrefslogtreecommitdiff
path: root/third_party/resample/src/resample.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/resample/src/resample.c')
-rw-r--r--third_party/resample/src/resample.c238
1 files changed, 0 insertions, 238 deletions
diff --git a/third_party/resample/src/resample.c b/third_party/resample/src/resample.c
deleted file mode 100644
index 73122704..00000000
--- a/third_party/resample/src/resample.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * FILE: resample.c
- * Sampling-rate-conversion main program (command line usage)
- */
-
-static char resampleVersion[]
- = "\n\tresample version 1.9 (Feb. 1, 2006 - jos@ccrma.stanford.edu)\n\n\
-Copyright 1982-2006 by Julius Smith.\n\
-This is free software. See the Lesser GNU Public License (LGPL) for copying conditions.\n\
-There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
-PARTICULAR PURPOSE.\n\n\
-";
-
-#define USAGE "\
-\n\
-USAGE: One of the following:\n\
-\n\
- resample -to srate [-noFilterInterp] [-linearSignalInterp] [-f filterFile] [-terse] inputSoundFile outputSoundFile\n\
- resample -by factor [options as above] inputSoundFile outputSoundFile\n\
- resample -version\n\
-\n\
-Options can be abbreviated.\n\n\
-Report bugs to <bug-resample@w3k.org>.\n\n\
-"
-
-#include "filterkit.h"
-#include "resample.h"
-#include "sndlibextra.h"
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-static int trace = 1; /* controls verbosity of output */
-
-static char comment[256] = "";
-
-static void fail(char *s)
-{
- fprintf(stderr,"\n*** resample: %s \n",s); /* Display error message */
- fprintf(stderr,USAGE);
- exit(1); /* Exit, indicating error */
-}
-
-static void fails(char *s, char *s2)
-{
- printf("resample: "); /* Display error message */
- printf(s,s2);
- printf("\n\n");
- exit(1); /* Exit, indicating error */
-}
-
-
-int main(int argc, char *argv[])
-{
- double factor = -2.0; /* factor = Sndout/Sndin */
- double newsrate=0;
- BOOL interpFilt = TRUE; /* TRUE means interpolate filter coeffs */
- BOOL largeFilter = FALSE; /* TRUE means use 65-tap FIR filter */
- BOOL linearInterp = FALSE; /* TRUE => no filter, linearly interpolate */
- BOOL knowFactor = FALSE; /* Used to detect insufficient command-line spec */
- int inCount, outCount, outCountReal;
- int infd, outfd, insrate, nChans, result;
- int inType, inFormat;
- int outType, outFormat;
-
- struct stat statbuf;
- char *insfname, *outsfname, *argv0;
- char filterFile[512] = "";
-
- if (argc == 1) {
- fprintf(stderr, USAGE);
- exit(1);
- }
-
- argv0 = argv[0];
- while (--argc && **(++argv)=='-') {
- ++(argv[0]); /* skip over '-' */
- switch (*argv[0]) {
- case 'a': /* -aaaQuality (old name) */
- case 'e': /* -expensive */
- largeFilter = TRUE;
- if (trace)
- printf("Choosing higher quality filter.\n");
- break;
- case 'b': /* -by factor */
- if (--argc)
- sscanf(*(++argv),"%lf",&factor);
- if (trace)
- printf("Sampling-rate conversion factor set to %f.\n",factor);
- knowFactor = TRUE;
- break;
- case 'f': /* -filter filterFile */
- if (--argc)
- strcpy(filterFile, *++argv);
- else
- fail("Need to specify filter file name");
- if (trace)
- printf("Filter file set to %s.\n",filterFile);
- break;
- case 'l': /* -linearInpterpolation */
- linearInterp = TRUE;
- if (trace)
- printf("Using linear instead of bandlimited interpolation\n");
- break;
- case 'n': /* -noFilterInterpolation */
- interpFilt = FALSE;
- if (trace)
- printf("Filter-table interpolation disabled.\n");
- break;
- case 't':
- if (*(argv[0]+1) == 'e') { /* -terse */
- trace = 0;
- break;
- }
- if (--argc) /* -to srate */
- sscanf(*(++argv),"%lf",&newsrate);
- if (trace)
- printf("Target sampling-rate set to %f.\n",newsrate);
- knowFactor = TRUE;
- break;
- case 'v': /* -version */
- printf(resampleVersion);
- if (argc == 1)
- exit(0);
- break;
- default:
- fprintf(stderr,"Unknown switch -%s\n",argv[0]);
- fprintf(stderr,USAGE);
- exit(1);
- }
- }
-
- if (!knowFactor)
- fail("Must specify sampling-rate conversion factor via '-to' or '-by' option");
-
- if (argc < 1)
- fail("Need to specify input soundfile");
- insfname = *argv;
-
- if (argc < 2) {
- fprintf(stderr, USAGE);
- exit(1);
- }
- else
- outsfname = *++argv;
-
- /* Test whether output file name exists. If so, bail... */
- result = stat(outsfname, &statbuf);
- if (result != -1)
- fails("\"%s\" already exists", outsfname);
- if (errno != ENOENT)
- fails("Error creating output file (%s)", strerror(errno));
-
- if (trace)
- printf("Writing output to \"%s\".\n", outsfname);
-
- /* Open input file and gather info from its header */
- // resample-1.8: infd = sndlib_open_read(insfname);
- infd = mus_sound_open_input(insfname);
- if (infd == -1)
- fails("Could not open input file \"%s\"", insfname);
- if (NOT_A_SOUND_FILE(mus_header_type()))
- fails("\"%s\" is probably not a sound file.", insfname);
- nChans = mus_header_chans();
- insrate = mus_header_srate();
- inCount = mus_header_samples();
- inType = mus_header_type(); /* header type (i.e. aiff, wave, etc) (see sndlib.h) */
- inFormat = mus_header_format(); /* data format (see sndlib.h) */
- inCount /= nChans; /* to get sample frames */
-
-/*
- * Set output soundfile format.
- * See sndlib.h for supported types (e.g., MUS_RIFF).
- */
- outType = inType;
- outFormat = inFormat;
-
- /* Compute sampling rate conversion factor, if not specified. */
- if (newsrate>0) {
- if (factor>0)
- fprintf(stderr, "Command-line sampling-rate conversion factor "
- "ignored ... the '-to' option overrides the '-by' option.\n");
- factor = newsrate / (double)insrate;
- if (trace)
- printf("Sampling rate conversion factor set to %f\n",factor);
- }
-
- if (factor < 0) {
- factor = -factor;
- factor = GetDouble("Sampling-rate conversion factor",factor,"");
- }
-
- if (newsrate <= 0)
- newsrate = (int)((double)insrate * factor + 0.5); /* round */
-
- sprintf(comment,"%s -by %f %s%s%s%s%s%s%s %s",argv0,factor,
- (largeFilter?"-expensiveFilter ":""),
- (strcmp(filterFile,"")==0?"":"-f "),
- (strcmp(filterFile,"")==0?"":filterFile),
- (strcmp(filterFile,"")==0?"":" "),
- (linearInterp? "-linearSigInterp ":""),
- (interpFilt? "":"-noFilterInterp "),
- insfname, outsfname);
-
- outfd = sndlib_create(outsfname, inType, inFormat, newsrate, nChans, comment);
- if (outfd == -1)
- fails("Could not create output file \"%s\"", outsfname);
- outCount = (int)(factor * (double)inCount + 0.5); /* output frames */
-
- printf("\nStarting Conversion\n");
- outCountReal = resample(factor, infd, outfd, inCount, outCount, nChans,
- interpFilt, linearInterp, largeFilter, filterFile);
-
- if (outCountReal <= 0)
- fail("Conversion factor out of range");
-
- if (trace && (outCount != outCountReal))
- fprintf(stderr,
- "outCount = %d, outCountReal = %d\n",outCount,outCountReal);
-
- // resample-1.8: sndlib_close(infd, FALSE, 0, 0, 0);
- mus_file_close(infd);
-
- /* Output samps already written; just update header and close file. */
- // resample-1.8: if (sndlib_close(outfd, 1, outType, outFormat, outCountReal * nChans))
- // resample-1.8: fails("Error closing output file (%s)", strerror(errno));
- mus_file_close(outfd);
- int sound_bytes = outCountReal * nChans * mus_bytes_per_sample(outFormat);
- mus_header_change_data_size(outsfname, inType, sound_bytes);
-
- printf("\nConversion Finished: %d output samples.\n\n",outCount);
-
- return(0);
-}