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
発振器を停止します。
| 引数名 | 内容 | 備考 | オプション | デフォルト値 |
|---|---|---|---|---|
| sec | 秒数 | いまから何秒後に停止させるかの値 | ○ | 0 (即時停止) |
obj (メソッドを呼び出した oscillatorオブジェクト自身)
・stopメソッドにより発振器の動作を停止した場合、
再び動作を再開するには Oscillator,newメソッドで新たな発振器を生成しなおす必要があります。
(したがって、stopメソッドは停止というよりも消滅に近い動作になります)
・もし stopメソッドを実行したあとに startメソッドを再度実行すると、以下の例外が発生します。
「InvalidStateError: Failed to execute 'start' on 'AudioScheduledSourceNode': cannot call start more than once.」