2015-04-22 42 views
2

因此,我創建了一個iPhone應用程序,可以在Swift中下載聲音文件,並且我有一個問題。使用Xcode和iOS模擬器,我可以成功地將我需要的音頻文件下載到模擬器上。我發現下載的文件在我的OSx機器上的這個目錄中:如何訪問Swift應用程序中的聲音文件

OS X - > Users - >「My name」 - > Library - > Developer - > CoreSimulator - > Devices - > 96CDD ... - > data - > 6B742 ... - > Documents

現在我的問題是,我知道我有應用程序內的設備上的音頻文件,但我如何訪問它們,然後從應用程序本身播放它們?我正在嘗試使用AVAudioPlayer,但是我在訪問該文件時沒有成功。下面是我試圖運行的是viewDidLoad中功能的內部代碼:

var playYoda = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Documents/do_or_do_not", ofType: "wav")!) 
    println(playYoda) 

    AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil) 
    AVAudioSession.sharedInstance().setActive(true, error: nil) 

    var error:NSError? 
    audioPlayer = AVAudioPlayer(contentsOfURL: playYoda, error: &error) 
    audioPlayer.prepareToPlay() 
    audioPlayer.play() 

我所有的代碼編譯,但是當我啓動模擬器,我得到這個錯誤:致命錯誤:意外發現零,同時展開一個可選值在我鏈接的第一行代碼(var playYoda = ...)。

我不知道這是否是因爲我的路徑對音頻文件錯誤,或者如果我在AVAudioPlayer上做錯了什麼。任何幫助,將不勝感激。

回答

2

如何像:

let fileManager = NSFileManager.defaultManager() 

let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 

if let documentDirectoryURL: NSURL = urls.first as? NSURL { 
    let playYoda = documentDirectoryURL.URLByAppendingPathComponent("do_or_do_not.wav") 

    println("playYoda is \(playYoda)") 
} 
+0

所以URL快到了正確的文件路徑,但我會怎麼用內AVAudioPlayer這個新的URL播放的文件? – t33j4y

+0

和以前一樣:'audioPlayer = AVAudioPlayer(contentsOfURL:playYoda,error:&error)' –

+0

非常感謝。這對我很有幫助 – Alexander

2

這裏是你可以做些什麼:

打開你的Xcode項目,在項目導航器中選擇您的音頻文件,並點擊刪除(確保移動他們垃圾,而不是隻刪除參考)。

然後進入文件>添加文件到「您的應用程序」。

選中要導入的音頻文件,並確保選中默認值(「需要時複製項目」,「創建組」和「添加文件到目標:您的應用程序」)。

對於文件路徑寫:

 
var playYoda = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("do_or_do_not", ofType: "wav")!) 
相關問題