我想使用AVAudioPlayer
来播放以前录制的文件。该录音工作正常,我将文件保存到临时目录中。
问题是,一旦我设置了 AVAudioPlayer
,它就会开始缓冲,并且在完全缓冲
之前不会开始播放该录音。现在它可以很好地处理大约 30 秒的录音,但我也希望它能够处理 1 小时长的录音。我说的是 > 1 分钟的等待。
如何强制 AVAudioPlayer 开始使用当前缓冲区播放?
就像我可以用 player.automaticallyWaitsToMinimizeStalling = false
告诉 AVPlayer
因为我预计不会出现任何停滞问题。
或者我如何从 AVPlayer 获得像averagePower()->Float 这样的东西?
我无法使用 AVPlayer
因为我需要类似 AVAudioPlayer
的 funcaveragePower(forChannel channelNumber: Int) -> Float
来显示可视化演示的录音。如果你知道如何从 AVPlayer、-Item、-Asset 或 -Track 获取这些 AveragePower 值,那也很好,我找不到任何合适的东西。
最佳答案
我发现,如果你使用AVAudioPlayer
但在另一个线程上调用player.play()
,它不会等待缓冲区并立即开始播放。
DispatchQueue.global(qos: .background).async {
self.player.play()
}
但这有一些限制,因为现在我不能使用player.play(at: TimeInverval),因为这似乎会中断构建缓冲区,然后文件将不会播放到它的位置完整的持续时间。 我通过在player.play()之前设置player.currentTime来解决这个问题,这不会打扰缓冲区。
关于swift - 如何在不加载完整缓冲区的情况下启动 AVAudioPlayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58064919/