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

时间:2008-10-21 15:14:07

标签: c++ windows audio

当我运行此代码时:

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控件并为每个支持的通道设置音量,并将volumne控件设置为不同通道上的不同级别,以便在扬声器之间来回平移音乐(从左到右)。

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

很长一段时间,Microsoftie Larry Osterman has a blog在那里讨论这样的问题,因为他在团队中重写了Vista中的所有音频内容。

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

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

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

  

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

这就解释了MIXERCONTROL_CONTROLTYPE_PAN失败的原因 - 系统中的音频硬件不支持它。