我正在研究一個需要使用AVFoundation
框架播放一些聲音的iOS應用程序。在Xcode 4的工作空間結構,包含兩個項目:AVAudioPlayer不播放任何聲音
- 工作區
- 應用程序本身(主體工程)
- 一個實用程序庫
建立實用程序庫後,導致在主應用程序中使用靜態庫作爲框架。
因此,當試圖通過使用下面的代碼在主應用程序內播放聲音時,它按預期工作。
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *path = [NSString stringWithFormat:@"%@/sound.mp3", resourcePath];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&error];
[audioPlayer play];
相反,試圖精確地發揮效用庫中相同的聲音(或任何其他)使用與上述相同的代碼的時候,沒有任何聲音都玩過,即使錯誤是零和audioPlayer屬性值是正確的(通道數量,持續時間)。
我確定AVFoundation
框架在兩個項目中。
而且,我的類使用AVAudioPlayerDelegate
協議,實現了這兩種方法:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;
這些方法都試圖播放聲音後調用。
如果我使用AudioToolbox
框架來代替,那麼它會播放聲音。但我有興趣使用AVFoundation
有幾個原因。
有什麼想法發生了什麼?我是否錯過了AVFoundation
?它可能與在靜態庫中使用AVAudioPlayer
有關嗎?
在此先感謝。
你能告訴我們什麼是錯誤變量輸出? AVAudioPlayer * audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; –
@Maudicus,正如我所說,播放聲音後錯誤爲零。我找到了解決方案,它與我沒有提及但沒有考慮的事情有關:我正在編譯ARC。 ARC向音頻播放器插入一個釋放調用,所以在離開創建它的方法之後,釋放調用被解除分配,如[在這裏]解釋的那樣(http://stackoverflow.com/questions/7692866/avaudioplayer-stops-playing-immediately -with-arc) – msoler
對不起,我複製了你的代碼,它工作。錯過了關於錯誤的陳述是零。我很高興它解決了 –