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

Tone.js: How do I loop a sound seamlessly?

我有一个使用 Tone.js 循环播放的短的交叉淡入淡出的环境声音剪辑 运行。问题是,在一次播放结束和下一次播放开始之间有一段听得见的间隙。

我知道可以在 Howler.js 中使用音频精灵实现无缝交叉渐变循环,但我不确定如何在 Tone.js 中实现(我宁愿坚持这个如果可能的话图书馆)。

有人知道如何解决这个问题吗?

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

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

无缝循环播放 MP3 曲目很困难,但并非不可能。 MP3 文件包含额外的填充,解码器会将其解码为音频数据。我会推荐这两个选项之一来解决填充问题:

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

  2. 切换到不同的格式:AAC(在所有浏览器中最好的支持,但仍然可能存在一些填充问题,可以克服),OPUS,OGG。在这里阅读更多:https://en.wikipedia.org/wiki/Gapless_playback#Prerequisites