解码音频并播放前奏然后循环播放

Decode audio and play intro then looped part

我有一首歌,包括前奏(I)、要循环的部分(L)和结尾(E)。我根本不想播放结尾,即音频文件歌曲 = I + L + E,播放的音频 = I + L + L + ...

我通过将介绍和循环分成两个文件成功做到了这一点,但我想在客户端做到这一点"on-the-fly"。

我该怎么做?

如果您想使用 Web Audio 播放文件(例如,使用 decodeAudioData() 解码为 AudioBuffer,然后使用 BufferSourceNodes 播放声音),那么通过将两个 BufferSource 节点指向具有不同偏移量的缓冲区很容易, 并循环第二个。

Web Audio 使用双精度数(不是浮点数)- 因此 "this is much more accurate than float seconds" 的说法通常不正确(双精度数大约有 15 位小数的精度)。 (当然,取决于绝对值。)它的准确性足以发挥样本准确性(即不会在值之间出现故障);不过,如果您担心的话,只需在它们之间交叉淡入淡出即可。

如果您的目标真的只是制作一个该部分循环播放的音频文件,那就有点不同了;但听起来你想要播放。

Web Audio API 正是为此提供了 AudioBufferSourceNode.loopStartAudioBufferSourceNode.loopEnd (source)。您还必须记住设置 AudioBufferSourceNode.loop = true