16Apr2003 Steve Kann The code in resample.c/resample.h has been liberally yanked from the SoX distribution, and reworked just a tiny bit to allow compilation outside of SoX. Aside from some minor changes to the calling conventions (to use just the private resample data structure, not the larget sox structures), and generic code moves/defines that needed to be localized, the other notable changes are: 1) st_sample_t is here defined as a 16 bit integer, and not a 32 bit integer, so this code will will be able to operate over 16 bit unsigned samples (the resample effect works with floating point internally anyway, so it was a small change in the code). 2) The "getopts" call is not necessary (nor, at this point helpful, since the options are set to their default now ad the beginning of start). 3) start now takes two additional parameters, "inrate" and "outrate" To use this, the basic idea is: st_resample_t resampler; st_resample_start(&resampler, inrate, outrate); while(you have input data) { iNum = (number of Input samples we have); oNum = (size of Output buffer available) iBuf = input buffer; oBuf = output buffer; if(st_resample_flow(&resampler, ibuf, obuf, &iNum, &oNum) != ST_SUCCESS) { handle error. } (after calling, iNum, oNum will the the count of buffers read/written) } finally, you call st_sample_drain, to get the "last" output; if(st_sample_drain(&resampler, obuf, &oNum) != ST_SUCCESS) { error } Then, call st_sample_stop, to free resources: st_sample_stop(&resampler); For a discussion on this and other resampling algorithms, see this page for a great analysis by K. Bradley and Andreas Wilde at: http://leute.server.de/wilde/resample.html