我的代码在iPad-4和iPhone 6+上完全适用于模拟器,所有这些都运行iOS 9.0.2。
然而,我知道这是一个奇怪的说法,在我的iPad Air 2上,看起来像它正在工作,但实际上什么都没有听到。还在其他设备上重现,如另一台iPhone 6+和另一台运行iOS 8.4的iPhone 6。我已经创建了一个演示项目(下面的链接),以便其他人可以尝试使用自己的设备。
我这样做:
NSURL *url
下的路径初始化[[NSBundle mainBundle] resourcePath]
:/var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My App.app/sndEfcts/!snap.mp3
将新对象分配到ivar:
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];
在调试器中测试网址 - 好! (请注意,该空间变为%20。我还验证了该文件存在):
(lldb) po audioPlayer.url
file:///var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My%20App.app/sndEfcts/!snap.mp3`
如果创建正常播放:
if (audioPlayer) {
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
__unused BOOL playOk = [audioPlayer play];
}
结束代表已激活:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
......并且旗帜说是! - 但没有听到任何消息:(
所以一切似乎都没问题,但仍然没有听到声音(虽然其他应用的其他声音确实可以正常工作)
有没有人知道这种行为的原因?
修改
我已创建simple project来演示。它发生在各种设备上,即使是8.4。在模拟器上它始终有效
答案 0 :(得分:5)
我找到了解决方案。
在有问题的设备上,“静音”处于打开状态,影响设备中部分的声音。为了防止这种情况,请在应用程序开头的某个地方调用它:
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
这将导致音频被视为播放,因此静音选项不会将其静音。
我了解到用户通常不知道在哪里可以找到静音开/关控制。在iPad Air 2上:从底部抬起下部窗格并按下扬声器图标。