gpt4 book ai didi

swift - 使用 AVAudioPlayer swift 播放音频文件

转载 作者:行者123 更新时间:2023-11-30 12:54:05 33 4
gpt4 key购买 nike

我首先下载音频消息,然后使用 Avaudioplayer 播放它

downloadTask = NSURLSession.sharedSession().downloadTaskWithURL(urlStr, completionHandler: { (URL, response, error) -> Void in

self.play(URL!)


})
downloadTask

这工作正常,但如果我在保存我存储在 NSUserDefaults 中的响应 URL 后调用 play(URL) 方法。两种情况下的 URL 相同。我已经查过了。它是这样的:

file:///Users/mymac/Library/Developer/CoreSimulator/Devices/X-CD91-XXXXXXX-XXX-XXXXXX/data/Containers/Data/Application/XXXXXXX-XXXX-XXXXXXXXXX/tmp/CFNetworkDownload_InUTA3.tmp

将此文件 URL 传递至:

func play(url : NSURL) {

do {
player = try AVAudioPlayer(contentsOfURL: url)
player.prepareToPlay()
player.play()

} catch let error as NSError {
//self.player = nil
print(error.localizedDescription)

} catch {

print("AVAudioPlayer init failed")
}

}

Url路径相同,但audioPlayer无法播放声音,显示以下错误:

The operation couldn’t be completed. (OSStatus error 2003334207.)

有人可以在这方面指导我吗?

谢谢。

最佳答案

从上面的注释可以看出,问题是在完成 downloadTask 方法的 completionHandler 之前,下载的文件没有被移动。

正如 description 中所述location 参数

The location of a temporary file where the server’s response is stored. You must move this file or open it for reading before your completion handler returns. Otherwise, the file is deleted, and the data is lost.

因此,在 completionHandler 中,您必须在结束 completionHandler 之前将文件移动到您控制的另一个位置。

这可能也解释了崩溃的原因。如果“temp”URL 保存到 completionHandler 中的 UserDefaults,则当 completionHandler 完成时,该 URL 不再有效。所以当你稍后打电话时

play(URL!)

如果强制解包的 URL 现在无效,则会发生崩溃。

因此,作为额外的安全措施,请在尝试使用 URL 之前尝试对其进行解包:

if let url = urlFromUserDefaults {
play(url)
}

希望对您有帮助。

关于swift - 使用 AVAudioPlayer swift 播放音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40627382/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com