波形捕获:(7)“捕获缓冲区”特效
在 Windows XP 中,有两种可以作为内核级的实现方法的“捕获缓冲区 ”特效是可行的:
·反映消除(AEC)
·降噪
不支持其它DMOs中的特效(诸如那些被用于缓冲区渲染的结果)。
DirectSoundFullDuplexCreate8函数和 IDirectSoundCapture8::CreateCaptureBuffer 要领都以一个表白 DSCEFFECTDESC 布局体数组(该数组用于暗示想要的特效)地点的 DSCBUFFERDESC布局体作为参数。可是,假如你想操作微软的实现方法你必需通 过 DirectSoundFullDuplexCreate8 建设一个捕获缓冲区。你也必需利用该函数 建设帮助声音缓冲区。假如不这样做,那特效就无法实现。
在每个 DSCEFFECTDESC 布局体的 dwFlags 成员中,你必需指定 DSCFX_LOCHARDWARE 或 DSCFX_LOCSOFTWARE。在大大都环境下,指定 DSCFX_LOCSOFTWARE。假如特效在指定的位置不行行,那么缓冲区建设失败。
特效由 DSCEFFECTDESC 布局体中的 guidDSCFXClass 成员来标识。在 guidDSCFXInstance 成员中指定 DSCFX_MS_AEC或 DSCFX_MS_NS 就可以获得微软 的软件实现方法。要想在硬件或软件上利用其它可行的实现方法,就得从制造商 哪里获取类和实例GUID。
当缓冲区被建设之后,你可以通过 IDirectSoundCaptureBuffer8::GetFXStatus 要领获取特效的信息。
AEC主要利于那些用于一端到另一端举办语音交换的应用措施。由A区域麦克 风发出的信号从B区域的喇叭中输出,同时被B区域的麦克风吸收。不利用AEC的 话,这个信号就又会被发送回A区域。导致反映也大概是嚣叫。AEC通过在每个区 域监控输入信号(以整个房间的情况作为思量因素对输入信号举办调解,将它从 当前正在输出的信号中解除)降服了这个问题。它同时也撤除了任何由当地电脑 播放着的声音(好比音乐),从而通过网络传输的语音将不会受滋扰。
AEC在操纵系统内核级别上实现而且全局利用这种结果。它有如下限制:
·同一时刻只能有一个捕获缓冲区利用AEC。
·假如其它应用措施正在捕获或播放音频,那么AEC就不能被启动。如 果AEC已经启动了,其它任何应用措施要捕获声音城市利用AEC。
·不管输入输出的名目如何,内核混音器都以16位 mono名目处理惩罚声音 。这样的功效是声音质量大概会下降。以16位 mono名目捕获声音是为了淘汰对 处理惩罚器的利用。
·当AEC正在被利用时,所有DirectSound设备上的硬件反映城市失效 ,这将会影响到其它共享了该设备的用户的体验。
·AEC参数的变革将会影响所有正在运行的应用措施。
·AEC无法在有些组合声效卡和驱动措施的环境下利用。应用措施应该 始终提供用户封锁AEC的成果。
·在操纵系统版本上主要是Windows XP SP1,AEC无法在利用USB喇叭的 环境下事情,也无法在那些提供差异时钟频率的捕获和渲染的呆板上事情。
·假如音效情况改变,适配过滤器将会耗费2秒或以上的时间举办调理 。
·任何呈此刻原始声音信号后128毫秒以上的后期混响将不会从正在输 出的信号中撤除。
在具有这个结果的捕获缓冲区上,利用 IDirectSoundCaptureFXAec8接口来 配置和获得AEC参数。你也可以答允噪音来填充。(一种用于防备在输出信号中 没有新数据时而发生完全的沉寂)
降噪特效只有在AEC被启用的环境下才气被利用。降噪捕获结果撤除频繁的背 景噪音,诸如电扇噪音。利用 IDirectSoundCaptureFXNoiseSuppress8接口来设 置和获取参数。
通过利用 IDirectSoundCaptureBuffer8::GetObjectInPath 要领从捕获缓冲 区工具中获得特效接口。