我有AVAudioPCMBuffer,我将其设置为AVAudioPlayerNode的源
internal func play() {
guard let buf = pcmBuf else {
logger?.log(severity: .error, msg: "Sound pcmBuf is nil.")
return
}
if !isPlaying {
player.scheduleBuffer(buf, at: nil, options: .loops)
player.play()
}
}用户可能会向前寻找,为了做到这一点,我需要偏移缓冲区并再次设置它,如下所示
internal func play() {
guard let buf = pcmBuf else {
logger?.log(severity: .error, msg: "Sound pcmBuf is nil.")
return
}
buf.offset = 10 // Eg: in sec
if !isPlaying {
player.scheduleBuffer(buf, at: nil, options: .loops)
player.play()
}
}因此,它看起来像是我设置了一个新的缓冲区,但是有了所需的偏移量,回放将从所需的点开始。
问题是没有offset方法...
该怎么做呢?
发布于 2021-11-02 22:31:22
我不认为你需要补偿缓冲区。您应该向您的play函数传递一个有效的第二个参数,而不是nil。
https://developer.apple.com/documentation/avfaudio/avaudioplayernode/1388422-schedulebuffer
“按照您指定的时间和播放选项安排音频缓冲区中的播放样本。”
所以传入一个有效的AVAudioTime。
https://developer.apple.com/documentation/avfaudio/avaudioplayernode#1669195
init(sampleTime: AVAudioFramePosition,
atRate sampleRate: Double)我猜这可能就是你想要的初始化器。
https://stackoverflow.com/questions/69737425
复制相似问题