objective-c – 如何用 – [NSSound setVolume:]设置绝对音量?与系统容量无关?

我有一个警报声.我从不希望它“大声”和惊人,所以我通过[NSSound setVolume]将它减少到一个不大声的可听音量.

但似乎音量是相对于当前系统音量设置的.因此,如果我针对max-system-volume的情况减少它,我在低系统容量的情况下听不到它.

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

当系统设置为满音量时听起来很棒.但如果系统音量为1/3,则根本听不见.

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

像这样:

系统= 1
 -Sound = .3

系统= .7
 -Sound = .3

系统= .3
 -Sound = .3

系统= .2
 -Sound = .2

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

最佳答案 NSSound的音量对应于您在QuickTime播放器,iTunes等中看到的音量滑块.它是特定声音的音量,与系统音量相关的和(如您所见)分开.

您可以通过查询Audio Hardware API来获取当前系统卷.获取默认声音输出设备,然后获取其音量.然后,您可以查看它是否高于或低于您想要的音量级别.

(值得注意的是,实际上没有一个全局“系统卷”.有两个默认输出设备和任意数量的具体输出设备,每个都有自己的卷.“系统卷”通常是指默认输出设备的音量.)

但请注意,这不是系统上任何其他应用程序的工作方式,因此这种行为对用户来说似乎是不可预测的.预计错误报告的行为“当系统音量超过一定水平时,音量滑块不起作用”.

点赞