ref: edb4b35e97fd5c03bad3d3a7d98fec82d3df0c91
parent: b908e5fd7064d6a70a380985fd1f2af1b18454ea
author: rrt <rrt>
date: Fri Nov 24 15:26:15 EST 2006
Remove old code. I trust Fabrice Bellard
--- a/src/rate.c
+++ b/src/rate.c
@@ -2,7 +2,7 @@
* August 21, 1998
* Copyright 1998 Fabrice Bellard.
*
- * [Rewrote completly the code of Lance Norskog And Sundry
+ * [Rewrote completely the code of Lance Norskog And Sundry
* Contributors with a more efficient algorithm.]
*
* This source code is freely redistributable and may be used for
@@ -17,8 +17,6 @@
#include "st_i.h"
-#ifndef USE_OLD_RATE
-
#include <math.h>
/*
* Linear Interpolation.
@@ -171,171 +169,6 @@
/* nothing to do */
return (ST_SUCCESS);
}
-
-#else /* USE_OLD_RATE */
-
-/*
- * July 5, 1991
- * Copyright 1991 Lance Norskog And Sundry Contributors
- * This source code is freely redistributable and may be used for
- * any purpose. This copyright notice must be maintained.
- * Lance Norskog And Sundry Contributors are not responsible for
- * the consequences of using this software.
- */
-
-/*
- * Sound Tools rate change effect file.
- */
-
-#include <math.h>
-
-/*
- * Least Common Multiple Linear Interpolation
- *
- * Find least common multiple of the two sample rates.
- * Construct the signal at the LCM by interpolating successive
- * input samples as straight lines. Pull output samples from
- * this line at output rate.
- *
- * Of course, actually calculate only the output samples.
- *
- * LCM must be 32 bits or less. Two prime number sample rates
- * between 32768 and 65535 will yield a 32-bit LCM, so this is
- * stretching it.
- */
-
-/*
- * Algorithm:
- *
- * Generate a master sample clock from the LCM of the two rates.
- * Interpolate linearly along it. Count up input and output skips.
- *
- * Input: |inskip | | | | |
- *
- *
- *
- * LCM: | | | | | | | | | | |
- *
- *
- *
- * Output: | outskip | | |
- *
- *
- */
-
-
-/* Private data for Lerp via LCM file */
-typedef struct ratestuff {
- st_rate_t lcmrate; /* least common multiple of rates */
- unsigned long inskip, outskip; /* LCM increments for I & O rates */
- unsigned long total;
- unsigned long intot, outtot; /* total samples in LCM basis */
- st_sample_t lastsamp; /* history */
-} *rate_t;
-
-/*
- * Process options
- */
-int st_rate_getopts(eff_t effp, int n, char **argv)
-{
- if (n)
- {
- st_fail(st_rate_effect.usage);
- return (ST_EOF);
- }
- return (ST_SUCCESS);
-}
-
-/*
- * Prepare processing.
- */
-int st_rate_start(eff_t effp)
-{
- rate_t rate = (rate_t) effp->priv;
-
- rate->lcmrate = st_lcm((st_sample_t)effp->ininfo.rate, (st_sample_t)effp->outinfo.rate);
- /* Cursory check for LCM overflow.
- * If both rate are below 65k, there should be no problem.
- * 16 bits x 16 bits = 32 bits, which we can handle.
- */
- rate->inskip = rate->lcmrate / effp->ininfo.rate;
- rate->outskip = rate->lcmrate / effp->outinfo.rate;
- rate->total = rate->intot = rate->outtot = 0;
- rate->lastsamp = 0;
- return (ST_SUCCESS);
-}
-
-/*
- * Processed signed long samples from ibuf to obuf.
- * Return number of samples processed.
- */
-int st_rate_flow(eff_t effp, st_sample_t *ibuf, st_sample_t *obuf,
- st_size_t *isamp, st_size_t *osamp)
-{
- rate_t rate = (rate_t) effp->priv;
- int len, done;
- st_sample_t *istart = ibuf;
- st_sample_t last;
-
- done = 0;
- if (rate->total == 0) {
- /* Emit first sample. We know the fence posts meet. */
- *obuf = *ibuf++;
- rate->lastsamp = *obuf++ / 65536L;
- done = 1;
- rate->total = 1;
- /* advance to second output */
- rate->outtot += rate->outskip;
- /* advance input range to span next output */
- while ((rate->intot + rate->inskip) <= rate->outtot){
- last = *ibuf++ / 65536L;
- rate->intot += rate->inskip;
- }
- }
-
- /* start normal flow-through operation */
- last = rate->lastsamp;
-
- /* number of output samples the input can feed */
- len = (*isamp * rate->inskip) / rate->outskip;
- if (len > *osamp)
- len = *osamp;
- for(; done < len; done++) {
- *obuf = last;
- *obuf += ((float)((*ibuf / 65536L) - last)* ((float)rate->outtot -
- rate->intot))/rate->inskip;
- *obuf *= 65536L;
- obuf++;
- /* advance to next output */
- rate->outtot += rate->outskip;
- /* advance input range to span next output */
- while ((rate->intot + rate->inskip) <= rate->outtot){
- last = *ibuf++ / 65536L;
- rate->intot += rate->inskip;
- if (ibuf - istart == *isamp)
- goto out;
- }
- /* long samples with high LCM's overrun counters! */
- if (rate->outtot == rate->intot)
- rate->outtot = rate->intot = 0;
- }
-out:
- *isamp = ibuf - istart;
- *osamp = len;
- rate->lastsamp = last;
- return (ST_SUCCESS);
-}
-
-/*
- * Do anything required when you stop reading samples.
- * Don't close input file!
- */
-int st_rate_stop(eff_t effp)
-{
- /* nothing to do */
- return (ST_SUCCESS);
-}
-#endif /* USE_OLD_RATE */
static st_effect_t st_rate_effect = {
"rate",