音量控制 通道数 XP 与 Vista 不同
Volume Control Number of Channels XP different than Vista
当我运行这段代码时:
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
失败了——系统上的音频硬件不支持它。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 从不同线程使用int64的不同字节安全吗
- valgrind-hellgrind与泄漏检查的结果不同
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 函数向量_指针有不同的原型,我可以构建一个吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 访问者访问变体并返回不同类型时出错
- #为""定义宏;静态";针对不同的上下文
- 不同翻译单元中不可重载的非内联函数定义
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过继承类使用来自不同命名空间的运算符
- 我想做一个彼此不同但重复出现的数字
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- c++类声明时,相同的例程,不同的成员变量类型
- Python中的for循环与C++有何不同
- 为测试目标创建具有不同源文件夹的文件
- 音量控制 通道数 XP 与 Vista 不同