Sample not triggered if MIDI overlaps
-
@d-healey bummer! It's literally the last thing holding me up from releasing this product :(
@Christoph-Hart this is going to be a closed project, by the way, so I'll be in touch soon.
If there's anything else you can think of that I could do to help track this down, let me know. -
@christoph-hart said in Sample not triggered if MIDI overlaps:
Hmm, I can't replicate this in either Reaper or Cubase - overlapping notes still are triggered here.
Can you post a video so I can check it out? Does it look like I'm doing something wrong with the stuff I've already posted?
-
@Dominik-Mayer The embedded youtube video feature is awesome!
-
Maybe I could use a Timer to send a noteOff command directly after a noteOn is received?
What would that look like? Is there an example that shows how the timer works? -
@dustbro That might work but it doesn't solve the problem. This is a very strange issue. It would be good if someone else could recreate it.
-
@d-healey From what I've read on the JUCE forums, this behavior may be by design. Apparently, playing a 2nd note without first receiving a noteOff would result in a midi note stuck on.
I believe that the first noteOff message isn't received when it gets overlapped by the next note.
For instance:
Note on = play 1st sample
Note on = play 2nd sample
note off = stop 1st sample
2nd sample is now stuck on. -
I've had a couple beta testers say the instrument would cut out randomly (I guess similar to the video I posted above where the samples get cut off). I'm wondering if this is a result of note on/off messages getting outta whack by overlapping notes?
-
@Christoph-Hart @d-healey Are there any documents that explain how the Timer works?
I've been looking at some scripts on the forum, but can't quite wrap my head around it.
I'd like to experiment with using the noteOn to trigger a noteOff command at a timed interval (maybe 40ms) to see if it stops the issue I'm having.Here's what I've been tinkering with, but it's just not working:
const var storeNoteNumber = -1; inline function AutoNoteOff() { Synth.startTimer(40); }; function onNoteOn() { storeNoteNumber = Message.getNoteNumber(); AutoNoteOff(); } function onNoteOff() { if(Message.getNoteNumber() == storeNoteNumber) { Synth.stopTimer(); storeNoteNumber = -1; } } function onController() { } function onTimer() { if(storeNoteNumber != -1) { Synth.noteOff(storeNoteNumber); storeNoteNumber = -1; } else { Synth.stopTimer(); } } function onControl(number, value) { }
-
- You can‘t change a const var defined number. Use reg instead.
- the startTimer argument is in seconds - this is highly inconsistent with the UI timers which are controlled in milliseconds, but I can‘t change it for backwards compatibility reasons. Use 0.04.
-
Synth.noteOff(storeNoteNumber);
This line is giving me an error.
Illegal operation in audio thread: String creation -
@dustbro said in Sample not triggered if MIDI overlaps:
This line is giving me an error.
Illegal operation in audio thread: String creationThat error message usual means you have a typo in a variable name
-
Not sure what went wrong here (probably something trivial), but use the event ID obtained by
Message.getEventId()
and theSynth.noteOffByEventId()
method which is far more reliable. -
BTW, a hint about the issue would be just adding
Console.print(Message.getNoteNumber());
into theonNoteOn
callback to see whether the second overlapping MIDI event reaches the scripting engine or if the problem lies before this (either the DAW itself or the way how HISE processes and prepares these messages). -
@Christoph-Hart @d-healey Illegal operation in audio thread is being caused by the timer interval.
When Synth.startTimer(); is set to anything less than 1, I get the error. -
@Christoph-Hart said in Sample not triggered if MIDI overlaps:
Console.print(Message.getNoteNumber());
hmm,.... that sounds way too logical. :grinning_cat_face_with_smiling_eyes:
Great idea! the overlapping midi note doesn't make it to the scripting engine. :( -
And you can confirm that this is not a problem with other plugins?
Can you test what happens if you overlap notes with different MIDI channels?
-
@Christoph-Hart This is for a drum sampler. I can confirm that overlapping notes do trigger samples in SSD, Superior Drummer, Addictive drums, and Groove Agent.
-
@Christoph-Hart said in Sample not triggered if MIDI overlaps:
Can you test what happens if you overlap notes with different MIDI channels?
Ok... changing the midi channel for an overlapped note will trigger the sampler.
-
so what does this mean??
-
HISE processes incoming MIDI messages and creates the event IDs, I suspect there is something fishy going on in this logic.
So just to make sure we use the same conditions:
- HISE 2.0.0 (the app, not compiled plugins). Also is this behaviour new (=> is it not occurring with HISE 1.6.0 or earlier?)
- any DAW / OS
- happens with the minimal example here:
HiseSnippet 743.3oc6W0saSCCE1osFXhsNPBw04E.oF13m6V+eah0QUSY.WMYbNq0hD6PhSgdKOY7HvixdC.6jrkDsntlKXrIHWkym8I4yemexIiCDTHLTDfL1X5Re.YrI1dIWNu2bBiiNrOxnIdDITBAlIPcW5SBCAGjgQ880.Faz.Eec9dcItDNExfPnSDLJbDyiIyPG29MLW2gDGXJyK2t2s8gTAumvUDo3ScbKjOg9YxL3Xhda0vHi6MvgIEA1RhDBQFM5JbVZOW7Udx9OgEx9jKnMrP1pGTB7Pgqilw56Q8lybcFew4NDgLviyTg5IpvSviXNrKwyTiGEufYlG40CiZqhdV4oWqRomUIzCkicMRXmhDBmHWhrHyzgizEXhhQpC4RfGxjKyGt9qR2GiGyjz4ky2ZkvWUf5OMeSC9agGb1Y.UlQ1F3ge3lMR2LgJODay3PbEYLQdZrs46IK.y8ANDnEUqUTT9y0snzesKJeKUpd8SCH7PeQXgGrM3wlJ3ZEIC7cgvv.3KSzQ4738DjfRW578FpNjk5iMQFEDmtzwSDwkEROpu1wj7MGJV0ja+kzonw+6TTEo8Z56Zjiuamv26i6bPe6IocHhu2b.eA3J7gho4iDbg+bAmQymCLAjArYyff7ruziTGoT8wkdQAKJjA2GnjkWAMYyWE4HPQs7vGnNwY16zN9wcIPqu21NJTVn.8i+XB3BjvBkbCnBU3AVUHn95EBtlO2spzjsvIGRy3FB2t+ZRyK3ZRD41MY2DGmVbWPW2FmlvdmPXahSqktKHsqb.n5+aN.zDQjjwmMhn5h+MUmpii7rUycPAES3bvU8hvF0zyNjX2RamL3A2I13WpqzEsz1FoKZcwh2HuCOBMPbpZtIYfvU2y8AwHpyMO9WY1P8OUJaSKzBhaTpJ4oFW3TJUK1OSoNk6wyqrG6TYO1sxd7hJ6wKqrGupxd75U3gd1rNQRgWRomBX7f9DIQkaOfSTYtwY4neCPOMjSO
It's weird that I can't replicate this because this is nothing that is depending on the DAW or OS.