2009-08-10 35 views
0

我試圖得到一個簡單的按鈕來播放聲音:爲什麼使用AVAudioPlayer播放.wav掛我的iPhone模擬器?

-(IBAction)myButton:(id)sender { 
    NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:@"whistle" ofType:@"wav"]; 
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:audioFilePath] error:NULL]; 
    [audioPlayer play];  
} 

使用調試器,調用「播放」永遠不會返回。沒有聲音播放。該按鈕保持突出顯示狀態,直到我點擊主頁按鈕退出應用程序。

從我使用'2.2版(77.4.9)'的模擬器的菜單。

-Bill

+0

這是否發生在3.0?它發生在設備上嗎?如果你不調試呢?這是否與其他音頻文件發生? – 2009-08-10 08:24:39

+0

同樣的行爲,如果我不調試。與其他音頻文件的行爲相同。 我找不到以前使用的課程(只能使用有限數量的格式,只能使用簡短的聲音等),但是我使用該方法。缺點是我無法開始和停止我的聲音,所以我搜索後,我知道這是更好的方法。 – Bill 2009-08-10 16:28:51

+0

「同樣的行爲,如果我不調試」 - >掛着突出顯示的buton,對吧? 你在調試時怎麼樣?它會播放聲音,然後不再強調按鈕嗎? – mahboudz 2009-08-10 17:48:35

回答

0

難道這是一個糟糕的聲音文件嗎?如果您不用-play調用-prepareToPlay,會發生什麼情況?

+0

同樣的行爲。雙擊Xcode中的.wav文件會導致它在iTunes中播放。 – Bill 2009-08-10 16:31:42

+0

我剛剛嘗試過您的代碼,並且它在從Xcode的基於視圖的應用程序模板製作的示例應用程序中正常工作。 現在,你沒有發佈audioPlayer嗎?唯一可以安全地發佈它的地方是在AVAudioPlayer的回調中或當你的應用程序正在退出時(當你知道聲音已經播放時,實際上它可以安全地釋放它)。 -autorelease具有相同的問題,因爲在runloop完成且autorelease池已發佈後,您的聲音將播放。 – mahboudz 2009-08-11 09:16:45

+0

如果你沒有發佈,我會檢查的另一個地方是註釋[audioPlayer play]是否仍然會掛起你的應用程序。 由於播放會將實際播放排隊等候,並且幾乎立即返回,所以您可能會讓其他應用程序處於奇怪狀態。 – mahboudz 2009-08-11 09:18:04

0

我不知道它是否是同樣的問題,但AVAudioPlayer也導致我的2.2.x模擬器崩潰。就我而言,事實證明/ Library/QuickTime /(特別是DivX Decoder.component)中的插件與模擬器混淆了。我只是暫時將文件移動到我的桌面,然後模擬器開始爲我工作。

相關問題