6

我正在尝试修复一个围绕 portmixer 的 Audacity 错误。输出/输入级别可使用 mac 版本的 portmixer 设置,但并非总是在 windows 中。我正在调试 portmixer 的窗口代码,试图让它在那里工作。

使用 IAudioEndpointVolume::SetMasterVolumeLevelScalar 设置主音量对于板载声音效果很好,但使用专业的外部 USB 或 RME Fireface 400 等火线接口,输出音量不会改变,尽管它反映在该设备的 Window 声音控制面板中,以及在系统混音器中。

此外,在我们的程序之外,更改系统混音器的主滑块(在任务栏中)没有任何效果 - 声卡输出相同(完整)级别,无论系统说它处于什么级别。更改输出级别的唯一方法是使用硬件开发人员随卡提供的定制应用程序。

IAudioEndpointVolume::QueryHardwareSupport 函数返回 ENDPOINT_HARDWARE_SUPPORT_VOLUME 所以它应该能够做到这一点。

许多设备上的输入和输出都存在这种行为。

这可能是Window的错误吗?

可以通过模拟(缩放)输出来解决此问题,但这不是首选,因为它在功能上并不相同 - 最好让音频接口进行缩放(特别是如果它涉及前置放大器,则用于输入)。

4

1 回答 1

0

你说的卡——比如RME——根本不支持通过软件设置master或任何其他级别,你也无能为力。这不是 Windows 错误。有人可能会争辩说,回馈 ENDPOINT_HARDWARE_SUPPORT_VOLUME 是一个错误,但这可能源于驱动程序级别,而不是 Windows 本身。

到目前为止,我发现的唯一解决方案是将调试器(或添加 dll 挂钩)连接到供应商提供的软件并查看DeviceIOControl它发出的调用(那些是用于与硬件对话的调用),同时在供应商中设置音量软件。很难为每张卡做到这一点,但可能值得为几张专业卡做。特别是对于 Audacity,对于开源音频软件来说,它实际上并没有那么糟糕,所以我可以想象如果他们的卡上的音量可以由它设置,有些人会非常高兴。(在我们专门使用 RME Multiface 的时候,我花了很多时间来弄清楚 DeviceIOControl 调用,但最后这绝对值得,因为我可以为矩阵中的任何点设置以 dB 为单位的音量)

于 2011-09-21T08:50:33.713 回答