summaryrefslogtreecommitdiff
path: root/scripts/_midi_rewrite.lua
blob: 4dfc28a6c32dadc20c8d9380c6ea8c0bc6af3729 (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
ardour {
	["type"]    = "session",
	name        = "Rewrite Midi",
	license     = "MIT",
	author      = "Ardour Lua Task Force",
	description = [[An example session script preprocesses midi buffers.]]
}

function factory ()
	-- this function is called in every process cycle, before processing
	return function (n_samples)
		_, t = Session:engine ():get_ports (ARDOUR.DataType.midi (), ARDOUR.PortList ())
		for p in t[2]:iter () do
			if not p:receives_input () then goto next end

			if not p:name () == "MIDI/midi_in 1" then goto next end

			midiport = p:to_midiport ()
			assert (not midiport:isnil ())
			mb = midiport:get_midi_buffer (n_samples);

			events = mb:table() -- copy event list into lua table
			mb:silence (n_samples, 0); -- clear existing buffer

			for _,e in pairs (events) do
				-- e is-a http://manual.ardour.org/lua-scripting/class_reference/#Evoral:MidiEvent
				e:set_channel (2)
				mb:push_event (e)
			end

			::next::
		end
	end
end