diff options
| author | gretchen <gretchen@gnar.cool> | 2019-11-16 15:53:28 -0800 | 
|---|---|---|
| committer | gretchen <gretchen@gnar.cool> | 2019-11-16 15:53:28 -0800 | 
| commit | 19e75512541c3526fe20d96a5f7ae8edf18ba3ea (patch) | |
| tree | 59ededcc64cde316964ef2334ab894541beb9cee | |
| parent | 8fcdea3150dd9442170ef8604a17430f445d7c23 (diff) | |
| download | intervals-19e75512541c3526fe20d96a5f7ae8edf18ba3ea.tar.gz intervals-19e75512541c3526fe20d96a5f7ae8edf18ba3ea.zip | |
note_on vs note_off, vel and delay
| -rw-r--r-- | intervals.lua | 46 | 
1 files changed, 39 insertions, 7 deletions
| diff --git a/intervals.lua b/intervals.lua index 8c8538d..6096e1d 100644 --- a/intervals.lua +++ b/intervals.lua @@ -460,25 +460,36 @@ intervals_state = {  engine.name = 'PolyPerc'  -- TODO fix globals here --- TODO note_on vs note_off --- TODO parameters for velocity and for note_off delay -function play(note, once) +function play_start(note, vel)    if intervals_state.play_audio then      engine.hz(midi_to_hz(note))    end    if intervals_state.play_midi then +    intervals_state.midi_out:note_on(note, vel or intervals_state.note_vel) +  end +end + +function play_stop(note, vel) +  if intervals_state.play_midi then +    intervals_state.midi_out:note_off(note, vel or intervals_state.note_vel) +  end +end + + +function play(note, vel) +  play_start(note, vel) +  if intervals_state.play_midi then      -- if state.timer then      -- state.timer:stop()      -- metro.free(state.timer.id)      -- end      local t = metro.init() -    t.time = 0.15 +    t.time = intervals_state.note_length      t.event = function(time)        t:stop()        metro.free(t.id) -      intervals_state.midi_out:note_off(note, 32) +      play_stop(note, vel)      end -    intervals_state.midi_out:note_on(note, 80)      t:start()    end  end @@ -491,7 +502,10 @@ function init()      b = midi.to_msg(a)      -- monitor      if b.type == "note_on" then -      play(b.note, b.vel) +      play_start(b.note, b.vel) +    end +    if b.type == "note_off" or b.vel == 0 then +      play_stop(b.note, b.vel)      end      state_call(intervals_state, "midi", {b})    end @@ -530,6 +544,24 @@ function init()          intervals_state.timer.time = value        end    end}) +  params:add({ +    type = "control", +    id = "note_length", +    name = "Note length", +    default=60, +    controlspec = ControlSpec.new(0.0001, 3, 'lin', 0.05, 0.55, "secs"), +    action = function(value) +      intervals_state.note_length = value +  end}) +  params:add({ +    type = "control", +    id = "note_vel", +    name = "Note velocity", +    default=60, +    controlspec = ControlSpec.new(1, 127, 'lin', 1.0, 20), +    action = function(value) +      intervals_state.note_vel = value +  end})    params:bang()    play(60) | 
