音频在 iPhone 和模拟器上播放正常,但在 iPad 上被切断

Posted

技术标签:

【中文标题】音频在 iPhone 和模拟器上播放正常,但在 iPad 上被切断【英文标题】:Audio plays fine on iPhone and simulator but gets cut off on iPad 【发布时间】:2013-08-01 01:53:46 【问题描述】:

我正在制作一个用户可以按前进/后退按钮的应用。每次按下这些按钮时,任何当前正在播放的音频文件都会停止,并开始另一个音频文件。所有这些文件都不会循环。

我正在播放音频文件,代码类似于以下:

audioURL2 = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"sound2" ofType:@"aac"]];
            audio2 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL2 error:nil];
            [audio2 play];
            audio1 = nil;
            audio3 = nil;

我启用了 ARC,所以我没有明确发布音频文件。

在大多数情况下,上面的代码可以正常工作。我在我的 iPhone 设备、iPhone 或 iPad 模拟器上都没有遇到问题。我的 iPad 设备上的大部分音频也可以使用。

但是,其中一个音频文件无法完全播放,即使我在播放时避免触摸按钮也是如此。每次我在 iPad 上播放此音频文件时,我都能听到音频文件的开头,但随后在同一位置被切断。此问题仅出现在我的 iPad 上,不会出现在任何其他设备或模拟器上。

到目前为止,这是我尝试过的:

从 iPad 中删除了该应用程序。清理、重建并重新安装应用 重新启动 iPad 确保静音/软静音已关闭 切换静音/软静音几次,然后关闭静音 提高了 iPad 的音量

在尝试了上面的每一个之后,我发现同一个音频文件在同一个地方被截断了。

为什么会发生这种情况,并且只针对一个文件?我该如何解决?

更新

我尝试在标题中使用@property (strong, nonatomic) AVAudioPlayer *audio2;,然后尝试将“strong”替换为“retain”,但我仍然遇到同样的问题。

接下来,我在 play 调用之前卡住了audio2.numberOfLoops = 1;,看看会发生什么。有趣的是,audio2 确实重复了,但每个循环都在之前的截止点处结束。可能是在将 sound2 添加到 iPad 版本时出了点问题?

【问题讨论】:

它是旧的 iPad 1 吗?设备和模拟器的ios版本有什么区别? iPad 设备运行在 6.0.1,iPhone 设备运行在 5.1.1。两个模拟器都在 6.1 上。如果有帮助,我的部署目标是 5.0。 奇数。您是否确保在完成之前保留对 AVAudioPlayer 的引用? (有时 ARC 会清理没有强链接/引用的内容) 我如何确保我保留了参考?我不熟悉 ARC。 将其存储到类的(成员)变量中,一旦播放完成(或者如果视图消失),则将引用归零 【参考方案1】:

我的 sound2.aac 文件似乎以某种方式损坏了。我从我的应用程序中删除了文件并清理了项目。然后我重新保存了 .aac 文件,将这个新的 .aac 文件带入项目,并再次清理它。再次在我的 iPad 上运行后,sound2.aac 播放完毕。

【讨论】:

以上是关于音频在 iPhone 和模拟器上播放正常,但在 iPad 上被切断的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer 在模拟器中播放录制的音频,但不在手机上

视频不在设备上播放,但在播放 ov 模拟器

Unity - 音频文件在 iPhone 和 iPad 上播放不佳

如何在iphone中同时播放音频和视频

新版本的 Xcode 破坏了音频播放代码

为啥此音频单元 RemoteIO 初始化在 iPhone 上有效,但在模拟器中无效?