首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法为ToneJS振荡器切换start()/stop()

无法为ToneJS振荡器切换start()/stop()
EN

Stack Overflow用户
提问于 2020-09-13 01:25:21
回答 1查看 228关注 0票数 1

我用ToneJS库拼凑了一些JS来打开/关闭一些声音。

代码语言:javascript
复制
function togglePlay() {
  const status = Tone.Transport.state; // Is either 'started', 'stopped' or 'paused'
  const element = document.getElementById("play-stop-toggle");
  if (status == "started") {
    element.innerText = "PLAY";
    Tone.Transport.stop()
  } else {
    element.innerText = "STOP";
    Tone.Transport.start()
  }

  document.querySelector('#status').textContent = status;
}


var filter = new Tone.Filter({
  type: 'lowpass',
  Q: 12
}).toMaster()



var fmOsc   = new Tone.AMOscillator("Ab3", "sine", "square").toMaster()
var fmOsc2  = new Tone.AMOscillator("Cb3", "sine", "square").toMaster()
var fmOsc3  = new Tone.AMOscillator("Eb3", "sine", "square").toMaster()

var synth   = new Tone.MembraneSynth().toMaster()

//create a loop
var loop = new Tone.Loop(function(time){
//    synth.triggerAttackRelease("A1", "8n", time)
//    fmOsc.start()
    fmOsc2.start()
    fmOsc3.start();
}, "4n")


//play the loop between 0-2m on the transport
loop.start(0)
// loop.start(0).stop('2m')

loop里面我有一个鼓点,我现在已经把它注释掉了。当它被注释进去时,togglePlay()函数将按预期启动和停止它。

但是,当我切换到start时,fmOsc2fmOsc3函数将启动,但当我切换到stop时,它不会终止。

作为参考,HTML端是这样的:<div class="trackPlay" id="play-stop-toggle" onclick="togglePlay()">PLAY</div>

如何让fmOsc2fmOsc3函数与按钮状态进行切换?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-21 03:24:49

音调Transport不应该以这种方式使用,无论是启动还是停止振荡器(当然,它可以启动/停止振荡器,但我不认为它正在做您想让它做的事情) :-)

如果你在传递给Tone.Loop的函数中添加一个console.log,你会看到它被反复调用,比如,你一次又一次地调用fmOsc.start()。(不过,在该Loop中重复击鼓是有意义的)

调用Tone.Transport.stop()不会停止振荡器--它只会停止Loop /传输函数(即“计时”)。鼓点很明显--在UI中按下Stop键可以杀死鼓点,但振荡器会继续振荡。

最简单/最直接的(也是唯一的?)停止振荡器的方法是对它们调用.stop()

代码语言:javascript
复制
  if (status == "started") {
    element.innerText = "PLAY";
    Tone.Transport.stop()
    fmOsc2.stop()
    fmOsc3.stop()
  } else {
    // ... [snip] ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63863012

复制
相关文章

相似问题

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