Play local audio file with AVAudioPlayer

自作多情 提交于 2019-11-28 04:01:04

问题


I'm testing my app in simulator.

I'm downloading file and getting it's local way like this one: file:///Users/administrator/Library/Developer/CoreSimulator/Devices/4CDF286B-543F-4137-B5E2-C312E19B992F/data/Containers/Data/Application/E5F13797-A6A8-48A1-B3C3-FBC3D7A03151/Documents/4d13e04980d3.mp3

Now I want to play this file with AVAudioPlayer but I'm always getting this error:

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

Code for playing:

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)
        }

How should I make it playing?


回答1:


Under iOS8, the path that you have saved won't be valid across launches. The id you see "E5F13797-A6A8-48A1-B3C3-FBC3D7A03151" will change with each launch.

The solution is to save the filename and not the complete path, and to recreate the URL or complete path, by getting the path to the Documents (or tmp) folder and appending the filename to it.




回答2:


Look at NSFileManager. The method URLForDirectory:inDomain:appropriateForURL:create:error: is what you should use.




回答3:


// 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)
    }



回答4:


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


来源:https://stackoverflow.com/questions/32278436/play-local-audio-file-with-avaudioplayer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!