【问题标题】:Win32 Audio API endpointVolume interface returning wrong channel countWin32 Audio API endpointVolume 接口返回错误的通道数
【发布时间】:2011-11-24 22:05:19
【问题描述】:

我有一个使用 win32 Audio API 的声音应用程序。问题是当我打电话时:

  endpointVolume->getChannelCount(&count);

它返回 2 个通道(但在 windows 中启用了 6 个通道)。我知道它们都可以工作,因为我从扬声器获得输出,并且我还检查了峰值:

  IAudioMeterInformation->getMeteringChannelCount()

我得到 6 个通道,峰值大于 0。所以有输出..有人知道为什么会这样吗?它是错误还是编码错误的驱动程序?我可以通过其他方式获得音量值吗?

【问题讨论】:

  • 是的,这就是为什么我得到 6 个峰值通道而只有 2 个音量通道
  • 您使用的是什么声卡和驱动程序?您是否检查过制造商网站的更新?
  • 是的,我已经安装了最新的驱动程序。我正在使用 realtek 高清音频驱动程序 (6.0.1.6482)
  • 你用什么来播放音频?
  • 应用程序不播放音频,它只收听其他音频应用程序发送到声卡的内容。

标签: c++ winapi audio volume


【解决方案1】:

我找到了一个link on msdn,其中一个人描述了类似的问题,总而言之,这是你应该做的:

  1. 使用 QueryHardwareSupport 检查设备的卷是否来自驱动程序或 APO。
  2. 将错误通知 Microsoft(即使他们可能不会对此采取任何措施)。
  3. 使用您使用的 api 来查看是否可以修复它(随机函数调用等...)。
  4. 假设这不起作用,请使用备用 api 获取通道数。
  5. 如果一切都失败了,请购买不同的声卡,因为那个显然不能正常工作。

【讨论】:

  • 尝试了 1-3 次,但没有成功。购买新声卡的问题是我不能对最终用户这么说(您的声卡驱动程序没有得到适当的支持,请去购买一个新的:P)
【解决方案2】:

如果您准备自己的缓冲区来播放音频,您可以自己获取音量。如果你愿意,我会粘贴一些代码来这样做......

【讨论】:

  • 应用程序不播放音频,它只检查其他应用程序正在输出什么(在全球范围内)并据此执行一些逻辑。这就是为什么我需要获取每个通道的音量值。
  • 如果您不能依赖 API,也许最好的方法是让您连接到音频输出并自己计算峰值...
  • 问题不在于峰值,而在于音量,我正确获取了所有峰值通道,但我只得到了 2 个音量通道(而不是 6 个!)。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2020-08-15
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2015-12-24
相关资源
最近更新 更多