如何解决在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]; 
+0

如果你使用'NSError'在'initWithContentOfURL:错误:'? 'url'是否为'nil'? – Larme 2014-09-26 14:28:29

+1

将'NSError'传递给'AVAudioPlayer'的init,检查音频播放器是否已设置并检查传递的错误。将nil传递给错误绝不是一个好主意,因为那样你就不知道发生了什么。 – rckoenes 2014-09-26 14:28:56

+0

我改变了代码并粘贴在上面。这是处理错误的正确方法吗?如果是这样,我没有收到控制台中的错误,但我看到来自nslog的测试... – sharataka 2014-09-26 14:41:28

尝试设置音频播放器的音量。你也可以检查“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];