53 lines
1.1 KiB
Lua
53 lines
1.1 KiB
Lua
ardour {
|
|
["type"] = "dsp",
|
|
name = "Midi Generator",
|
|
category = "Utility",
|
|
license = "MIT",
|
|
author = "Robin Gareus",
|
|
email = "robin@gareus.org",
|
|
site = "http://gareus.org",
|
|
description = [[An Example Midi Generator for prototyping.]]
|
|
}
|
|
|
|
function dsp_ioconfig ()
|
|
return { { audio_in = 0, audio_out = 0}, }
|
|
end
|
|
|
|
function dsp_has_midi_output () return true 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
|