控制 Windows 音量

Posted

技术标签:

【中文标题】控制 Windows 音量【英文标题】:Control Windows sound volume 【发布时间】:2009-09-18 13:20:18 【问题描述】:

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

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

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

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

【问题讨论】:

您的应用是用什么语言编写的? C#/.Net? 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

谢谢约翰。但是,如果您的应用程序播放语音,而另一个应用程序具有焦点,会发生什么情况?在那一刻,音量是下降还是上升? 在我们的情况下,当焦点改变时音量会下降/增加。正如您所建议的,在这种情况下增加音量同时保持其他应用程序音量的唯一方法是增加基础音频数据的音量。 Vista 声音架构在这方面向前迈出了一大步。

以上是关于控制 Windows 音量的主要内容,如果未能解决你的问题,请参考以下文章

从 PHP 或 Web UI 控制 Windows 音量

如何创建一个有边框但没有标题栏的表单? (如 Windows 7 上的音量控制)

控制音量混合器

如何在windows10实现键盘控制音量快捷键 - F12增大音量F11减低音量F10静音 - 使用微软官方的PowerToys实用工具中的Keyboard Manager自定义快捷键

如何在Windows 7/8/10中使用热键来调整音量?

Windows Vista/7 上的 SDL_Mixer MIDI 音量问题