4

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

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

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

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

基本上我想为声音设置一个最大音量。如果系统音量高于此,它将以我预设的最大音量播放。但是如果系统音量低于这个值,它会根据系统音量降级。

像这样:

系统 = 1
-声音 = .3

系统 = .7
-声音 = .3

系统 = .3 -
声音 = .3

系统 = .2 -
声音 = .2

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

4

4 回答 4

1

我怀疑是这样(考虑如果用户在播放声音时更改系统音量会发生什么)。

您可能还希望使其可由用户设置。昂贵的耳机通常非常敏感(即响亮);如果刻度是线性的,我怀疑 0.1 响亮。

于 2012-09-22T22:44:10.733 回答
1

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

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

(值得注意的是,真正的全局“系统音量”并不存在。默认输出设备有两个,具体的输出设备数量不限,而且每个设备都有自己的音量。“系统音量”一般指的是默认输出设备的音量。)

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

于 2012-09-23T18:54:50.403 回答
1

不是对我原来的确切问题的答案,而是它导致的问题:将声音文件播放为尊重用户的“警报音量”和警报声音设备的“系统声音”:

http://iosdeveloperzone.com/2011/05/23/snippet-playing-a-system-sound/

// Required import... Also need AudioToolbox.framework
#import <AudioToolbox/AudioToolbox.h>

// ivar 
SystemSoundID mBeep;

// Create the sound ID
NSString* path = [[NSBundle mainBundle] 
                     pathForResource:@"Beep" ofType:@"aiff"];
NSURL* url = [NSURL fileURLWithPath:path];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &mBeep);

// Play the sound
AudioServicesPlaySystemSound(mBeep);

// Dispose of the sound
AudioServicesDisposeSystemSoundID(mBeep);
于 2012-09-26T23:37:20.887 回答
-1

无法设置系统音量。无论 Objective-c 允许您走多低的级别,您都只能设置相对音量级别。即使使用 coreaudio,您也只能设置相对级别。

GW

于 2012-09-23T01:06:32.203 回答