13
0
livetrax/share/scripts/__fluidsynth1.lua

52 lines
1.1 KiB
Lua

ardour {
["type"] = "dsp",
name = "Lua Fluid Synth",
category = "Instrument",
license = "MIT",
author = "Ardour Lua Task Force",
description = [[An Example Synth for Prototyping.]]
}
function dsp_ioconfig ()
return
{
{ midi_in = 1, audio_in = 0, audio_out = 2},
}
end
fluidsynth = nil
function dsp_init (rate)
fluidsynth = ARDOUR.FluidSynth (rate, 32)
assert (fluidsynth:load_sf2 ("/usr/share/sounds/sf2/FluidR3_GM.sf2"))
end
function dsp_run (ins, outs, n_samples)
local tme = 1
assert (#outs == 2)
-- parse midi messages
assert (type(midiin) == "table") -- global table of midi events (for now)
for _, e in pairs (midiin) do
local t = e["time"] -- t = [ 1 .. n_samples ]
-- synth sound until event
if t > tme then
local off = tme - 1
local len = t - tme
fluidsynth:synth (outs[1]:offset (off), outs[2]:offset (off), len)
end
tme = t + 1
fluidsynth:midi_event (e["bytes"], e["size"]) -- parse midi event
end
-- synth rest of cycle
if tme <= n_samples then
local off = tme - 1
local len = 1 + n_samples - tme
fluidsynth:synth (outs[1]:offset (off), outs[2]:offset (off), len)
end
end