name = "Simple Synth",
category = "Instrument",
license = "MIT",
- author = "Robin Gareus",
- email = "robin@gareus.org",
- site = "http://gareus.org",
- description = [[An Example Synth for prototyping.]]
+ author = "Ardour Lua Task Force",
+ description = [[An Example Synth for Prototyping.]]
}
function dsp_ioconfig ()
return
{
- -- { audio_in = 0, audio_out = -1}, -- any number of channels
- -- { audio_in = 0, audio_out = 1}, -- values > 0, precisely N channels
- { audio_in = 0, audio_out = 2}, -- values > 0, precisely N channels
- { audio_in = 0, audio_out = 4}, -- values > 0, precisely N channels
- { audio_in = 0, audio_out = 8}, -- values > 0, precisely N channels
- -- { audio_in = 0, audio_out = -6}, -- values < -2, up to -N channels, here 1,..,6
+ -- { midi_in = 1, audio_in = 0, audio_out = -1}, -- any number of channels
+ -- { midi_in = 1, audio_in = 0, audio_out = 1}, -- values > 0, precisely N channels
+ { midi_in = 1, audio_in = 0, audio_out = 2}, -- values > 0, precisely N channels
+ { midi_in = 1, audio_in = 0, audio_out = 4}, -- values > 0, precisely N channels
+ { midi_in = 1, audio_in = 0, audio_out = 8}, -- values > 0, precisely N channels
+ -- { midi_in = 1, audio_in = 0, audio_out = -6}, -- values < -2, up to -N channels, here 1,..,6
}
end
-function dsp_midi_input ()
- return true
-end
-
-
local note_table = {}
local active_notes = {}
local phases = {}
local tme = 1
-- parse midi messages
- assert (type(mididata) == "table") -- global table of midi events (for now)
- for _,b in pairs (mididata) do
+ assert (type(midiin) == "table") -- global table of midi events (for now)
+ for _,b in pairs (midiin) do
local t = b["time"] -- t = [ 1 .. n_samples ]
-- synth sound until event
local d = b["data"] -- get midi-event
-- we ignore the midi channel
- if (#d == 3 and bit32.band (d[1], 240) == 144) then -- note on
+ if (#d == 3 and (d[1] & 240) == 144) then -- note on
local n = 1 + d[2];
active_notes[n] = active_notes[n] or {}
active_notes[n]["tvel"] = d[3]
end
- if (#d == 3 and bit32.band (d[1], 240) == 128) then -- note off
+ if (#d == 3 and (d[1] & 240) == 128) then -- note off
local n = 1 + d[2];
active_notes[n] = active_notes[n] or {}
active_notes[n]["tvel"] = 0
end
- if (#d == 3 and bit32.band (d[1], 240) == 176) then -- CC
+ if (#d == 3 and (d[1] & 240) == 176) then -- CC
if (d[2] == 120 or d[2] == 123) then -- panic
active_notes = {}
end