微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tone.js 应用程序 - 直到第二次点击音频才会开始

如何解决Tone.js 应用程序 - 直到第二次点击音频才会开始

我知道我需要用户操作才能在移动设备上启动网络音频。但是我已经按照建议恢复(在 Tone.js 调用 Tone.start() 的情况下)用户操作,但它仍然不起作用。 以下是我的代码的相关部分:

keyElement.addEventListener("touchstart",notepressed,false);
keyElement.addEventListener("touchend",noteReleased,false);

function notepressed(event) {
        let dataset = event.target.dataset;
        if (!dataset["pressed"]) {
            let octave = +dataset["octave"];
            oscList[octave][dataset["note"]] = playTone(dataset["frequency"]);
            dataset["pressed"] = "yes";
        }
        event.preventDefault(); event.stopPropagation();
    }
function noteReleased(event) {
      let dataset = event.target.dataset;

      if (dataset && dataset["pressed"]) {
        let octave = +dataset["octave"];
        oscList[octave][dataset["note"]].triggerRelease();
        delete oscList[octave][dataset["note"]];
        delete dataset["pressed"];
      }
    } 
function playTone(freq) {
        let synth = new Tone.Synth().toDestination();
        let Now = Tone.Now();
        Tone.start();
        synth.triggerAttack(freq,Now);
        return synth;
    } 

它在第二次触摸时工作正常,但在第一次触摸后,我收到一条关于音频上下文被暂停的警告,即使标准是当用户操作调用 start() 时它会恢复。我被难住了。

解决方法

那个 Tone 代码看起来是正确的。我在 CodePen 中对其进行了简化,并且在第一次点击 (iOS) 时就可以在移动设备上运行。

var keyElement = document.getElementById("play");

keyElement.addEventListener("touchstart",notePressed,false);
keyElement.addEventListener("touchend",noteReleased,false);

// Added mouse ELs to test on non-mobile.
keyElement.addEventListener("mousedown",false); 
keyElement.addEventListener("mouseup",false);

var pressedTone;

function notePressed(event) {
  console.log("notePressed");
  pressedTone = playTone(440);
  event.preventDefault();
  event.stopPropagation();
}
function noteReleased(event) {
  pressedTone.triggerRelease();
}
function playTone(freq) {
  console.log("playTone",freq);
  let synth = new Tone.Synth().toDestination();
  let now = Tone.now();
  Tone.start();
  synth.triggerAttack(freq,now);
  return synth;
}

这是 CodePen 的链接:https://codepen.io/joeweiss/pen/gOmeQVW

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。