【问题标题】:Can't toggle start()/stop() for ToneJS oscillators无法切换 ToneJS 振荡器的 start()/stop()
【发布时间】:2020-09-12 17:25:20
【问题描述】:

我将一些 JS 与 ToneJS 库拼凑在一起,以打开/关闭一些声音。

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() 函数将按预期启动和停止它。

但是,fmOsc2fmOsc3 函数会在我切换启动时启动,但不会在我切换停止时终止。

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

如何让fmOsc2fmOsc3 函数与按钮状态一起切换?

【问题讨论】:

    标签: javascript tone.js


    【解决方案1】:

    Tone Transport 不打算以这种方式使用,用于启动或停止振荡器(当然,它可以启动/停止振荡器,但我不认为它正在做你想让它做的事情) :-)

    如果您在传递给Tone.Loop 的函数中添加console.log,您将看到它被重复调用,即您一遍又一遍地调用fmOsc.start()。 (虽然在Loop 中重复鼓点确实有意义)

    调用Tone.Transport.stop() 不会停止振荡器——它只会停止Loop / 传输功能(即“计时”)。鼓声很明显——在你的 UI 中按下 Stop 会杀死鼓声,但振荡器会继续振荡。

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

      if (status == "started") {
        element.innerText = "PLAY";
        Tone.Transport.stop()
        fmOsc2.stop()
        fmOsc3.stop()
      } else {
        // ... [snip] ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多