我们的软件应播放声音(不只是小噪音,而是声音等)。我想知道音量控制怎么样。 Windows Vista样式指南说明了在Windows混音器中定义特定于应用程序的音量控件。
但是Windows XP及以下版本呢?我认为没有办法让我们控制Windows混音器。但是你可以实现自己的音量控制,但是如果不修改音频数据,它就不会比系统范围的音量(可能非常低甚至是静音)响亮。
问题是:应用程序是否应该使用自己的音量控制或触发Windows音量控制?
问题是,基本用户甚至不知道在Windows中设置卷的位置。
答案 0 :(得分:4)
大多数音频渲染框架(您没有提到您使用的那个)允许用户控制从音频渲染框架传递到系统音频引擎的流的音频。例如,DirectSound有一个方法IDirectSoundBuffer,允许您设置该声音缓冲区的音量。
每个应用程序的音量控制(无论是否通过系统调音台曝光)对于客户来说都是比控制主音量的应用程序更好的体验。许多机器(例如,大多数当前的笔记本电脑)不提供硬件音量控制,并且依赖于用户将主音量设置为舒适的级别(这是高度用户特定的值)。如果您的应用程序操纵主卷,则会覆盖用户选择,并且可能会让他们感到不安。
顺便说一句,要明确:我对MusiGenesis的选择也没有任何问题。对于他的应用程序的专业示例,这种选择是有道理的。 MusiGenesis的另一个类似例子是MIDI渲染应用程序。如果应用程序有时通过硬件MIDI(没有音量控制)并且有时通过软件MIDI(带音量控制)进行渲染,则可能不会将音量控制暴露给用户以避免混淆。
答案 1 :(得分:3)
在我的应用程序(软件合成器/音乐合成工具)中,我实际上没有触摸系统卷或甚至为我自己的应用程序提供音量控制。我的所有音频输出都被标准化为最大可能级别的95%左右,从那时起,用户可以通过Windows音量控制或扬声器上的音量控制来控制输出音量。
在我看来,这就是这样的Windows音频应用程序应该的行为,因为通常在使用软件合成器时,它是仅应用程序产生音频输出,并且用户已经有另外两种控制音量的方法(Windows控制和扬声器旋钮)。
对于像你这样的应用程序,它意味着在其他应用程序也可能产生噪音的环境中播放声音,我认为你的应用程序应该只提供一种降低自身音量的方法,而不会影响系统音量。大多数Windows用户已经知道系统音量控制的位置(右下角的工具箱),因此将此控件添加到您自己的应用程序中也是多余的。
答案 2 :(得分:2)
我们的应用程序也需要输出语音,并且相对于可能同时运行的其他应用程序也具有不同的音量设置。我们有一个用户可以在应用程序中更改的音量控制。
因此,在Windows 2000 / XP中,我们会在应用程序获得焦点时修改系统卷,并在失去焦点或应用程序关闭时将其设置回先前的设置。这确实很有效,并且似乎不会干扰同时运行的其他基于音频的应用程序的运行(例如对录音音量非常敏感的语音识别软件)。
这与Vista和Windows 7的行为完全相同,只是它们负责维护每个应用程序的各个卷级别(在这种情况下,我们禁用了前面提到的代码)。