71 lines
2.8 KiB
C++
71 lines
2.8 KiB
C++
/******************************************************************************
|
|
* CFmtConvert.h *
|
|
*---------------*
|
|
* Declarations of CFmtConvert class.
|
|
*------------------------------------------------------------------------------
|
|
* Copyright (C) 2000 Microsoft Corporation Date: 05/03/00
|
|
* All Rights Reserved
|
|
*
|
|
********************************************************************** DING ***/
|
|
|
|
#ifndef _FMTCONVERT_H_
|
|
#define _FMTCONVERT_H_
|
|
|
|
#include <windows.h>
|
|
#include <mmreg.h>
|
|
|
|
// #define FILTER_LEN_2 .0005 //(sec)
|
|
|
|
//--- class declare
|
|
class CFmtConvert
|
|
{
|
|
public:
|
|
CFmtConvert(double dHalfFilterLen = 0.0005);
|
|
~CFmtConvert();
|
|
|
|
void SetInputFormat (WAVEFORMATEX* userWavFormat);
|
|
void SetOutputFormat (WAVEFORMATEX* userWavFormat);
|
|
HRESULT ConvertSamples (const void* pvInSamples, int iInSampleLen, void** pvOutSamples, int* iOutSampleLen);
|
|
HRESULT FlushLastBuff (void** ppvOutSamples, int* piOutSampleLen);
|
|
|
|
private:
|
|
//-- mono & stereo
|
|
HRESULT SplitStereo (short* pnInSample, int* iSamplesLen, short** pnLeftSamples, short** pnRightSamples);
|
|
HRESULT MergeStereo (short* pnLeftSamples, short* pnRightSamples, int *iSamplesLen, short** pnOutSamples);
|
|
HRESULT Stereo2Mono (short* pnInSample, int* iSamplesLen, short** pnOutSample);
|
|
HRESULT Mono2Stereo (short* pnInSample, int* iSamplesLen, short** pnOutSample);
|
|
|
|
//-- precission conversions
|
|
double* Short2Double (short* pnIn, int iLen);
|
|
short* Double2Short (double* pdIn, int iLen);
|
|
|
|
//-- resample
|
|
HRESULT Resampling (double* pdInSamples, int iInNumSamples, double *pdMemory,
|
|
double** ppdOutSamples, int* piOutNumSamples);
|
|
HRESULT CreateResamplingFilter (int iInSampFreq, int iOutSampFreq);
|
|
void DeleteResamplingFilter ();
|
|
void FindResampleFactors (int iInSampFreq, int iOutSampFreq);
|
|
double* WindowedLowPass (double dCutOff, double dGain);
|
|
|
|
//-- memory
|
|
HRESULT CreateBuffers ();
|
|
void DeleteBuffers ();
|
|
|
|
enum BlockCntrl_t { FMTCNVT_FIRST, FMTCNVT_BLOCK, FMTCNVT_LAST };
|
|
|
|
WAVEFORMATEX m_OutWavFormat;
|
|
WAVEFORMATEX m_InWavFormat;
|
|
BOOL m_fResetFilter;
|
|
BlockCntrl_t m_eChunkStatus;
|
|
int m_iUpFactor;
|
|
int m_iDownFactor;
|
|
int m_iFilterHalf;
|
|
int m_iFilterLen;
|
|
int m_iBuffLen;
|
|
double m_dHalfFilterLen;
|
|
double* m_pdFilterCoef;
|
|
double* m_pdLeftMemory;
|
|
double* m_pdRightMemory;
|
|
};
|
|
|
|
#endif |