2009-08-04 114 views
1

我正在編寫一個應用程序,其中的一部分是使用AVAudioRecorder和AVAudioPlayer類錄製和播放聲音。我如下設置聲音文件。聲音在設備中不起作用

NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; 
resourcePath = [resourcePath stringByAppendingString:@"/sound.caf"];  
self.soundFileURL = [NSURL fileURLWithPath:resourcePath]; 

當我運行在模擬器的應用程序,它的工作原理fine.However當我的應用程序下載到設備不work.Does人有任何想法的問題可能是什麼。


喂庫布。我試着用你的答案。但沒有聲音在設備上。它在模擬器中工作。當我在分配設備中測試時,我收到了崩潰報告「unknown kernal [0]:錯誤:AMC重置[非致命錯誤]:無法鎖定BSU」

回答

1

我不認爲你可以寫入resourcePath on該設備,它受到保護。查找應用程序的文件目錄,並寫在某處:

NSArray *filePaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *recordingDirectory = [filePaths objectAtIndex: 0]; 
NSString *resourcePath = [recordingDirectory stringByAppendingString:@"/sound.caf"]; 
self.soundFileURL = [NSURL fileURLWithPath:resourcePath]; 
0

有沒有可能是你做,我做了第一次我試圖讓聲音在iPhone上運行同樣的事情?聲音是否靜音?

另一種可能性:

我已經發現包內的文件名是大小寫敏感的模擬設備上,但不是。 (或者更加區分大小寫 - 我沒有試驗每種方法到底起什麼作用)。因此,如果文件上出現錯誤,它可能只是在模擬器上滑動,但是在返回時返回nil而不是文件在設備上運行。

我知道,這聽起來很奇怪,但我只是在我自己的項目中證實了它。嘗試拍攝一個您知道正確加載的文件,更改文件名的大小寫,並查看它在設備上的工作原理。 - 澄清 - 更改您檢索文件的名稱的大小寫,以使其不再與包中的文件名匹配。

這並不意味着這是你的問題,而是需要注意的一點。

+0

試過上面的解決方案。然後在模擬器中發生同樣的事情,在設備中沒有聲音。任何其他的選擇? – diana 2009-08-05 09:33:51

0

我剛剛回顧了一些我的代碼。匹配你的意圖,我想出了:

NSString *soundName = @"sound"; // without extension -- mimicing your naming 
NSString *resourcePath = [[NSBundle mainBundle] pathForResource: soundName ofType: @"caf"]] 
self.soundFileURL = [NSURL fileURLWithPath:resourcePath]; 

這是否工作?

0

確保您的設備未處於靜音模式。短音在靜音模式下不起作用。

0

我有同樣的問題,我添加Audiosession然後它工作正常。

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

希望這會起作用。