summaryrefslogtreecommitdiff
path: root/share/scripts/_spike_synth.lua
blob: 167e0e27d2afa7974df2eed9f5d85f8524ba5fb1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
ardour {
	["type"]    = "dsp",
	name        = "Spike Synth",
	category    = "Instrument",
	license     = "MIT",
	author      = "Ardour Lua Task Force",
	description = [[A debug and test-instrumentation synth. This plugin is useful with Ardour's "Dummy" backend "Engine-Pulse" mode to verify capture alignment. This plugin generate the exact same audio-signal from MIDI data that the backend also generates: Note-on: +1, Note-off: -1.]]
}

function dsp_ioconfig ()
	return { { midi_in = 1, audio_in = 0, audio_out =  1} }
end

function dsp_run (ins, outs, n_samples)
	local a = {}
	for s = 1, n_samples do a[s] = 0 end

	for c = 1,#outs do
		ARDOUR.DSP.memset (outs[c], 0, n_samples)
	end

	assert (type(midiin) == "table")
	for _,b in pairs (midiin) do
		local t = b["time"] -- t = [ 1 .. n_samples ]
		local d = b["data"] -- get midi-event
		if (#d == 3 and (d[1] & 240) == 144) then -- note on
			for c = 1,#outs do
				outs[c]:array()[t] = 1.0
			end
		end
		if (#d == 3 and (d[1] & 240) == 128) then -- note off
			for c = 1,#outs do
				outs[c]:array()[t] = -1.0
			end
		end
	end
end