首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不允许在ToneJS中启动AudioContext (Chrome)

不允许在ToneJS中启动AudioContext (Chrome)
EN

Stack Overflow用户
提问于 2018-05-11 05:11:10
回答 1查看 11K关注 0票数 3

在Chrome中使用ToneJS时,我经常收到这样的错误信息:“不允许启动AudioContext。它必须在用户在页面上做手势后恢复(或创建)。”

例如,使用下面的代码,我每次使用ctrl-r或ctrl-f5刷新页面时都会收到以下消息。

我可以通过在控制台中输入Tone.context.resume()让它再次工作,但这会变得非常重复。为什么会发生这种情况,我如何才能阻止它?

代码语言:javascript
复制
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])
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-11 06:46:57

看起来Chrome正在制定一项针对require user interaction to use AudioContext的政策,这样网站就不能在没有用户发起的情况下以侵入性方式播放音频。

幸运的是,您已经在使用用户输入通过keydown和keyup事件触发音频。无需手动调用Tone.context.resume(),您可以将事件挂钩以启动resume(),如下所示:

代码语言:javascript
复制
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])
  });
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50281568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档