使用AVAudioPlayer播放本地音频文件

时间:2015-08-28 19:23:12

标签: swift file audio local avaudioplayer

我正在模拟器中测试我的应用。

我正在下载文件并按照以下方式获取本地方式: file:///Users/administrator/Library/Developer/CoreSimulator/Devices/4CDF286B-543F-4137-B5E2-C312E19B992F/data/Containers/Data/Application/E5F13797-A6A8-48A1-B3C3-FBC3D7A03151/Documents/4d13e04980d3.mp3

现在我想用AVAudioPlayer播放这个文件,但我总是收到这个错误:

file:///
Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"

播放代码:

var alertSound = NSURL(fileURLWithPath: "file:///Users/administrator/Library/Developer/CoreSimulator/Devices/4CDF286B-543F-4137-B5E2-C312E19B992F/data/Containers/Data/Application/E5F13797-A6A8-48A1-B3C3-FBC3D7A03151/Documents/4d13e04980d3.mp3")
        print(alertSound)

        var error:NSError?
        do {
            try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
            audioPlayer.prepareToPlay()
            audioPlayer.play()
        } catch {
            print(error)
        }

我应该怎么玩?

4 个答案:

答案 0 :(得分:14)

在iOS8下,您保存的路径在启动时无效。您看到的ID“E5F13797-A6A8-48A1-B3C3-FBC3D7A03151”将随每次发布而变化。

解决方案是保存文件名而不是完整路径,并通过获取Documents(或tmp)文件夹的路径并将文件名附加到其中来重新创建URL或完整路径。

答案 1 :(得分:1)

查看NSFileManager。方法URLForDirectory:inDomain:appropriateForURL:create:error:就是您应该使用的方法。

答案 2 :(得分:0)

// create the soundFileURL for the word
        let toAppendString = "\(String)" //
        let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
        soundFileURL = documentsDirectory.URLByAppendingPathComponent(toAppendString)

    do {
    self.player = try AVAudioPlayer(contentsOfURL: soundFileURL)
        player.prepareToPlay()
        player.volume = 1.0
        player.play()

    } catch let error as NSError {
        print(error)
    }

答案 3 :(得分:0)

            let fileName = ("FILE_NAME.mp3")
        let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
        let soundFileURL = documentsDirectory.URLByAppendingPathComponent(fileName)
        AudioCenter.player.playURL(soundFileURL)