如何从解析swift中检索音频文件

Posted

技术标签:

【中文标题】如何从解析swift中检索音频文件【英文标题】:how to retrieve audio file from parse swift 【发布时间】:2016-01-12 21:37:53 【问题描述】:

我已成功将音频文件保存到 Parse,但我正在努力再次下载。我无法确定与 getDataInBackgroundWithBlock 一起使用的块应该是什么。以及如何实际保存文件。非常感谢任何帮助!

let query = PFQuery(className: "wordRecordings")
query.whereKey("wordName", equalTo: "\(joinedWord)")

query.findObjectsInBackgroundWithBlock  (objects:[PFObject]?, error:NSError?) -> Void in

    if error == nil                        
       for object in objects! 
            let audioFile = object["audioFile"] as! PFFile
            audioFile.getDataInBackgroundWithBlock (audioFile: NSData, error:NSError?) -> Void in // THIS BLOCK ISNT CORRECT...
               if error == nil 
               let audioFile = AudioFile(data: audioFile) // THIS WORKS FOR IMAGES BUT NOT AUDIO - HOW DO I CREATE AN AUDIO FILE
               
              
             
             else    
               print("Error: \(error!) \(error!.userInfo)")
           
         

感谢@David,下面是一个带有路径代码的有效解决方案。

let fileString = "\(fileName)"
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let path = documentsDirectory.URLByAppendingPathComponent(fileString)

audioFile.getDataInBackgroundWithBlock  (audioFile:NSData?, error:NSError?) -> Void in
         if error == nil 
           audioFile.writeToURL(path, atomically: true)
          else 
         print("error with getData")
         
  

【问题讨论】:

取决于你想对音频文件做什么——例如,如果你想播放音频,你可以直接实例化你的AVAudioPlayerNSData(甚至使用@ 987654325@ 和 PFFileurl 和数据流 - 请注意 AVAudioPlayer 不支持远程流的事实)。如果要保存音频文件,可以使用NSDatawriteToFile:atomically:。让我知道它是否有帮助或您需要其他东西。 嗨,大卫,非常感谢您查看此内容。我将如何快速写入文件? 【参考方案1】:

查看官方documentation 应该是这样的(我不使用 Swift 所以请多多包涵):

audioFile.getDataInBackgroundWithBlock (audioFile: NSData?, error:NSError?) -> Void in
    if error == nil 
        let path = "path-to-your-file"
        if !audioFile.writeToFile(path, atomically: true)
            print("Error saving")
        
    

我建议您阅读一些教程(例如here),在那里您可能会获得更好的 Swift 文件处理示例。

更新

显然,块的两个参数都必须是可选的(请参阅here)。您的结果块必须是 (audioFile: NSData?, error: NSError?)

类型

【讨论】:

嗨 - 我根据您建议的教程尝试了 writeToURL,但 PFDataResultBlock 仍然不正确。我尝试了无数的想法,但仍然卡住了!有什么想法吗? hm,显然块的两个参数都必须是可选的(参见here)。尝试将您的结果块设为(audioFile: NSData?, error: NSError?) 类型。有效吗? 确实如此!我刚刚在 Parse 文档中也发现了这一点!我一定是整天闭着眼睛!我已更新我的问题以包含答案。非常感谢您的帮助!

以上是关于如何从解析swift中检索音频文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 中的音频剪辑中检索 PCM 样本数据?

如何从 Swift 中的输入音频文件生成相位反转音频文件?

如何从 Swift 文件管理器播放音频文件?

如何在 swift 5.3 中从 m4a 音频文件中获取 Track Id

ios swift 2 解析中的流式音频

如何在 iOS 中使用 swift 共享远程音频文件