2

我们的软件应该播放声音(不仅仅是小噪音,还有语音等)。我想知道音量控制怎么样。Windows Vista 风格指南说要在 Windows 混音器中定义应用程序特定的音量控制。

但是 Windows XP 及以下版本呢?我认为没有办法让我们的控制权进入 Windows 混音器。但是您可以实现自己的音量控制,但如果您不修改音频数据,它的音量不会超过系统范围的音量(可能非常低甚至静音)。

问题是:应用程序应该使用它自己的音量控制还是触发 Windows 音量控制?

问题是,基本用户甚至不知道在 Windows 中设置音量的位置。

4

3 回答 3

4

大多数音频渲染框架(您没有提及您使用哪一个)允许用户控制从音频渲染框架传递到系统音频引擎的流的音频。例如,DirectSound 有一个方法 IDirectSoundBuffer,它允许您设置该声音缓冲区的音量。

与控制主音量的应用程序相比,每个应用程序的音量控制(无论是否通过系统混音器公开)对客户来说是一种更好的体验。许多机器(例如大多数当前的笔记本电脑)不提供硬件音量控制,并且依赖于用户将主音量设置为舒适的水平(这是一个高度用户特定的值)。如果您的应用程序操纵主卷,您将覆盖用户的选择,他们可能会感到不安。

顺便说一句,要明确一点:我对 MusiGenesis 的选择也没有意见。对于他的应用程序的特殊示例,这种选择是有道理的。另一个与MusiGenesis 示例类似的示例是MIDI 渲染应用程序。如果应用程序有时通过硬件 MIDI(没有音量控制)呈现,有时通过软件 MIDI(有音量控制)呈现,那么不要将音量控制暴露给用户以避免混淆可能是有意义的。

于 2009-09-19T03:00:51.277 回答
3

在我的应用程序(软件合成器/音乐创作工具)中,我实际上并没有触摸系统音量甚至没有为我自己的应用程序提供音量控制。我所有的音频输出都标准化为最大可能水平的 95%,从那时起,用户可以使用 Windows 音量控制或扬声器上的音量控制来控制输出音量。

在我看来,这就是这样的 Windows 音频应用程序的行为方式,因为通常在使用软件合成器时,它是唯一产生音频输出的应用程序,并且用户已经有两种其他控制音量的方式(Windows 控件和扬声器旋钮)。

对于像您这样的应用程序,它旨在在其他应用程序也可能发出噪音的环境中播放声音,我认为您的应用程序应该只提供一种降低自身音量的方法,而不会影响系统音量。大多数 Windows 用户已经知道系统音量控制在哪里(右下工具箱),因此将这个控制也添加到您自己的应用程序中是多余的。

于 2009-09-18T17:34:45.377 回答
2

我们的应用程序也需要输出语音,并且相对于可能同时运行的其他应用程序具有不同的音量设置。我们有一个音量控制,用户可以在应用程序中进行更改。

因此,在 Windows 2000/XP 中,我们会在应用程序获得焦点时修改系统音量,并在失去焦点或应用程序关闭时将其设置回之前的设置。这确实运作良好,并且似乎不会干扰同时运行的其他基于音频的应用程序的工作(例如对录音音量非常敏感的语音识别软件)。

这与 Vista 和 Windows 7 的行为完全相同,只是它们负责维护每个应用程序的单独音量级别(在这种情况下,我们禁用了前面提到的代码)。

于 2009-09-18T14:18:46.800 回答