如何使用带 Tone.Player 的音频缓冲区播放音调?

How to play a tone using an audiobuffer with Tone.Player?

使用 Tone.js 我可以使用以下代码播放声音

var player = new Tone.Player("./sounds/snare_drum.wav").toMaster();
player.autostart = true;

然而,当我尝试用音频缓冲器做同样的事情时,没有任何反应。

var player = new Tone.Player(buffers[i]).toMaster();
player.autostart = true;
console.log(buffers[i]);

console.log 确认有一个 AudioBuffer

AudioBuffer { sampleRate: 44100, length: 83771, duration: 1.8995691609977323, numberOfChannels: 1 }

根据 documentation,它应该能够使用 url 或 AudioBuffer。 我究竟做错了什么?谢谢。

根据文档

player.autostart = true;

加载文件或缓冲区后立即开始播放。可能如果在设置标志时加载已经完成,则它会被忽略并且不会自动开始播放。由于 AudioBuffer 几乎肯定已经加载到内存中,这可能是无法开始播放的原因。

您可以添加一个测试来检查音频流的状态:如果尚未加载,则将 autostart 设置为 true 并延迟启动(以避免启动尚未加载的流)。如果音频流已经加载,那么您可以安全地手动启动它。

if (!player.loaded)
    player.autostart = true;
else
    player.start();

我已经用 WAV 文件和 AudioBuffer 案例进行了快速测试,它似乎可以工作。不过不确定这是否是最佳解决方案。

希望这对您有所帮助 =)