    --[[
    name: midi chordify
    description: MIDI processor VST/AU. Notes go in, chords come out.
    author: osar.fr
    --]]

    require "include/protoplug"

    -- what kind of chord ?
    local chordStructure = {0, 3, 5, 7, 11}
    local blockEvents = {}

    function plugin.processBlock(samples, smax, midiBuf)
    	blockEvents = {}
    	-- analyse midi buffer and prepare a chord for each note
    	for ev in midiBuf:eachEvent() do
    		if ev:isNoteOn() then
    			chordOn(ev)
    		elseif ev:isNoteOff() then
    			chordOff(ev)
    		end
    	end
    	-- fill midi buffer with prepared notes
    	midiBuf:clear()
    	if #blockEvents>0 then
    		for _,e in ipairs(blockEvents) do
    			midiBuf:addEvent(e)
    		end
    	end
    end

    function chordOn(root)
    	for _, offset in ipairs(chordStructure) do
    		local newEv = midi.Event.noteOn(
    			root:getChannel(),
    			root:getNote()+offset,
    			root:getVel())
    		table.insert(blockEvents, newEv)
    	end
    end

    function chordOff(root)
    	for _, offset in ipairs(chordStructure) do
    		local newEv = midi.Event.noteOff(
    			root:getChannel(),
    			root:getNote()+offset)
    		table.insert(blockEvents, newEv)
    	end
    end

generated by LDoc 1.4.2