Javascript 不允许在ToneJS(Chrome)中启动AudioContext
在Chrome中使用ToneJS时,我经常会收到这样的错误消息:“不允许启动AudioContext。必须在页面上的用户手势后恢复(或创建)它。” 例如,使用下面的代码,我每次使用ctrl-r或ctrl-f5刷新页面时都会收到此消息 通过在控制台中键入Javascript 不允许在ToneJS(Chrome)中启动AudioContext,javascript,web-audio-api,Javascript,Web Audio Api,在Chrome中使用ToneJS时,我经常会收到这样的错误消息:“不允许启动AudioContext。必须在页面上的用户手势后恢复(或创建)它。” 例如,使用下面的代码,我每次使用ctrl-r或ctrl-f5刷新页面时都会收到此消息 通过在控制台中键入Tone.context.resume(),我可以让它再次工作,但这会非常重复。为什么会这样,我怎样才能阻止它 var keyToPitch = { "z":"C3", "s":"C#3", "x":"D3", "d":"D#3", "c":"E3
Tone.context.resume()
,我可以让它再次工作,但这会非常重复。为什么会这样,我怎样才能阻止它
var keyToPitch = { "z":"C3", "s":"C#3", "x":"D3", "d":"D#3", "c":"E3", "v":"F3", "g":"F#3", "b":"G3", "h":"G#3", "n":"A3", "j":"A#3", "m":"B3", ",":"C4" }
var synth = new Tone.PolySynth(6, Tone.Synth, {
"oscillator" : {
"type": "sawtooth",
"partials" : [0, 2, 3, 4],
}
}).toMaster();
window.addEventListener('keydown', this.onkeydown)
window.addEventListener('keyup', this.onkeyup)
function onkeydown(e){
synth.triggerAttack(keyToPitch[e.key], Tone.context.currentTime)
}
function onkeyup(e){
synth.triggerRelease(keyToPitch[e.key])
}
Chrome似乎正在制定一项政策,以便在没有用户发起的情况下,网站不能侵入性播放音频 幸运的是,您已经在使用用户输入通过keydown和keydup事件触发音频。与手动调用
Tone.context.resume()
不同,您可以连接事件以启动resume(),如下所示:
function onkeydown(e){
Tone.context.resume().then(() => {
synth.triggerAttack(keyToPitch[e.key], Tone.context.currentTime)
});
}
function onkeyup(e){
Tone.context.resume().then(() => {
synth.triggerRelease(keyToPitch[e.key])
});
}