如何解决在xcode中播放音频的问题?
问题描述:
我在我的viewcontroller中有下面的代码。当我运行时,音频不会在xcode模拟器中播放。有关我应该做什么的建议?如何解决在xcode中播放音频的问题?
此外,我已将anomaly.mp3保存在与ViewController.m相同的目录(无子文件夹)中。
#import <AVFoundation/AVFoundation.h> //before viewDidLoad
NSError * error = nil;
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"anomaly"
ofType:@"mp3"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
if (error){
NSLog(@"error: %@", [error localizedDescription]);
}
NSLog(@"test");
[audioPlayer play];
答
尝试设置音频播放器的音量。你也可以检查“play”功能的结果,看看事情是否正常工作。播放函数隐式调用prepareToPlay。此功能可能无法出去的原因很多,恼人没有任何错误的对象或消息...
NSError * error = nil;
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"anomaly"
ofType:@"mp3"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
if (error){
NSLog(@"error: %@", [error localizedDescription]);
} else {
audioPlayer.volume = 50;
if([audioPlayer play]) NSLog(@"Should be playing");
else NSLog(@"Something weird happened"); //usually related to unavailable hardware
}
+0
谢谢!我在控制台中加入了这个和“应该玩”的显示。这太令人沮丧了!任何其他想法? – sharataka 2014-09-26 15:10:15
答
被声明为保持较强的参考audioPlayer
:
@property (nonatomic) AVAudioPlayer *audioPlayer;
,然后用self.audioPlayer
无论你在哪里使用audioPlayer
。
您的代码存在的问题是,因为您的audioPlayer
只是该方法的局部变量,所以只要您的方法完成,它就会被ARC解除分配。保持一个强有力的引用都将保持audioPlayer
对象和内存,你的声音就会一直打你不叫
[self.audioPlayer stop];
如果你使用'NSError'在'initWithContentOfURL:错误:'? 'url'是否为'nil'? – Larme 2014-09-26 14:28:29
将'NSError'传递给'AVAudioPlayer'的init,检查音频播放器是否已设置并检查传递的错误。将nil传递给错误绝不是一个好主意,因为那样你就不知道发生了什么。 – rckoenes 2014-09-26 14:28:56
我改变了代码并粘贴在上面。这是处理错误的正确方法吗?如果是这样,我没有收到控制台中的错误,但我看到来自nslog的测试... – sharataka 2014-09-26 14:41:28