2012-12-29 83 views
1

我正在處理小遊戲,並且遇到背景音樂問題。我用AVAudioPlayer來播放循環音樂。它看起來象下面這樣:如何正確處理AVAudioPlayer在objective-c

NSString *path = [[NSBundle mainBundle] pathForResource:@"background" ofType:@"ogg"]; 
NSError *error; 

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:path] error:&error]; 

NSLog(@"%@", [error description]); 

[player setNumberOfLoops:-1]; 
player.delegate = self; 
[player play]; 

我在Supproting Files文件background.oggbackground.mp3background.wav有沒有人玩。它有什麼問題?

當我使用NSLog打印描述的錯誤,我已經有了:

Error Domain=NSOSStatusErrorDomain Code=1954115647 "The operation couldn’t be completed. (OSStatus error 1954115647.)" 

請幫助。

+1

這是'kAudioFileUnsupportedFileTypeError'的代碼。但是iOS絕對可以播放MP3和WAV文件,最多不能處理OGG文件。我懷疑問題是你應該使用'[NSURL fileURLWithPath:]'而不是'URLWithString:',因爲文件路徑本身不是有效的URL。 – 2012-12-29 14:55:02

+0

@ H2CO3,'error =(null)'當我使用.mp3和'+ [NSURL fileURLWithPath:]'但仍然沒有聲音。 –

回答

-1

太容易了。還有一件事。當您使用例如NSTimer時,您必須在某個地方使用ivalidate。當你使用AVAudioPlayer你必須在stop它在某些地方。

[player stop]; 
+0

你在哪裏把你的代碼放在上面的位置? – ngb

+0

在你想停止音樂的地方。 –

0

有些時候,只是因爲你的音頻文件的質量不符合它所需要的,如採樣rate.Please檢查你的音頻採樣率是否大於24kHz時低。 我已經測試了一些音頻,而且我發現當音頻採樣率高於44kHz時,效果很好,但是如果它低於44kHz的高於22kHz的音頻,AudioToolbox無法播放聲音,而AVAudioPlayer可以工作有些時候。如果它低於22kHz,他們將無法播放這些音頻文件(這些音頻的文件格式,我測試只是「m4a」,「mp3」,「wav」)

順便說一下,如果你想將低採樣率的音頻轉換爲使用iTunes的44kHz「m4a」文件,但它也無法工作。不要浪費你的時間。