ref: c7130b0baa6edb6a51ed2c68e456b7b398d61d3d
dir: /rateconv.h/
/**********************************************************************
audio sample rate converter
$Id: rateconv.h,v 1.1 2000/01/17 21:53:04 menno Exp $
Header file: rateconv.h
Authors:
NM Nikolaus Meine, Uni Hannover (c/o Heiko Purnhagen)
HP Heiko Purnhagen, Uni Hannover <purnhage@tnt.uni-hannover.de>
Changes:
xx-jun-98 NM resamp.c
18-sep-98 HP converted into module
04-nov-99 NM/HP double ratio
**********************************************************************/
/*
* Sample-rate converter
*
* Realized in three steps:
*
* 1. Upsampling by factor two while doing appropriate lowpass-filtering.
* This is done by using an FFT-based convolution algorithm with a multi-tap
* Kaiser-windowed lowpass filter.
* If the cotoff-frequency is less than 0.5, only lowpass-filtering without
* the upsampling is done.
* 2. Upsampling by factor 128 using a 15 tap Kaiser-windowed lowpass filter
* (alpha=12.5) and conventional convolution algorithm.
* Two values (the next neighbours) are computed for every sample needed.
* 3. Linear interpolation between the two bounding values.
*
* Stereo and mono data is supported.
* Up- and downsampling of any ratio is possible.
* Input and output file format is Sun-audio.
*
* Written by N.Meine, 1998
*
*/
/* Multi channel data is interleaved: l0 r0 l1 r1 ... */
/* Total number of samples (over all channels) is used. */
#ifndef _rateconv_h_
#define _rateconv_h_
/* ---------- declarations ---------- */
/* ---------- functions ---------- */
#ifdef __cplusplus
extern "C" {
#endif
/* RateConvInit() */
/* Init audio sample rate conversion. */
RCBuf *RateConvInit (
int debugLevel, /* in: debug level */
/* 0=off 1=basic 2=full */
double ratio, /* in: outputRate / inputRate */
int numChannel, /* in: number of channels */
int htaps1, /* in: num taps */
/* -1 = auto */
float a1, /* in: alpha for Kaiser window */
/* -1 = auto */
float fc, /* in: 6dB cutoff freq / input bandwidth */
/* -1 = auto */
float fd, /* in: 100dB cutoff freq / input bandwidth */
/* -1 = auto */
long *numSampleIn); /* out: num input samples / frame */
/* returns: */
/* buffer (handle) */
/* or NULL if error */
/* RateConv() */
/* Convert sample rate for one frame of audio data. */
long RateConv (
RCBuf *buf, /* in: buffer (handle) */
short *dataIn, /* in: input data[] */
long numSampleIn, /* in: number of input samples */
float **dataOut); /* out: output data[] */
/* returns: */
/* numSampleOut */
/* RateConvFree() */
/* Free RateConv buffers. */
void RateConvFree (
RCBuf *buf); /* in: buffer (handle) */
#ifdef __cplusplus
}
#endif
#endif /* #ifndef _rateconv_h_ */
/* end of rateconv.h */