windows-nt/Source/XPSP1/NT/enduser/speech/tts/common/fmtconvert/fmtconvert.h
2020-09-26 16:20:57 +08:00

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