Win32 Audio API endpointVolume 接口返回错误的通道数

Posted

技术标签:

【中文标题】Win32 Audio API endpointVolume 接口返回错误的通道数【英文标题】:Win32 Audio API endpointVolume interface returning wrong channel count 【发布时间】: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) 你用什么来播放音频? 应用程序不播放音频,它只收听其他音频应用程序发送到声卡的内容。 【参考方案1】:

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

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

【讨论】:

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

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

【讨论】:

应用程序不播放音频,它只检查其他应用程序正在输出什么(在全球范围内)并据此执行一些逻辑。这就是为什么我需要获取每个通道的音量值。 如果您不能依赖 API,也许最好的方法是让您连接到音频输出并自己计算峰值... 问题不在于峰值,而在于音量,我正确获取了所有峰值通道,但我只得到了 2 个音量通道(而不是 6 个!)。

以上是关于Win32 Audio API endpointVolume 接口返回错误的通道数的主要内容,如果未能解决你的问题,请参考以下文章

win32 api是啥

win32 api 原理

.net API 与win32API

QT 调用win32 api

win32 api CreateFile 和 WriteFile 问题

如何在没有 Web Audio API 的情况下直接从 ArrayBuffer 获取通道数据?