(oscillator).stop

def setup
  background(220)
  button = createButton('Play').size(60, 30).position(20, 35)
  button.mousePressed do
    button.elt.disabled = true
    @track.play_score(score)
  end
  @track = Track.new(SQUARE, 50.0)
end

class Track
  def initialize(type, bpm = 60.0)
    @osc  = Oscillator.new(type)   # Oscillator
    @bpm  = bpm                    # beats per minute
    @time = 0.0
  end
  def play_score(score)
    score.each do |sc|
      f = sc[:f]
      v = sc[:v]
      l = sc[:l]
      @osc.start(@time).amp(v).freq(f)  # 鳴動(音量v, 周波数f)
      @time += l * (60.0 / @bpm)        # 鳴動時間
      @osc.stop(@time)                  # 鳴動時間後に停止
      @time += 0.01                     # 音同士の区切り
    end
  end
end

def score
  [
    {f: D5,  v: 0.2, l: 0.5  },
    {f: D5,  v: 0.2, l: 0.125},
    {f: E5,  v: 0.2, l: 0.125},
    {f: Fs5, v: 0.2, l: 0.25 },
    {f: Fs5, v: 0.2, l: 0.25 },
    {f: E5,  v: 0.2, l: 0.25 },
    {f: E5,  v: 0.2, l: 0.25 },
    {f: D5,  v: 0.2, l: 0.25 },
    {f: Cs5, v: 0.2, l: 0.25 },
    {f: B4,  v: 0.2, l: 0.25 },
    {f: B4,  v: 0.2, l: 0.125},
    {f: Cs5, v: 0.2, l: 0.125},
    {f: D5,  v: 0.2, l: 0.25 },
    {f: D5,  v: 0.2, l: 0.5  },
    {f: Cs5, v: 0.2, l: 0.25 },
    {f: B4,  v: 0.2, l: 0.25 },
    {f: A4,  v: 0.2, l: 1    },
  ]
end

p5.jsリファレンス(参考情報)

[p5.js] (p5.Oscillator).stop

概要

発振器を停止します。

書式

obj.stop([sec])

引数

引数名内容備考オプションデフォルト値
sec秒数いまから何秒後に停止させるかの値0 (即時停止)

戻値

obj (メソッドを呼び出した oscillatorオブジェクト自身)

備考

・stopメソッドにより発振器の動作を停止した場合、
 再び動作を再開するには Oscillator,newメソッドで新たな発振器を生成しなおす必要があります。
 (したがって、stopメソッドは停止というよりも消滅に近い動作になります)

・もし stopメソッドを実行したあとに startメソッドを再度実行すると、以下の例外が発生します。
 「InvalidStateError: Failed to execute 'start' on 'AudioScheduledSourceNode': cannot call start more than once.」

関連

Oscillator.new
(oscillator).start
(oscillator).freq
(oscillator).amp
(oscillator).setType
(oscillator).getFreq
(oscillator).getAmp
(oscillator).getType