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

Volume Control Number of Channels XP different than Vista

本文关键字:Vista 不同 XP 通道 音量控制      更新时间:2023-10-16

当我运行这段代码时:

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下,Channels作为一个整体回归。

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

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

我试图为此设备获取MIXERCONTROL_CONTROLTYPE_PAN,但这不是有效的控件。

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

计算机详细信息:运行 Vista Ultimta 32 位 SP1 和所有最新修补程序。 音频由Creative Audigy 2 ZS卡提供,该卡连接了4个扬声器,都可以通过Vista的声音面板正确寻址(控制)。 驱动程序是 Creative 网站上的最新消息 (SBAX_PCDRV_LB_2_18_0001)。 Vista 声音未设置为单声道,并且所有通道都可以从声音面板可见和控制。

在"XP 兼容模式"下运行该程序不会更改此问题的行为。

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

如果不在 XP 模式下运行,则混音器 API 会反映混音格式 - 如果你的电脑的音频解决方案配置为单声道,则只会看到一个声道,但如果您的计算机配置为多声道输出,混音器 API 应反映这一点。

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

微软人拉里·奥斯特曼(Larry Osterman)在博客上讨论了这样的问题,因为他所在的团队在Vista中重做了所有音频内容。

在这篇博文的评论中,他似乎指出应用程序控制的平衡不是他们认为需要的东西:

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

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

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

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