Tone.js:如何无缝循环播放声音?

时间:2019-09-24 16:59:31

标签: audio web-audio-api tone.js

我使用Tone.js在循环中运行了一个简短的,淡入淡出的环境声音剪辑。麻烦的是,在一次播放的结束与下一次播放的开始之间有一个听得见的间隙。

我知道可以使用音频精灵在Howler.js中实现无缝交叉渐变循环,但是我不确定如何在Tone.js中做到这一点(如果可能,我宁愿坚持使用该库)。< / p>

外面的人知道如何解决吗?

2 个答案:

答案 0 :(得分:1)

为避免循环音频中的不连续性,您需要使循环的结尾与循环的开头交叉淡入淡出。如果您的程序仅适用于一组固定的循环,则可以使用音频编辑器(如Audacity或DAW,如Pro Tools或Reaper)将交叉淡入淡出预先渲染到剪辑中。

如果您有一个需要处理用户提供的音频的通用应用程序,那么您将需要编写代码以将循环结束淡出与循环开始淡入混合。

答案 1 :(得分:1)

无缝循环播放MP3曲目很困难,但并非不可能。 MP3文件包含一个附加填充,该附加填充被解码器解码为音频数据。我建议使用以下两个选项之一来解决这些填充问题:

  1. 使用特殊软件准备无缝MP3循环。您可以在这里阅读有关此内容的更多信息:https://www.compuphase.com/mp3/mp3loops.htm

  2. 切换到其他格式:AAC(所有浏览器均提供最佳支持,但是填充可能仍然存在一些问题,可以克服),OPUS,OGG。在此处阅读更多信息:https://en.wikipedia.org/wiki/Gapless_playback#Prerequisites