The playNote() function allows to specify which layer the midi note is sent to, which obviously is useful for articulation-switching etc.
I was wondering though if anyone knows a good way to play multiple, select layers at once. From what I see, playNote() expects a single layer object, not a table with layers or anything like that.
So if I want to target multiple layers at once, I can do something like the following code snippet, and it does work. However it creates performance issues very quickly. Like in my example with just 3 layers it already swallows notes when I play moderately fast, which makes sense given that it has to iterate through that for loop.
local targetLayer1 = this.parent:getLayer("firstLayer")
local targetLayer2 = this.parent:getLayer("secondLayer")
local targetLayer3 = this.parent:getLayer("thirdLayer")
layerTable = {targetLayer1, targetLayer2, targetLayer3}
function onNote(event)
for i, targetLayer in ipairs(layerTable) do
local id1 = playNote(event.note, event.velocity, -1, targetLayer)
end
end
Any suggestions for a better, more efficient way of doing this?
Maybe I should mention that I’m looking for a general solution - meaning that I don’t always know how many or which layers will be played, hence hard-coding, say, 3 calls to playNote isn’t an option. The ‘layerTable’ from my example just happens to have 3 items here, another time it might be 5, and yet another one it might be only 2 items.
Also, the layers could (and likely would) live in separate sections of my program tree, so a otherwise good trick such as targeting the parent layer holding all of them will not work in my case. Imagine that you have a bunch of microphones that recorded the same audio event, each living in its own layer, but you only want to ‘switch on’/ aka trigger some of them.