How to make a Panic Button (Send All MIDI Off)?
-
@Lindon Not really, only in conjunction with a Note On command
-
@WillDevelop said in How to make a Panic Button (Send All MIDI Off)?:
@Lindon Not really, only in conjunction with a Note On command
so look in the documentation for NoteOff
eventually` you will find:
Synth.noteOff(int noteNumber)
so ...
for(i=0; i<128;i++) { Synth.noteOff(i); }
-
@Lindon
But does it also send a Note Off command to another plugin?
Because the plugin does not generate its own sounds, but only outputs MIDI data. -
@WillDevelop really, just type it in and try it.. if not - then you have learned something.
-
@Lindon Okay, I tried it and it didn't work.
-
I have found a solution
Button Callback
if(isMidiPanicBtnActive == 0) { isMidiPanicBtnActive = button.getValue; button.setValue(0); }
onNoteOff Callback
if (isMidiPanicBtnActive == 1) { for(i=0; i<128; i++) { Message.setNoteNumber(i); Message.sendToMidiOut(); } isMidiPanicBtnActive = 0; }
The only downside of this solution is that you have to press the button and then press a midi key
Because I don't think it is possible to send a message command with a button click, at least not "Message.setNoteNumber()" -
I know you guys are always looking at the “coding” way to do this…but wouldn’t a simple “no code” way to do this be to just create a button…make it momentary and assign it to the project master bypass? Because doesn’t that send an “All notes off” message that kills any midi/audio playing?
-
@johnmike that would be a much simpler solution, but I found nothing in the documentation about project master bypass.
-
That would just bypass your plugin, it wouldn't send MIDI out.
-
The proper solution would be adding a
sendToMidiOut()
to the MessageHolder API object, then you can call this from anywhere. But it's a sensible request, I just didn't use the MIDI out functionality myself too much in order to need it. -
@Christoph-Hart Would it be possible to add a more generic midi out that allows to send artificial events too?
-
@d-healey sure, the idea would be that you can send any message type like this.
-
Gotcha...def the scripting stuff for sending midi out to other plugins...but as far as just creating a generic "Panic" button this is what I was talking about...just for the guys and gals that are trying to accomplish a simple task of creating a simple "Panic" button...WARNING turn speakers down for the audio example...
https://www.dropbox.com/scl/fi/98yaqpt73ok0gvc8y200m/Panic.mov?rlkey=89m091do482lpbo5kwf62yjza&dl=0
-
@Christoph-Hart said in How to make a Panic Button (Send All MIDI Off)?:
sendToMidiOut
That's a good suggestion, but when trying around with the MessageHolder object I noticed that the object does not have the function sendToMidiOut() at all and if I understand correctly sendToMidiOut() only works in the Midi callbacks, which is only triggered when a Midi signal comes in
-
@WillDevelop Christoph is saying he needs to add this functionality to HISE, it isn't there yet
-
Okay, my bad.
I have now solved the problem like this:
When you press the panic button you have one second to press any MIDI note so it can send a note off command to the next plugin for each note.Here is the code for it
onInit()
// MIDI Panic Btn const midiPanicBtn = Content.addButton("midiPanicBtn").setPosition(204, 40, 70, 43); var isMidiPanicBtnActive = midiPanicBtn.getValue; // MIDI Panic Btn Timer const midiPanicBtn_timer = Engine.createTimerObject(); midiPanicBtn_timer.setTimerCallback(function(){ var panicBtn = Content.getComponent("midiPanicBtn"); isMidiPanicBtnActive = 0; midiPanicBtn_timer.stopTimer(); });
Button-Callback
if(isMidiPanicBtnActive == 0) { isMidiPanicBtnActive = 1; midiPanicBtn_timer.startTimer(1000); }
onNoteOff()
if (isMidiPanicBtnActive == 1) { for(i=0; i<128; i++) { Console.print(i); Message.setNoteNumber(i); Message.sendToMidiOut(); } }
Thank you all for helping me!
-
-
@WillDevelop said in How to make a Panic Button (Send All MIDI Off)?:
var isMidiPanicBtnActive = midiPanicBtn.getValue;
Check this...
-
@WillDevelop If you want to send note off to the outside, you can use the Synth.sendToMidiOut() function.
Here's an example, the project has to have "Enable Midi Out" enabled
This example works in Logic, the plugin is an MidiFX plugin
HiseSnippet 967.3oc6W0saSjCE1NIdESfEsHwCvnd0TQUUBKvhTWfPSaQQPZiHEDRbA35wowpyXOxiGJQnJw6K2vS.vwyjIwSaJTEQWoEQtHJ97iOey4uuICzJFOMUoQXu8mjvQ3qQFNQZF2cLUHQ81BguJouHTLfJELzlSRnoo7PDFW+IVCvdMP4e97i1jFQkL9bQHzKUBF+YhXgYtzAcdpHJZGZHeeQri02oSOlR1UEox.vTmzBkPYGQOjuK0ZVMBB+GaGJLJ8PC0vSQ3FapBmLbr5XYg8uTjJNHhaOzFMDtnBw6nhBsH1JE0crHJbP4CcJBgIClmBpWjBtYwSbo74oh+JWg+bObyG3ZUgW8JvqsK7Z4.uE.IrCjZT.oaPFxzhDybMEkldRCWOhBocWnTXKB+ERWEXfzrdL8H9NZ3vLGBtWqVq4Ces5FMaBY9Ti+r57dYF+G3m2Gr9gbSkrQvJtlsxpaLJSxLBkzWI2UY36ICVs4GZ507jl9mV0nQKTmEjZUTDWuP019D82yw.YV7Ab8Z9uiFkwmYHj7pVQHmeEwsggUjybLTI6IEl8R3xyqMBMMQaqdSQEXpIu1c8o0tMyLFkDIBqNSkCZ2oFzK5sE0PKuJ3VgHkv0Fg8g.uE+cvTUQagGYKd5QFURtswIJoECXuKTfe+7fF1YxrCcdamiEglwyD7wW2YLWb3Xmg3G1Qj1WECAipAOw0RJyE8Bsw0sEAli0vHLz106T..c19bXBSElEQMUG6r6Zlp.p7U50sMzxTgYh6tneZyhWTHdCx.ggMdwXr1BvHTcuLv3zMX+IY6Qi3Lyb.1fryqtbVW4F9qbNbHWKeQDbhqa+yfDI4BShfqeYPZz3+wjFmZ5bA7F09DlbJFAfNnjJgFFVrPwgIXk07AxDKUxLQqmxMAq3rl.rwng0y.ciPFAsBtaxm4V4JcV41L2s5hQ9ASO44MRo8CD.vZsguv+e8ae66C+3V2xpyqf6RVP5.DewunWP607EPzOA.PETNMjcoQQG.uxQvYQyRQx0GR4vqu.QPFtuxdkP5N..fGbqopH95IZgzDTZGPzZ8e2btrfUsH82rjWlrjjKJKIAai2jxeTg5ifyk8alreEXxdtJyHjG1mZzBacGlEGBLILNDcojGYmNv0r8wEmaU1RLDlwyO7U3yTksKaNrJaWp7+jXDSYZ0aXESXVxgqjKAdtk4+YJORe6Y+1mcrJFZ7eCiU8pNii2dYc7uWVGuyx53cWVGu2x53+rrNd+eri18RONynhKFMQn9C1NeMHFusjBc44SDnuA4V4ZhC
-
@ulrik Yes it works but unfortunately only as a VST2 plugin
-
@WillDevelop Ok, I think Logics MidiFX works in another way.
Now I have set theMessage.sendToMidiOut();
in onNoteOn and onController callbacks as well, (to let all midi information slip through)
and it works as vst3 in Live and Reaper heresnippet
HiseSnippet 950.3oc6W0saaaCElz1ZnxsaXEnO.B4JEzf.qrtsBj0MuXmTXz5Di5zhc0JXnniIhDo.EU6LJ56bQe.Z6gRVVTN1atFMCXC0WId9gmOc96SdjRRYooREB6d9rDFBeGmwyD5o8lR3Bzf9H7scFxC4iHBNEczrDRZJKDgwMerw.raKT9u28aGQhHBJqRDB8BImxdJOlqqjNp6S3QQmPBYmyisr9AcGPkhdxHYF.llNcPID5UjKYmRLl0vAg+liC4ZoZrlnYoHbqijgyFOU9ZQg8ufmxuHhYNDfFCWTg3SjQgFDajh5MkGENp7kNEgvNipRAMKRA2q3MtTdUp36yU3U4gc9.2nN7ZVCdA1vqiE7VAjvVPpUAjtqyXphmnqzTTZFHzL0DBj1sgRgsH7Gb5IACD58iIWwNQAGV3f+Ac5rmWPmN6dX61PlOU6snNeVl16Qd48A6eISWKa3uisY6r6gSxDTMWJ7jhSkZ1YB+ca+l1tseaaukUMYxJ0Y.oRFEwTqTsoOQ824nuHK9BlZOuWQhxXKLDRd0qHNquhX2vPKxYVFJECDb8YILw5ZiPySzlp2bTAlpyqce27Z2QYZsTf3g0moxAs8TC54C5SzjxqBtUHRILkladIv8YuBlpJZKbc5yRuRKSxsMNQJLX.6tQA9upBZ+typN7qceMOTOsRve1cJie4TssI7zgxXHXD0rhbRRY1XPnIx1MIvjrBFhgFuAKAAz06zgYLYXVDQWevyrsYtBn1Wqa2zRKR45Y1ai9hMMtoP7tNi3Z5zUiwFq.iP88l.iy2g8sNGOYBipq.XKmS9ialEV1g+VqgE4N4qhfSLUvWBZjjMlFA27lf1n0+goMVZ5bELGMdO1YINAfPnjLgDFVrRwhKXm87.5DCYxBQ6mxz96Xsn.rQqfEz.gCWDAsB16xW3V4RcZ49L6857Id9yO45NQp774.v5bnG26W7BN3gvC2+9FctErWhBZGf5K94C7C1yiCQ+s..pgx4grGIJ5B3iN7uNZVKM2PHsBejBbKhvykF2fTpuIHqm9aC8YYZwMzsuRW94RW5rozkNXS7lU9PMNPGbtruRn8+ABsmIyzbwkCIZE2T2OMKdLPnPYPzEBVjY5.2vzGWbtSYKwXX1L+vGgeyUFT1bXTFTp7ekXDSnJ4KoESXFNhakKAduE4+qJWmglydAWerJFZ7eIkV+ptliGrsN9CaqiOXac7G2VG+os0wedac7g+yNZ1K86YZYbwnIBMbzw4qAw3iEDnKOeh.8Ij0MtUA