将音频文件下载到文件管理器需要从本地路径播放

Posted

技术标签:

【中文标题】将音频文件下载到文件管理器需要从本地路径播放【英文标题】:Downloaded an Audio file into File Manager need to play it from local path 【发布时间】:2019-02-05 22:32:41 【问题描述】:

我正在使用音频播放器应用程序,并且我有一个离线下载选项,当用户单击下载按钮时,它应该开始下载并将其保存到本地。我已经使用文件管理器 URLSession 保存了它。

我尝试过获取和分离目标网址。我正在使用点唱机第三方播放歌曲。示例文件位置是

file:///var/mobile/Containers/Data/Application/BBB9AF1C-D87C-4C40-9F29-AD89062A20E2/Documents/05-KARMA-YOGA.mp3

if let audioUrl = URL(string: audioTobedownloaded) 
            // then lets create your document folder url
            let documentsDirectoryURL =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
            // lets create your destination file url
            let destinationUrl = documentsDirectoryURL.appendingPathComponent(audioUrl.lastPathComponent)
            print(destinationUrl)

真正的问题是我应该如何播放我在文件管理器中下载的音频。

【问题讨论】:

AVAudioPlayer 有一个函数,你可以将文件路径传递给 【参考方案1】:
func findFilesWith(extensionType: String) -> [URL]
        var matches = [URL]()
        let fileManager = FileManager.default

        let files = fileManager.enumerator(atPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
        // *** this section here adds all files with the chosen extension to an array ***
        for item in files!
        
            let fileURL = item as! URL

            if (fileURL.pathExtension == extensionType)
            
                matches.append(fileURL)
            
        
        return matches
    

您可以使用此方法获取各种扩展名类型的文件。

在你的情况下使用 mp3 作为扩展类型

尝试以下方法从获取的 url 播放音频

func play(url:URL) 
        print("playing \(url)")

        do 
            let player = try AVAudioPlayer(contentsOf: url)
            player.prepareToPlay()
            player.volume = 1.0
            player.play()
         catch let error as NSError 
            print(error.localizedDescription)
         catch 
            print("AVAudioPlayer init failed")
        

    

【讨论】:

以上是关于将音频文件下载到文件管理器需要从本地路径播放的主要内容,如果未能解决你的问题,请参考以下文章

在 Discord bot 中播放本地音频文件的问题

哪个 iOS 音频 API 设计用于以低延迟从磁盘流式传输大型本地音频文件?

如何从本地文件播放音频?

将变量从 PHP/MySQL 传递给 actionscript 以播放音频文件

如何在 html 音频控制中播放本地文件夹中的音乐? [复制]

[Flutter] 音频播放插件 audioplayers 的一个路径坑