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

问题描述 投票:1回答:1

使用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。我究竟做错了什么?谢谢。

javascript audio tone.js
1个回答
0
投票

根据文档

player.autostart = true;

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

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

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

我已经对WAV文件和AudioBuffer盒进行了快速测试,它似乎可以正常工作。不确定这是否是最好的解决方案。

希望这有帮助=)

© www.soinside.com 2019 - 2024. All rights reserved.