• 波形捕捉:(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 方法从捕捉缓冲区对象中得到特效接口。

    查看其它:
          导 言
          1.枚举“捕捉设备”
          2.创建“捕捉设备对象”
          3.“捕捉设备”性能
          4.创建一个“捕捉缓冲区”
          5.“捕捉缓冲区”信息
          6.“捕捉缓冲区”通知
          7. “捕捉缓冲区”特效
          8.使用“捕捉缓冲区”
          9.写入到WAV文件 

    作者:stg609

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    本人博客已经转移到Charley Blog

  • 相关阅读:
    什么是内存(一):存储器层次结构
    关于跨平台的一些认识
    适合小白/外行的git与github最基础最浅显教程
    Android动画(二)-属性动画
    Android动画(一)-视图动画与帧动画
    View学习(四)-View的绘制(draw)过程
    View学习(三)- View的布局(layout)过程
    View学习(二)-View的测量(measure)过程
    View学习(一)-DecorView,measureSpec与LayoutParams
    wcf的诡异问题
  • 原文地址:https://www.cnblogs.com/stg609/p/1314479.html
Copyright © 2020-2023  润新知