summaryrefslogtreecommitdiff
path: root/scripts/_fluidsynth1.lua
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-08-23 22:19:34 +0200
committerRobin Gareus <robin@gareus.org>2016-08-23 22:21:03 +0200
commit6a396d887cfe6a42dc2a16da869f8d22b26a645e (patch)
treeb2051caac35ecbeaa3383f08fe547b027e1ee1fa /scripts/_fluidsynth1.lua
parent5d597cdfeb644957358a4c2b0da10a4ef04f1747 (diff)
example fluidsynth lua script (currently: hardcoded .sf2)
Diffstat (limited to 'scripts/_fluidsynth1.lua')
-rw-r--r--scripts/_fluidsynth1.lua51
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