WaveConvertor.h
上传用户:goak128
上传日期:2013-07-17
资源大小:155k
文件大小:5k
- #ifndef _CWAVE_CONVERTOR_H_
- #define _CWAVE_CONVERTOR_H_
- //////////////////////////////////////////////////////////////////////////
- // class CWaveConvertor
- //
- // 功能: 实现裸音频数据的FFT变换
- // 创建人: 陈文凯 (chwkai@gmail.com)
- // 创建日期:2005年5月19日
- // 修改人:
- // 修改日期:
- // 版本
- #ifndef _AFLIBFFT_H
- #define _AFLIBFFT_H
- typedef struct {
- double re, im;
- } COMPLEX;
- /*! class aflibFFT
- brief Performs a forward or reverse FFT.
- This class provides a FFT for other classes in this library to use. There is
- only one API for this class and it is fft_double. It will perform both a
- forward and reverse FFT. It operates on doubles.
- */
- //////////////////////////////////////////////////////////////////////////
- // 实现Forward和Reverse Fourier变换
- //
- // 此类为Open Source Audio Library Project的部分代码
- // 详细介绍见:http://osalp.sourceforge.net
- class aflibFFT {
- public:
- aflibFFT();
- ~aflibFFT();
- void
- fft_double (
- unsigned NumSamples,
- int InverseTransform,
- const double *RealIn,
- const double *ImagIn,
- double *RealOut,
- double *ImagOut );
- private:
- unsigned int Nfactors;
- COMPLEX *W_factors;
- int
- fft (
- COMPLEX *in,
- unsigned n,
- COMPLEX *out);
- int
- rft (
- COMPLEX *in,
- unsigned n,
- COMPLEX *out);
- void
- Fourier (
- COMPLEX *in,
- unsigned n,
- COMPLEX *out);
- unsigned
- radix (unsigned n);
- void
- split (
- register COMPLEX *in,
- register unsigned r,
- register unsigned m,
- register COMPLEX *out);
- void
- join (
- register COMPLEX *in,
- register unsigned m,
- register unsigned n,
- register COMPLEX *out);
- int
- W_init(unsigned n);
- };
- #endif
- //////////////////////////////////////////////////////////////////////////
- // 负责实现音频裸数据的各种转换
- class CWaveConvertor
- {
- public:
- CWaveConvertor(void);
- ~CWaveConvertor(void);
- public:
- // 实现信号的前向Fourier变换
- static void ConverToFFT(
- unsigned int nSamples, // 样本数量
- unsigned int nShorts, // 短时点数
- const double* pRealIn, // 输入信号的实部
- double* pRealOut, // 输出的实部
- double* pImageOut); // 输出的虚部
-
- // 实现信号的逆向Fourier变换
- static void ConvertToRFT(
- unsigned int nSamples, // 样本数量
- unsigned int nShorts, // 短时点数
- const double* pRealIn, // 输入信号
- double* pRealOut, // 输出信号的实部
- double* pImageOut); // 输出信号的虚部
- // 获取输入信号的功率谱
- static void ConvertToPowerSpectral(
- unsigned int nSamples, // 样本数量
- unsigned int nShorts, // 短时点数
- const double* pRealIn, // 输入信号
- double* pDataOut // 输出的功率谱
- );
- // 获取输入信号的对数功率谱
- static void ConvertToLogPowerSpectral(
- unsigned int nSamples, // 样本数量
- unsigned int nShorts, // 短时点数
- const double* pRealIn, // 输入信号
- double* pDataOut // 输出的对数功率谱
- );
- // 获取输入信号的倒谱
- static void ConvertToCepStrum(
- unsigned int nSamples, // 样本数量
- unsigned int nShorts, // 短时点数
- const double* pRealIn, // 输入信号的
- double* pDataOut // 输出的倒谱
- );
- // 对输入的8位信号,转化为double类型序列
- static void ConvertToDoubleMono(
- const byte* pDataIn, // 输入样本序列
- unsigned int nCount, // 样本数量
- double* pDataOut // 输出double类型序列
- );
- // 对输入的16位信号,转化为double类型序列
- static void ConvertToDoubleMono(
- const int* pDataIn, // 输入样本序列
- unsigned int nCount, // 样本数量
- double* pDataOut // 输出double类型序列
- );
- // 对输入的8位信号,转化为双声道double序列
- static void ConvertToDoubleStereo(
- const byte* pDataIn, // 输入样本序列
- unsigned int nCount, // 样本数量
- double* pDataOutLeft, // 输出左声道double类型序列
- double* pDataOutRight // 输出右声道double类型序列
- );
- // 对输入的16位信号,转化为双声道double序列
- static void ConvertToDoubleStereo(
- const int* pDataIn, // 输入样本序列
- unsigned int nCount, // 样本数量
- double* pDataOutLeft, // 输出左声道double类型序列
- double* pDataOutRight // 输出右声道double类型序列
- );
- // 对输入信号进行抽样
- static void ConvertToSample(
- const double* pDataIn, /*输入样本序列*/
- unsigned int nCount, /*输入样本数量*/
- double* pDataOut, /*输出抽样样本*/
- unsigned int nWinSize /*抽样窗口宽度*/
- );
- // 对输入信号进行截取
- static void GetData(
- const double* pDataIn, // 输入样本序列
- unsigned int nCount, // 输入样本数量
- unsigned int nStart, // 起始下标
- unsigned int nLen, // 截取长度
- double* pDataOut // 截取后的序列
- );
- };
- #endif /*_CWAVE_CONVERTOR_H_*/