diff options
author | Robin Gareus <robin@gareus.org> | 2016-08-23 22:19:34 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-08-23 22:21:03 +0200 |
commit | 6a396d887cfe6a42dc2a16da869f8d22b26a645e (patch) | |
tree | b2051caac35ecbeaa3383f08fe547b027e1ee1fa /scripts | |
parent | 5d597cdfeb644957358a4c2b0da10a4ef04f1747 (diff) |
example fluidsynth lua script (currently: hardcoded .sf2)
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/_fluidsynth1.lua | 51 |
1 files changed, 51 insertions, 0 deletions
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 |