gpt4 book ai didi

swift - 如何在不加载完整缓冲区的情况下启动 AVAudioPlayer?

转载 作者:行者123 更新时间:2023-11-30 10:35:47 46 4
gpt4 key购买 nike

我想使用AVAudioPlayer来播放以前录制的文件。该录音工作正常,我将文件保存到临时目录中。

问题是,一旦我设置了 AVAudioPlayer,它就会开始缓冲,并且在完全缓冲之前不会开始播放该录音。现在它可以很好地处理大约 30 秒的录音,但我也希望它能够处理 1 小时长的录音。我说的是 > 1 分钟的等待。

如何强制 AVAudioPlayer 开始使用当前缓冲区播放?就像我可以用 player.automaticallyWaitsToMinimizeStalling = false 告诉 AVPlayer因为我预计不会出现任何停滞问题。

或者我如何从 AVPlayer 获得像averagePower()->Float 这样的东西?我无法使用 AVPlayer 因为我需要类似 AVAudioPlayerfuncaveragePower(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/

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