【发布时间】:2017-07-13 02:13:58
【问题描述】:
我有一首歌曲,由前奏 (I)、要循环的部分 (L) 和结尾 (E) 组成。我根本不想播放结局,即音频文件歌曲 = I + L + E,播放的音频 = I + L + L + ...
我通过将介绍和循环分成两个文件成功地做到了这一点,但我想在客户端“即时”执行此操作。
我该怎么做?
【问题讨论】:
我有一首歌曲,由前奏 (I)、要循环的部分 (L) 和结尾 (E) 组成。我根本不想播放结局,即音频文件歌曲 = I + L + E,播放的音频 = I + L + L + ...
我通过将介绍和循环分成两个文件成功地做到了这一点,但我想在客户端“即时”执行此操作。
我该怎么做?
【问题讨论】:
Web Audio API 正是为此提供了AudioBufferSourceNode.loopStart 和AudioBufferSourceNode.loopEnd (source)。您还必须记住设置AudioBufferSourceNode.loop = true。
【讨论】:
如果您想使用 Web Audio 播放文件(例如,使用 decodeAudioData() 解码为 AudioBuffer,然后使用 BufferSourceNodes 播放声音),那么通过将两个 BufferSource Nodes 指向具有不同偏移量的缓冲区很容易,并且循环第二个。
Web Audio 使用双精度数(不是浮点数) - 因此“这比浮点秒数更准确”的说法通常不正确(双精度数大约有 15 个小数位)。 (当然,取决于绝对值。)使用采样精度(即不会在值之间出现故障)已经足够准确了;但是,如果您担心,只需在它们之间进行淡入淡出即可。
如果您的目标真的只是制作一个循环播放该部分的音频文件,那就有点不同了;但听起来你想要播放。
【讨论】: