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)
好吧,补充一下 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 的音效播放器。