Is there a sure method of blocking MIDI messages immediately?
-
I ran a test and found that Message.ignoreEvent(true) may have some issues for working with MIDI filtering in the scripts.
Here is a simple example:
function onNoteOn() { var eid = Message.getEventId(); if (Message.getEventId() == eid) { Message.ignoreEvent(true); } Console.print(Message.getNoteNumber()); }
When I use this, I am expecting that console won't have anything to print because it should be ignoring the note that was just entered at that point.
Instead it prints the note number.If I use this code in a MIDI processor that is a parent of another MIDI processor, the child processor will see the note greyed out (ignored) in the Event Viewer and when asked to Console.print(Message.getNoteNumber());
It prints nothing, as expected.So the Message.ignoreEvent(true) works, but not immediately.
Is there a way to effectively block the MIDI messages immediately?
I am concerned about continuing coding is script when following the ignore message, as the messages may still be extant at that point.There are scenarios where I need to generate pitch sets from input notes, then filter out the input notes. I thought ignoring the messages if they match the original input event ids should work.
-
@VirtualVirgin said in Is there a sure method of blocking MIDI messages immediately?:
So the Message.ignoreEvent(true) works, but not immediately.
The message is ignored as soon as you tell it to be, but the message still exists in the processor you ignored it in so you can still see its properties like the note number.
Ignoring just means it won't be processed any further in the chain, won't trigger sound generators, etc.
-
@VirtualVirgin said in Is there a sure method of blocking MIDI messages immediately?:
if (Message.getEventId() == eid)
This will always be true, so you don't need it.
-
@d-healey said in Is there a sure method of blocking MIDI messages immediately?:
@VirtualVirgin said in Is there a sure method of blocking MIDI messages immediately?:
if (Message.getEventId() == eid)
This will always be true, so you don't need it.
This is just a test here,
but it is not always true if there is intervening code in between the initial variable declaration and the "if "statement of it.If new notes are generated after the var eid = Message.getEventId();
in the script they should return a "false". -
@d-healey said in Is there a sure method of blocking MIDI messages immediately?:
@VirtualVirgin said in Is there a sure method of blocking MIDI messages immediately?:
So the Message.ignoreEvent(true) works, but not immediately.
The message is ignored as soon as you tell it to be, but the message still exists in the processor you ignored it in so you can still see its properties like the note number.
Ignoring just means it won't be processed any further in the chain, won't trigger sound generators, etc.
But if note numbers are still passing to be picked up by the Console at the point, then they will also be picked up if I am pushing Message.getNoteNumber() into a MidiList or an array. I do not want that.
-
@VirtualVirgin said in Is there a sure method of blocking MIDI messages immediately?:
Message.getNoteNumber() into a MidiList or an array. I do not want that.
Can you show me an example where you would be adding it to a MIDI list so I can see the flow of your program?
-
Here is a snippet of the test-
HiseSnippet 1143.3oc6X0sSabDEdFCCJdKUoQp2zb0pbkoBgV6Zv3FQKArchUhAqXBM2TEMd2w1SX8Lq1cLDqHd2pTeC5SReCnmY10dWCFJwhJUZwWf74+Oel47c1k1gRWVTjLDgsNZb.CgWkzYrPMX+ATt.0rFB+cjl8ExPlc2w10OkIT1MqYqXQJzdiCnQQLODFuzK0tiyuLx74O+48n9TgKKUEBcrj6xdCeHWkps8tul662f5wNhOLi2k2soqTruzWNBf1RDGT.08DZe1ATsa4HnWQiFfveOw0sbU118JUwoTU1ldk6VpnCsjS0pUXzMcb6VkQK0qqqCBuRcOtRF1QQAzCIcOo23NCjmIhKvw7HdWelVnHpCT4X0n8Gv88ZOoOEgPXR6zt1Rwcsukzh6wmpOs68MFC1oQjsogycSPp3W.jvYfzxwP5IjNtg7.UpEMd9JRSghE1iBmMYgRruH7uQ1WBNHTaLjdBqQHHLMfBa43rtM7m0dduQBWEWJrkhCjJ1ghBqY8Yq7VmaYeYS85MWa5xDJ88Ygy0r95P3MEXAwngcYgqaeJ0eDapivO+Y6oqb65otw+py3nTzTvUGFvRjaH88z8J82u5I.JosAe6cMqQUT8gRhNvu.VnhqgCtF6TXLH9HJOoFK5DkLv36v.oPmA7ppj6TwGJM7kTEWz+HN.aNffGSxppH5SSma18i6NNcH5m1MA.wUyh7Z13tRZnGpa+IiV4Wwyy6Bs2bEaXp1Kt3hmNq1RIpMNqXeRk57jIbyu6b+Jl7YKa6mAU6W3dpAO6GsKVdCm005pwiB7oiOzUQOkcf4DDLqBGwLlei7LHJPS4sMxuhGKVrTEi79ihTxguLjFLf6FAF5Q8ihCsFqGcju5EAALZnl5Iad2yGXOfT8VnqIACNarUUyms21oRUmJEMdcjreeeVKoGalLqGfgAZgf4qghQ26hXGybgqYYvxzpAFa3SUcTi8uTlZWexQvk0CWWCUoUozD80EdYp8VVmiNS2SARH7e.c7ALd+AJsTCCc5UXA.9Go2H.MyRJooqSL.SUyvDnG2EQb03rz4eALUN2HS0sEhOgzlqbGLeLlaNXDl29m.iI76eModudvAdJ.Wlz38KJY9su7O5ZVJupglFjXgEuK1CGbq2CiW597ZTm6n0nOlL8QgN5xOJTxpzbqiI1WydxSog1Ltm8N1sfbBOVyF8YJSFa5UXsmaYkm2ytv7rYuyN5HWyJOjl7S7fadBMiSEzzPPJxeNrPLObKIR5y1HHjClxjPMZh4eKrF38+91aStq1aemuq9AV1+GxxV59JK6x2iYYsHsZVqo8gilKAK92uV90Gn8df16AZu4V92JGoeywVTUHGdwQBLMzAncbYIulg9NHNm91RrriVV2A5vDdFA86.lXrnVFmXr3Di+moFCotgxO3FOAqYtdjQCzaEl+MT4Iszx1EQlo5r2WFBDoev0c1Tck.KsnA9CKZfkWz.2bQCbqEMvJKZfa+2GndO2KFojCiG+QH3UsMThXbcAEljLScn+BL0SNn
There is a Console.print for the onNoteOn of two MIDI script processors.
If the Message.ignoreEvent is on, then only the parent processor prints the note number.
If the Message.ignoreEvent is off, then they both print the note number.
So message is not being blocked immediately, as in the first condition, neither script processors should be printing anything onNoteOn.
-
@VirtualVirgin But where would you be adding it to a MIDI list or array, where the Console.print line is?
-
@d-healey The MidiList or array could be anywhere depending on what stage of note transformation is going on.
-
@VirtualVirgin Until I know where it is I can't suggest a particular solution, but if it's in the same list where you are ignoring the note, you can just not add it to the list if you are ignoring the note.
And if it's in a secondary script the note will never reach it if it's ignored so there shouldn't be an issue. Unless I'm misunderstanding - it's tricky without a real-world example.