AVAudioPlayerNode 使用 scheduleFile(不是 scheduleSegment)跳过播放

AVAudioPlayerNode skip play with scheduleFile (not scheduleSegment)

提问人:zak 提问时间:8/29/2023 更新时间:8/29/2023 访问量:21

问:

我有一种情况,我需要按顺序安排多个文件。我通过多次调用 scheduleFile 来做到这一点:

let node = AVAudioPlayerNode()

node.scheduleFile(theAudioFile1!, at: nil)
node.scheduleFile(theAudioFile2!, at: nil)
node.scheduleFile(theAudioFile3!, at: nil)
node.scheduleFile(theAudioFile4!, at: nil)

这适用于播放,所有四个文件都按顺序播放。但是,我需要添加一个“跳过”功能,按下按钮会将播放向前跳过 15 秒。我知道如何使用 scheduleSegment(如果我使用 scheduleSegment 来初始设置节点,而不是 scheduleFile),即:

node.scheduleSegment(theAudioFile!, startingFrame: theFramePostion, frameCount: AVAudioFrameCount(theAudioFile!.length), at: nil)

而 “theFramePosition” 是通过向 node.lastRenderTime 添加 15 秒来计算的

但是当我使用 scheduleFile 而不是 scheduleSegment 按顺序播放多个文件时,我不知道该怎么做。

我可以合并所有四个文件,然后使用该组合文件使用 scheduleSegment,但我不想这样做,因为合并文件需要很长时间。

有人可以提出解决方案吗?将不胜感激。

AVAudioPlayer AVAudioEngine AVAudioPlayer节点

评论


答: 暂无答案