如何使用 -[NSSound setVolume:] 设置绝对音量?与系统体积无关?

cks*_*ubs 5 macos cocoa objective-c

我有警报声。我从来不希望它变得“响亮”和令人吃惊,所以我通过 [NSSound setVolume] 将其降低到一个不响亮的可听音量。

但似乎音量是相对于当前系统音量设置的。因此,如果我在最大系统音量情况下减小它,则在低系统音量情况下我听不到它。

如果我使用:[sound setVolume:0.1];

当系统设置为最大音量时,这听起来很棒。但如果系统音量为1/3,则根本听不到。

基本上我想设置声音的最大音量。如果系统音量高于该音量,它将以我预设的最大音量播放。但如果系统音量低于该值,则它会根据系统音量而降级。

像这样:

系统 = 1
-声音 = .3

系统 = .7
-声音 = .3

系统 = .3
-声音 = .3

系统 = .2
-声音 = .2

执行此操作的唯一方法是手动检查系统音量并相应地设置我的声音吗?

Pet*_*sey 1

NSSound 的音量对应于您在 QuickTime Player、iTunes 等中看到的音量滑块。它是特定声音的音量,独立于系统音量并且(如您所见)从属于系统音量。

\n\n

您可以通过查询音频硬件API来获取当前系统音量。获取默认的声音输出设备,然后获取其音量。然后您可以查看它是否高于或低于您所需的音量水平。

\n\n

(值得注意的是,实际上并不存在一个全局 \xe2\x80\x9c 系统卷\xe2\x80\x9d。有两个默认输出设备和任意数量的具体输出设备,并且每个设备都有自己的卷。 xe2\x80\x9c系统音量\xe2\x80\x9d一般指默认输出设备的音量。)

\n\n

但请注意,这不是系统上任何其他应用程序的工作方式,因此这种行为对于用户来说似乎是不可预测的。预计错误报告类似于\xe2\x80\x9c,当系统音量高于特定级别\xe2\x80\x9d 时,音量滑块不起作用。

\n