AVAudioPlayer 无法在某些设备上播放
AVAudioPlayer not playing on some devices
我的代码在模拟器、iPad-4 和 iPhone 6+、所有 运行 iOS 9.0.2.[=18= 上运行完美]
然而,我知道这是一个奇怪的说法,在我的 iPad Air 2 上它 看起来 它在工作,但实际上什么也听不见。也在其他设备上转载,例如另一个 iPhone 6+ 和另一个 iPhone 6 运行 iOS 8.4。我已经创建了一个演示项目(下面的link)以便其他人可以尝试他们自己的设备。
我正在这样做:
- 正在用
[[NSBundle mainBundle] resourcePath]
下的路径初始化 NSURL *url
:
/var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My App.app/sndEfcts/!snap.mp3
正在将新对象分配给 ivar:
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];
在调试器中测试 url - 很好! (注意 space 变成了 %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 上也是如此。在模拟器上它总是工作
我找到了解决办法。
在有问题的设备上,"mute" 处于打开状态,影响了设备中一些 的声音。为防止出现这种情况,请在您的应用程序开头的某处调用它:
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
这将导致音频被视为播放,因此不会被静音选项静音。
我了解到用户通常不知道在哪里可以找到静音 on/off 控件。在 iPad Air 2 上:从底部抬起下面板并按下扬声器图标。
我的代码在模拟器、iPad-4 和 iPhone 6+、所有 运行 iOS 9.0.2.[=18= 上运行完美]
然而,我知道这是一个奇怪的说法,在我的 iPad Air 2 上它 看起来 它在工作,但实际上什么也听不见。也在其他设备上转载,例如另一个 iPhone 6+ 和另一个 iPhone 6 运行 iOS 8.4。我已经创建了一个演示项目(下面的link)以便其他人可以尝试他们自己的设备。
我正在这样做:
- 正在用
[[NSBundle mainBundle] resourcePath]
下的路径初始化NSURL *url
:
/var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My App.app/sndEfcts/!snap.mp3
正在将新对象分配给 ivar:
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];
在调试器中测试 url - 很好! (注意 space 变成了 %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 上也是如此。在模拟器上它总是工作
我找到了解决办法。
在有问题的设备上,"mute" 处于打开状态,影响了设备中一些 的声音。为防止出现这种情况,请在您的应用程序开头的某处调用它:
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
这将导致音频被视为播放,因此不会被静音选项静音。
我了解到用户通常不知道在哪里可以找到静音 on/off 控件。在 iPad Air 2 上:从底部抬起下面板并按下扬声器图标。