音频在 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 在模拟器中播放录制的音频,但不在手机上