音量控制 XP 与 Vista 不同的通道数

Posted

技术标签:

【中文标题】音量控制 XP 与 Vista 不同的通道数【英文标题】:Volume Control Number of Channels XP different than Vista 【发布时间】:2008-10-21 15:14:07 【问题描述】:

当我运行这段代码时:

MIXERLINE MixerLine;
memset( &MixerLine, 0, sizeof(MIXERLINE) );
MixerLine.cbStruct = sizeof(MIXERLINE);
MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE );

在 XP 下 MixerLine.cChannels 以声卡支持的声道数返回。通常是 2 个,现在经常更多。

在 Vista 下 MixerLine.cChannels 作为一个返回。

然后我得到了一个 MIXERC​​ONTROL_CONTROLTYPE_VOLUME 控件并为每个受支持的通道设置音量,并将不同通道上的音量控件设置为不同的级别,以便在扬声器之间来回平移音乐(从左到右)。

显然在 Vista 下这种方法行不通,因为只有一个通道。我可以设置音量,它同时适用于两个通道。

我尝试为此设备获取 MIXERC​​ONTROL_CONTROLTYPE_PAN,但这不是一个有效的控件。

所以,MMSystem 专家的问题是:我需要什么类型的控制来调整左/右平衡?或者,有没有更好的方法?我想要一个适用于 XP 和 Vista 的解决方案。

计算机详细信息:运行 Vista Ultimta 32 位 SP1 和所有最新补丁。音频由带有 4 个扬声器的 Creative Audigy 2 ZS 卡提供,这些扬声器都可以通过 Vista 的声音面板正确寻址(控制)。驱动程序是 Creative 网站上的最新版本 (SBAX_PCDRV_LB_2_18_0001)。 Vista 声音未设置为单声道,所有声道都可以从声音面板中看到和控制。

在“XP 兼容模式”下运行程序不会改变此问题的行为。

【问题讨论】:

【参考方案1】:

如果您在“XP 兼容性”模式下运行应用程序,则混音器 API 的工作方式应该更接近于它们在 XP 中的工作方式。

如果您不是在 XP 模式下运行,那么混音器 API 会反映混音格式 - 如果您的 PC 的音频解决方案配置为单声道,那么您只会看到一个通道,但如果您的机器配置为混音器 API 的多通道输出应该反映这一点。

您可以运行扬声器调谐向导来确定为您的音频解决方案配置的通道数。

【讨论】:

【参考方案2】:

Microsoftie Larry Osterman has a blog 很长时间以来一直在讨论此类问题,因为他所在的团队在 Vista 中重新编写了所有音频内容。

在comments to this blog post 中,他似乎表示应用程序控制的平衡不是他们认为需要的:

CN,实际上我们不知道应用程序控制其平衡的任何情况。话虽如此,我们确实支持应用程序的单独通道音量,但强烈建议应用程序不要使用它。

他还表示可以将声音从一侧平移到另一侧,但这取决于硬件是否支持:

Joku,我们公开了音频解决方案实现的音量控制。如果它可以进行平移,我们就进行平移(我们实际上为左右通道公开了单独的滑块)。

这就解释了为什么MIXERCONTROL_CONTROLTYPE_PAN 失败了——您系统上的音频硬件不支持它。

【讨论】:

以上是关于音量控制 XP 与 Vista 不同的通道数的主要内容,如果未能解决你的问题,请参考以下文章

vista/xp中如何调整主音量

Java (+- JNA) 中有没有办法在 XP+Vista+Windows 7 中可靠地设置主系统音量?

GET Windows XP/Vista/Seven 中的主音量(通常通过键盘滚轮增加的那个)

在 c# 中获取主音量

Qt音视频开发35-左右通道音量计算和音量不同范围值的转换

请问水果做音乐FL STUDIO如何才能单独提高单轨道的音量???