winxp平台的内置AEC(回声消除)和噪声抑制

 采集缓冲的音效

    有两种音频采集缓冲的音效已是在Windows XP内核中实现的。
   
    ·回声消除(AEC)
    ·噪声抑制
   
     采集缓冲是不支持其它DMOs音效的,虽然它们在播放缓冲中支持。
    
     DirectSoundFullDuplexCreate8函数和IDirectSoundCapture8::CreateCaptureBuffer方法都可通过设置DSCBUFFERDESC中结构数组指针的DSCEFFECTDESC的音效属性,来获取想要的音效。如果想调用微软的“回声消除”和“噪声抑制”的实现,你必须通过 DirectSoundFullDuplexCreate8 创建一个音频采集缓冲区,你也必须使用该函数创建辅助声音缓冲区。如果不这样做,那音效就无法实现。
    
     DSCEFFECTDESC结构中的属性dwFlags,你必须设置为DSCFX_LOCHARDWARE或者DSCFX_LOCSOFTWARE。大多数情况下应设为DSCFX_LOCSOFTWARE值。如果当前平台不支持指定音效,则创建采集缓冲对象时会失败。
    
     这些音效定义在guidDSCFXClass中,guidDSCFXClass是DSCEFFECTDESC内的一个成员。在guidDSCFXInstance中设置DSCFX_MS_AEC或DSCFX_MS_NS,可获得微软的音频实现,要想获得其他第三方的音效的硬件或软件实现,就得从制造商那里获取类和实例GUID。
    
     在采集缓冲创建成功后,可以通过IDirectSoundCaptureBuffer8::GetFXStatus来获取这个采集缓冲上的音效情况。
    
     回声消除(AEC)主要利于那些用于一端到另一端进行语音交流的应用程序。由A点麦克风采集的信号从B点的喇叭中输出,输出后被B点的麦克风采集接收到。不使用AEC的话,这个信号就又会被发送回A点,导致A点听到回声也可能是嚣叫。AEC通过在每个点监控输入信号(以整个房间的环境作为考虑因素对输入信号进行调整,将它从当前正在输出的信号中排除)克服了这个问题。它同时也除去了任何由本地电脑播放着的声音(比如音乐),从而通过网络传输的语音将不会受干扰。
    
     AEC在操作系统内核级别上实现并且全局使用这种效果。它有如下限制:
    
     ·同一时刻只能有一个捕捉缓冲区使用AEC。">">
    
     ·如果其它应用程序正在捕捉或播放音频,那么AEC就不能被启动。如果AEC已经启动了,其它任何应用程序要捕捉声音都会使用AEC。
    
     ·不管输入输出的音频格式什么,内核混音器(AEC音效)都以16位 单声道(mono)格式处理声音,这样会导致声音质量下降。直接以16位 mono格式采集声音是为了减少处理器(CPU)的开销。
    
     ·当AEC正在被使用时,所有DirectSound设备上的硬件加速都会失效,这将会影响到其它共享了该设备的用户的体验。
    
     ·AEC参数的变化将会影响所有正在运行的应用程序。
    
     ·AEC无法在有些组合声效卡和驱动程序的情况下使用。应用程序应该始终提供用户关闭AEC的功能。
    
     ·在Windows XP SP1之前的操作系统版本上, AEC不支持USB喇叭,也无法在那些音声采集和播放的钟频率不同的的机器上工作。
    
     ·如果音声环境改变,AEC音效适配器将会花费2秒或以上的时间进行调节。
    
     .采集信号(输入信号)和播放信号(采集信号)的时延超过128毫秒时,回声将不能从输出信号中去除。
    
     在具有这个效果的捕捉缓冲区上,使用 IDirectSoundCaptureFXAec8 接口来设置和得到AEC参数。你也可以允许噪音来填充。(一种用于防止在输出信号中没有新数据时而产生完全的寂静)
    
     噪声抑制音效只有在AEC被启用的情况下才能被使用。降噪捕捉效果除去频繁的背景噪音,诸如风扇噪音。使用 IDirectSoundCaptureFXNoiseSuppress8 接口来设置和获取参数。

你可能感兴趣的:(windows平台)