AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

用DirectSound实现增强的音频特技效果

51自学网 2015-08-30 http://www.wanshiok.com

  1、和声(Chorus)特技,参数设置的界面如下:


  合声特技的参数通过下面的结构来调整:

typedef struct _DSFXChorus {
 FLOAT fWetDryMix;//压缩信号和未压缩信号的比率,缺省值50
 FLOAT fDepth; //低频率振荡器调制信号的延迟时间的百分比,缺省是10%
 FLOAT fFeedback;//输出信号对特技输入信号的反馈百分比,缺省25%
 FLOAT fFrequency;//LFO的频率,缺省是1.1
 LONG lWaveform;//LFO的波形类型,缺省是正弦波
 FLOAT fDelay;//音频播放时的延迟时间,缺省是16ms
 LONG lPhase; //左右声道声波的相位差别,取值为-180,-90,0,90,180 度
} DSFXChorus, *LPDSFXChorus;

  我们在程序中可以定义这个结构的对象,如下:

DSFXChorus g_paramsChorus;
LPDIRECTSOUNDFXCHORUS8 g_pChorus = NULL;

  然后通过通过滑动条来设置g_paramsChorus对象的值,设置后可以调用:

DSEFFECTDESC effectdesc;
ZeroMemory( &effectdesc, sizeof( DSEFFECTDESC ) );
effectdesc.dwSize = sizeof(DSEFFECTDESC);
effectdesc.dwFlags = 0;
effectdesc.guidDSFXClass = GUID_DSFX_STANDARD_CHORUS;
DWORD dwResult;
if(g_pDSBuffer8)
{
 hr = g_pDSBuffer8->SetFX(1,&effectdesc,&dwResult);
 if( SUCCEED( hr = g_pDSBuffer8->GetObjectInPath( GUID_DSFX_STANDARD_CHORUS, 0, IID_IDirectSoundFXChorus8,(LPVOID*) &g_pChorus ) ) )
  return ;
 g_pChorus->SetAllParameters (&g_paramsChorus);
}

  2、压限特技(Compressor )


  压限特技的参数通过下面的结构来调整,参数调整界面如上:

typedef struct _DSFXCompressor
{
 FLOAT fGain; //压限后输出信号的强度,缺省值是0db
 FLOAT fAttack;//压限达到最大值的时间,缺省是10ms
 FLOAT fRelease;//输入小于fThreshold后,压缩停止的时间,缺省是200ms
 FLOAT fThreshold;//压缩开始的临界点的db值,缺省是-20db
 FLOAT fRatio;//压缩的比率,缺省是3,即3:1
 FLOAT fPredelay;//lThreshold 达到临界点,attack phase开始前的延迟时间
} DSFXCompressor, *LPDSFXCompressor;

  我们在程序中可以定义这个结构的对象,如下:

LPDIRECTSOUNDFXCOMPRESSOR8 g_pCompressor = NULL;
DSFXCompressor g_paramsCompressor;

  通过拖动滑动条,我们可以用下面的代码调整参数:

DSEFFECTDESC effectdesc;
ZeroMemory( &effectdesc, sizeof( DSEFFECTDESC ) );
effectdesc.dwSize = sizeof(DSEFFECTDESC);
effectdesc.dwFlags = 0;
effectdesc.guidDSFXClass = GUID_DSFX_STANDARD_COMPRESSOR;
DWORD dwResult;
if(g_pDSBuffer8)
{
 hr = g_pDSBuffer8->SetFX(1,&effectdesc,&dwResult);
 if(FAILED(hr= _pDSBuffer8->GetObjectInPath( GUID_DSFX_STANDARD_COMPRESSOR, 0, IID_IDirectSoundFXCompressor8,(LPVOID*) &g_pCompressor ) ) )
  return ;
 g_pCompressor->SetAllParameters (&g_paramsCompressor);
}

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:DirectSound应用程序开发快速入门  下一篇:用Visual C++在局域网实现IP多播