0

当我运行此代码时:

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 兼容模式”下运行程序不会改变此问题的行为。

4

2 回答 2

1

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

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

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

于 2008-10-22T16:28:01.587 回答
0

很长一段时间,Microsoftie Larry Osterman 有一个博客,他在博客中讨论了此类问题,因为他所在的团队在 Vista 中重新编写了所有音频内容。

对这篇博文的评论中,他似乎表明应用程序控制的平衡不是他们认为需要的:

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

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

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

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

于 2008-10-22T15:09:55.130 回答