shithub: sox

Download patch

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",