7、参数平衡特技(ParamEQ)
参数平衡特技的参数通过下面的结构来调整:
typedef struct _DSFXParamEq { FLOAT fCenter;//中心的频率 ,单位是hz,取值范围是 80.0f hz~~16000.0f ,缺省值 是 8000hz FLOAT fBandwidth;//音的带宽,以半音为单位,取值范围是 1.0f~~36.0f,缺省值 是12 FLOAT fGain;//音频的音量,以db为单位,取值范围是 -15.0db ~~15.0f db,缺省值是0db } DSFXParamEq, *LPDSFXParamEq; | 我们在程序中可以定义这个结构的对象,如下:
LPDIRECTSOUNDFXPARAMEQ8 g_pParamEq = NULL; DSFXParamEq g_paramsParamEq; | 通过拖动滑动条,我们可以用下面的代码调整参数:
DSEFFECTDESC effectdesc; ZeroMemory( &effectdesc, sizeof( DSEFFECTDESC ) ); effectdesc.dwSize = sizeof(DSEFFECTDESC); effectdesc.dwFlags = 0; effectdesc.guidDSFXClass = GUID_DSFX_STANDARD_PARAMEQ; DWORD dwResult; if(g_pDSBuffer8) { g_pDSBuffer8->SetFX(1,&effectdesc,&dwResult); if( FAILED( hr = g_pDSBuffer8->GetObjectInPath( GUID_DSFX_STANDARD_PARAMEQ, 0, IID_IDirectSoundFXParamEq8,(LPVOID*) &g_pParamEq ) ) ) return ; g_pParamEq ->SetAllParameters (&g_paramsParamEq); } | 8、混响(Reverb)
混响特技的参数通过下面的结构来调整:
typedef struct _DSFXWavesReverb { FLOAT fInGain; //输入信号的音量的大小,即db值,缺省值是 0db。 FLOAT fReverbMix;//回响混合音量强度大小,用db值来表示,缺省值是 0db。 FLOAT fReverbTime;//回响的时间,单位是ms,缺省值是 1000.0f ms FLOAT fHighFreqR//高频回响所占时间的比率 , 缺省值 0.001f 。TRatio; } DSFXWavesReverb, *LPDSFXWavesReverb; | 我们在程序中可以定义这个结构的对象,如下:
LPDIRECTSOUNDFXWAVESREVERB8 g_pReverb = NULL; DSFXWavesReverb g_paramsReverb; | 通过拖动滑动条,我们可以用下面的代码调整参数:
DSEFFECTDESC effectdesc; ZeroMemory( &effectdesc, sizeof( DSEFFECTDESC ) ); effectdesc.dwSize = sizeof(DSEFFECTDESC); effectdesc.dwFlags = 0; effectdesc.guidDSFXClass = GUID_DSFX_STANDARD_CHORUS; DWORD dwResult; if(g_pDSBuffer8) { g_pDSBuffer8->SetFX(1,&effectdesc,&dwResult); if( FAILED( hr = g_pDSBuffer8->GetObjectInPath( GUID_DSFX_STANDARD_CHORUS, 0, IID_IDirectSoundFXChorus8,(LPVOID*) &g_pReverb ) ) ) return ; g_pReverb ->SetAllParameters (&g_paramsReverb); } | 结束语:
本文通过一个实例演示了如何使用DirectSound提供的基本音频特技。简单的接口,强大的功能,能给你的程序增色不少。本文的示例代码在windowXP +vc.net下调试通过。最后,按照惯例,留下我的email :aooang@hotamil.com,如果有什么问题,可以给我发email。
|