Unison.lua

Unison script trigger multiple voices

--------------------------------------------------------------------------------
--! @example Unison.lua
--! Unison script
--! trigger multiple voices
--------------------------------------------------------------------------------

Voices = Knob("numVoices", 5, 2, 10, true)
Detune = Knob("Detune", 10.0, 0, 40) -- cents

function onNote(e)
  local nVoices = Voices.value
  local detune = Detune.value
  for i=1,nVoices do
    local note = e.note
    local i2 = math.floor(i/2)
    local rest = i%2
    local tune = detune * i2 / 100.0
    if rest == 1 then
      tune = tune * -1.0
    end
    local id = playNote{e.note, e.velocity, vol=1/math.sqrt(nVoices), tune=tune}
  end
end

function onRelease()
    -- eat event release is automatic in playNote
end