2014-09-26 28 views
0

我在我的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

回答

0

嘗試設置音頻播放器的音量。你也可以檢查「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

0

被聲明爲保持較強的參考audioPlayer

@property (nonatomic) AVAudioPlayer *audioPlayer; 

,然後用self.audioPlayer無論你在哪裏使用audioPlayer

您的代碼存在的問題是,因爲您的audioPlayer只是該方法的局部變量,所以只要您的方法完成,它就會被ARC解除分配。保持一個強有力的引用都將保持audioPlayer對象和內存,你的聲音就會一直打你不叫

[self.audioPlayer stop];