Sample not triggered if MIDI overlaps



  • @Christoph-Hart said in Sample not triggered if MIDI overlaps:

    Console.print(Message.getNoteNumber());

    hmm,.... that sounds way too logical. 😸
    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.



  • @Christoph-Hart I've been experiencing the audio dropout effects for about a year now. I assume it's related and has been happening on all versions.
    What's the easiest way to download pre 1.6 to test?
    I'm goin to check the 2.0 app on all the Mac + PC combinations I have available here now.



  • Overlapping example confirmed not working on:

    macOS 10.13.6
    Reaper 5.961
    HISE 2.0 AU crashes GarageBand on load

    windows 10
    Reaper 5.961
    Cubase 9.5.41



  • Hey guys. I need a little help writing a script to get around this issue.
    I'm trying to send a noteOff command directly after a noteOn is triggered.

    Here's what I'm doing:

    function onNoteOn()
    {
    	noteID = Message.getEventId();
    	Synth.noteOffByEventId(noteID);
    }
    

    In the console I'm getting an error:

    Script Processor1:! onNoteOn() - Line 3, column 31: Illegal operation in audio thread: String creation 
    

    ¯_(ツ)_/¯



  • This post is deleted!


  • @Christoph-Hart said in Sample not triggered if MIDI overlaps:

    HISE processes incoming MIDI messages and creates the event IDs, I suspect there is something fishy going on in this logic.

    @Christoph-Hart This is correct.
    I've made a more simple example that contains only:

    function onNoteOn()
    {
        Console.print("on");
    }
    

    and using this midi file with an overlapping note:
    midi tes.MID

    If you overlap midi events of the same note and same channel, the 2nd noteOn command doesn't even make it into the Main Container.
    If you look at this example, the midi event contains 4 midi notes, but only 3 make it into HISE.



  • Chatted with some code slingers the other day who pointed me to here:
    Screen Shot 2019-01-17 at 5.45.39 AM.png



  • The synthesiser class in JUCE is only partly relevant, I think the culprit is the way I am generating event IDs from the MIDI input. The problem is that there is no "correct" solution, as soon as MIDI notes with the same channel and note number overlap, things get into undefined territory.

    Currently I have only a single slot per note number, the first way would be to change that to a FIFO queue, but there are performance implications that have to be evaluated against the edge case of people not using their piano roll correctly 🙂



  • I've just started going thru all of the JUCE tutorials. Very interesting stuff. Also thumbing thru the HISE code to learn how you're handling these situations. It's all over my head at the moment, but I'm interested to see the solution.

    @Christoph-Hart said in Sample not triggered if MIDI overlaps:

    there are performance implications that have to be evaluated against the edge case of people not using their piano roll correctly

    man... I think all of my beta testers are the "edge case". 😂 They draw in midi for basic drum beats, then drop a midi note right on top of another note to create their flams. Every. Single. One.

    @Christoph-Hart said in Sample not triggered if MIDI overlaps:

    as soon as MIDI notes with the same channel and note number overlap, things get into undefined territory.

    I can definitely understand this issue. Once there is an overlap, how does the buffer determine which noteOn/noteOff belongs to which event ID.



  • how does the buffer determine which noteOn/noteOff belongs to which event ID.

    Well, FIFO means First in First out, so the earlier note would automatically get the note off. The other model would be a LIFO (Last in, first out" stack), but I think the result would be super weird.

    They draw in midi for basic drum beats, then drop a midi note right on top of another note to create their flams. Every. Single. One.

    It will probably come down to a preprocessor definition that customizes this behaviour on a per project basis. This problem is more apparent on drum based projects, because you don't need your super VA style Saw synth to flam 🙂


Log in to reply
 

2
Online

472
Users

1.6k
Topics

11.8k
Posts