gpt4 book ai didi

audio - 将音频代码升级到新的 WASAPI 标准

转载 作者:行者123 更新时间:2023-12-03 02:04:09 27 4
gpt4 key购买 nike

我们有一个使用 waveXXX() 的应用程序和 mixerXXX()处理与某些乐器之间的音频 I/O 的功能(想想:示波器或电子设备而不是乐器,这并不重要)。终于到了停止在 Windows XP 上部署它并将其移至 Windows 7 和/或 8 的时候了。

从阅读有关 WASAPI 的各种 Material ,听起来大部分应用程序(基于 waveXXX() 函数)实际上可能工作正常,但 mixer()用于设置主输出音量、线路输入音量和麦克风静音的东西肯定要改变,使用IAudioEndPointVolume而是打电话。

是否可以只更改 mixerXXX()电话?这是可取的吗?

从逻辑上讲,此应用程序需要独占使用其音频端点(扬声器输出、线路输入)。如果我想通过软件确保独占访问,那会迫使我重写所有waveXXX()吗?代码也是? (另一种方法是警告用户其他音频应用程序可能会干扰此应用程序)。

最佳答案

我的建议:

  • 如果您需要独占访问,请将所有内容转换为 WASAPI
  • 如果您使用 line-in,请将所有内容转换为 WASAPI
  • 如果您有时间,请将所有内容转换为 WASAPI
  • 如果您严格只在共享模式下使用扬声器和麦克风,请替换 mixerXXX()ISimpleAudioVolume接口(interface)(和其他几个接口(interface)),然后测试是否存在waveXXX()代码按照您的需要运行。然后在每次硬件、操作系统或音频驱动程序更改时进行测试。更好的是,只需转换为 WASAPI。

  • 就我而言,专用扬声器输出至关重要——这会驱动产生相关输入信号的乐器。我想我不介意另一个应用程序是否想要共享对该传入信号的访问,但从逻辑上讲,它是一个希望与其音频端点签订独家契约(Contract)的系统。

    这种排他性要求我获得 IMMDevice例如扬声器输出和线路输入, Activate() IAudioClient他们和 Initialize()上的接口(interface)两者都使用 AUDCLNT_SHAREMODE_EXCLUSIVE (另见 this answer)。

    但是我真的通过这样的过程选择了line-in吗?可能不是。我可以肯定的是,通过切断它们来让以前共享我的端点的任何其他应用程序感到恼火。

    做了这么多,真的不清楚 waveInXXX()会发生什么通话 - 也许他们会从线路输入,也许来自麦克风 - 也许这取决于硬件供应商如何实现他们的交易结束。我也不清楚线路输入和麦克风是否总是多路复用(即可选),总是混合(即你只能通过静音另一个来模拟选择),或者没有可以依赖的标准。

    由于这样的因素,在整个过程中不使用 WASAPI 是一场赌博。

    关于audio - 将音频代码升级到新的 WASAPI 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820650/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com