2

PolySynthボタンを押すと、 aと aを使用していくつかの音符を演奏したいと思いますSequence。ユーザーがボタンを繰り返し押すと、再生中のものは何でも停止して、もう一度開始したいと思います。これは、エンベロープのディケイ/サステインが原因である可能性が最も高いです。

問題:何を試しても、シーケンスが再び開始された場合 (ボタンが再度クリックされた場合) に、以前に再生されたノートを完全にキャンセル/無音にすることはできません。

私のシンセ:

import { PolySynth } from 'tone'

const synth = new PolySynth(Synth, {
  oscillator: {
    type: 'sine4',
    volume: -6,
  },
  envelope: {
    attack: 0.01,
    decay: 0.5,
    sustain: 0.1,
    release: 1,
  },
}).toDestination()
synth.maxPolyphony = 4 // max notes playing at a time, not sure if necessary

私のシーケンス:

import { Sequence } from 'tone'

// Play the 2 notes individually then play them together
const notes = [
  { note: 'C4', duration: '8n' },
  { note: 'G4', duration: '8n' },
  { note: ['C4', 'G4'], duration: '4n' }
]

// The sequence that should play the notes after one another
const sequence = new Sequence({
  subdivision: '8n',
  loop: false,
  events: notes,
  callback: (time, note) => synth.triggerAttackRelease(note.note, note.duration, time),
})

私がそれを再生する方法は、これはイベント ハンドラーです。

import { start, Transport } from 'tone'

// Event handler simply attached to a button's onClick
function onButtonClicked() {
  // Call whatever this start is, doc says it can only happen in an event handler
  start()
  
  // Try everything to kill current sound
  Transport.cancel()
  Transport.stop()

  // Start it again
  Transport.start()
  sequence.start()
}

再生を開始する前に、すべてのサウンド (存在する場合) を完全に削除するにはどうすればよいですか?

4

2 に答える 2