PlaySystemSound静音开启

sam*_*tte 8 iphone audio audiosession

我知道,我必须将其设置AudioSession为"播放"类别,即使静音开关打开也允许音频.这就是我的工作,但开关打开时声音仍然静音.

 UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
 AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);

 SystemSoundID soundID;
 NSString *path = [[NSBundle mainBundle] pathForResource:soundString ofType:@"wav"];    

 AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
 AudioServicesPlaySystemSound (soundID);
Run Code Online (Sandbox Code Playgroud)


编辑:顺便说一句,该应用程序是一个声音垫.播放声音是该应用程序的唯一目的.以下是Apple Doc对此的说法:

将此类别用于音频播放最重要的应用程序.即使屏幕已锁定且Ring/Silent开关设置为静音,您的音频也会播放.


编辑2:打开静音开关,声音甚至无法通过耳机播放.我知道用户是王道.我知道静音开关有它的用途.这不是问题.我试图得到一个答案,即将AudioSession类别设置为kAudioSessionCategory_MediaPlayback没有预期的结果.


编辑3:按照Jonathan Watmough的建议,我设置了AudioServices kAudioServicesPropertyIsUISound房产,但仍然没有运气.我错过了什么吗?

// set the session property
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);

// creates soundID
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle] pathForResource:soundString ofType:@"wav"];    
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);

// Jonathan Watmough suggestion
UInt32 flag = 0;
AudioServicesSetProperty(kAudioServicesPropertyIsUISound, sizeof(UInt32), &soundID, sizeof(UInt32), &flag);

AudioServicesPlaySystemSound (soundID);
Run Code Online (Sandbox Code Playgroud)

sam*_*tte 4

好吧,补充一下 Jonathan Watmough 的答案,实际上似乎不可能让 AudioServicesSystemSound 覆盖静音开关。我最终做的是使用 OpenAL 来播放声音,它将按照您指定的音频会话类别正常播放。以下是我设置音频会话的方法:

AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);
AudioSessionSetActive(YES);
Run Code Online (Sandbox Code Playgroud)

为了播放声音,我使用了Finch,这是一个用于 iPhone 的简单的基于 OpenAL 的音效播放器。