summaryrefslogtreecommitdiff
path: root/scripts/_midigenerator.lua
diff options
context:
space:
mode:
authorJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>2016-08-17 02:04:27 +0200
committerJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>2016-08-17 02:04:27 +0200
commit7fa99abc3a014ee96a2f97de7b1570e407cb22ef (patch)
tree8a96199297a3b0ac9a68b375f5f42abb9859ae53 /scripts/_midigenerator.lua
parentb48e803cf65b8437e7268e59199d65a3247b73ac (diff)
These are not the scripts you're looking for
Diffstat (limited to 'scripts/_midigenerator.lua')
-rw-r--r--scripts/_midigenerator.lua48
1 files changed, 48 insertions, 0 deletions
diff --git a/scripts/_midigenerator.lua b/scripts/_midigenerator.lua
new file mode 100644
index 0000000000..4ef4bf4c71
--- /dev/null
+++ b/scripts/_midigenerator.lua
@@ -0,0 +1,48 @@
+ardour {
+ ["type"] = "dsp",
+ name = "Midi Generator",
+ category = "Example", -- "Utility"
+ license = "MIT",
+ author = "Ardour Lua Task Force",
+ description = [[An Example Midi Generator for prototyping.]]
+}
+
+function dsp_ioconfig ()
+ return { { midi_out = 1, audio_in = 0, audio_out = 0}, }
+end
+
+local tme = 0 -- sample-counter
+local seq = 1 -- sequence-step
+local spb = 0 -- samples per beat
+
+local midi_sequence = {
+ { 0x90, 64, 127 },
+ { 0x80, 64, 0 },
+}
+
+function dsp_init (rate)
+ local bpm = 120
+ spb = rate * 60 / bpm
+ if spb < 2 then spb = 2 end
+end
+
+function dsp_run (_, _, n_samples)
+ assert (type(midiout) == "table")
+ assert (spb > 1)
+ local m = 1
+
+ for time = 1,n_samples do -- not very efficient
+ -- TODO, timestamp the sequence in beats, calc/skip to next event
+ tme = tme + 1
+
+ if tme >= spb then
+ midiout[m] = {}
+ midiout[m]["time"] = time
+ midiout[m]["data"] = midi_sequence[seq]
+
+ tme = 0
+ m = m + 1
+ if seq == #midi_sequence then seq = 1 else seq = seq + 1 end
+ end
+ end
+end