From: Robin Gareus Date: Tue, 23 Aug 2016 20:19:34 +0000 (+0200) Subject: example fluidsynth lua script (currently: hardcoded .sf2) X-Git-Tag: 5.1~20 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=6a396d887cfe6a42dc2a16da869f8d22b26a645e example fluidsynth lua script (currently: hardcoded .sf2) --- diff --git a/scripts/_fluidsynth1.lua b/scripts/_fluidsynth1.lua new file mode 100644 index 0000000000..f2e0ea2b52 --- /dev/null +++ b/scripts/_fluidsynth1.lua @@ -0,0 +1,51 @@ +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