HISE Logo Forum
    • Categories
    • Register
    • Login

    Essential- choke / exclusive/ voice note groups

    Scheduled Pinned Locked Moved Feature Requests
    drumsessentialchoke groupexclusive groupvoice group
    32 Posts 5 Posters 4.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • d.healeyD
      d.healey @gorangrooves
      last edited by

      @gorangrooves said in Essential- choke / exclusive/ voice note groups:

      Compiling of HISE: once everything is setup the way it should be, it happens in a couple of minutes. However, setting it up, figuring out what is wrong when you not a software developer can take a day.

      It is handy for people who want to mess around with HISE to have a pre-built installer. But ultimately if you want to export plugins from HISE then you will need to have the correct compile environment set up anyway so at some point you will need to take a day to set this up.

      The more options there are that can be achieved by clicking on elements and selecting possible scenarios, as opposed to scripting them, the better.

      You'd think that would be the case, but it is not always so (especially for programmers) :)

      For example support for vector graphics. Currently, it is an awfully difficult way to implement it. I have to convert an SVG using some tool in JUCE, then strip some tags, end up with inferior monochromatic vector made up of numbers that mean nothing to me. Import into HISE, then mess around with Paint scripting trying to rebuild what I had just undone...crazy! The way it should be is: Add graphic-> select SVG file-> DONE! There is absolutely no need and justification in my mind to jump through these additional hoops of undoing something that was done, just to rebuild it using lines of code. Not practical and makes no sense. If I can simply upload and use an SVG graphic on my website, I don't see a reason why a sophisticated piece of software like HISE should not be able to do that. No need to have all the graphic tools of Illustrator built into HISE- just need to support a simple SVG import. Done.

      This I agree would be useful, although I know it's not a simple thing to implement.

      Loading a custom font: click, browse to font, select-done. Then, when selecting the fonts for text, the fonts that are most likely going to be supported on end users' machine and those embedded should be separate from fonts only available on the local machine.

      This would also be handy

      Currently, you have to know about it by reading the manual,

      You should read the manual anyway :p

      Libre Wave - Freedom respecting instruments and effects
      My Patreon - HISE tutorials
      YouTube Channel - Public HISE tutorials

      1 Reply Last reply Reply Quote 0
      • gorangroovesG
        gorangrooves @Christoph Hart
        last edited by

        Hey @christoph-hart,
        I managed to get the open/close hi-hat script working from the HISE snipped you provided. The previous copied script I was trying did not work. One small step for you, a giant leap for me :) Thank you so much!

        I need to expand on this a little bit, as open hi-hat can be muted by either normal hi-hat sound or foot hats, and I was wondering if you could help, please. Following your example, I created an additional combobox and copied values over from the ones you created. I gave the combobox ID "trigger2".
        I also added the following line to the oninit:

        const var trigger2 = Content.getComponent("trigger2");

        What line of code do I need to add to have "trigger2" mute "target", in addition to being muted by "trigger"?

        Thank you so much.

        Goran Rista
        https://gorangrooves.com

        Handy Drums and Handy Grooves
        https://library.gorangrooves.com

        Dan KorneffD 1 Reply Last reply Reply Quote 0
        • Dan KorneffD
          Dan Korneff @gorangrooves
          last edited by

          @gorangrooves
          In @Christoph-Hart 's posted snippet above, this line of code identifies the key (or keys) that cause the choke to happen:

          if(Message.getNoteNumber() == (trigger.getValue()-1))
          

          You would want to use the || operator (which means OR) to add another note number to this IF statement.

          if(Message.getNoteNumber() == (trigger.getValue()-1) || Message.getNoteNumber() == (trigger2.getValue()-1))
          

          This would make your IF statement run when trigger OR trigger2 is played.

          Dan Korneff - Producer / Mixer / Audio Nerd

          gorangroovesG 1 Reply Last reply Reply Quote 0
          • gorangroovesG
            gorangrooves @Dan Korneff
            last edited by

            @dustbro Thank you. That makes sense, but unfortunately, it doesn't work. I get the following error:

            :! onNoteOn() - Line 3, column 106: Unknown function 'getValue'
            

            Did you manage to get it working for you?
            I also thought that just adding something equivalent to OR would do the trick, but the exact syntax is where things usually fall apart.

            Goran Rista
            https://gorangrooves.com

            Handy Drums and Handy Grooves
            https://library.gorangrooves.com

            Dan KorneffD 1 Reply Last reply Reply Quote 0
            • Dan KorneffD
              Dan Korneff @gorangrooves
              last edited by

              @gorangrooves I'll check it tonight

              Dan Korneff - Producer / Mixer / Audio Nerd

              1 Reply Last reply Reply Quote 0
              • Christoph HartC
                Christoph Hart
                last edited by

                There you go (not sure what you did wrong, but the error message is indicating that your component reference didn't work).

                Now imagine this being a part of the official codebase. I would have either made it 100x more generic in the first place in order to support every possible use case (what if the next user wants 3 choke targets. What if the next user wants 3 choke targets and 2 choke triggers with different decay times?) Or it would be constantly updated and most likely breaking backwards compatibility.

                HiseSnippet 2115.3oc6Y8taabbD+njt5nqwNw.I.4iKbJPnPsTH0+r.DLB+uhPsjELUraQQg6p6VJtPG2k8t8jEarQ6aPeIZeNZe.5GxiR9X+V6uYui7NJQaQED6VTGhgb2a2Yl82N6Lyt6wihz9h3XcjSokOdzPgSoOzs6Hkoey9boxY+VNkti6A7XiHhk1TiQC4wwh.mRkVbOpgRKuji8y2+UM3gbkuHuIGmmpk9hGIGHM4sNr1uRFF1gGHNVNn.2aVaeespoNTm.7rnaEmgb+y3mJNjSrsfqSoeV6.oQG00vMhXmRK0PGLpae8KTo7+TYr7jPA8PUmtPQoM2QGFPHlZ0oYeYXvQim2wNNkbOJ2JrXpU3SbOPFHmzdt03iscvxknn8nzBuI3UsH7pL2vyo.5VJEc.D5fjPtYZjQKGYcH0SuRsuxHTwRynhKW+WEt208Howu+rw6By.uXg5sMdyV7usa6d8D9lbvtjame861U56jBketaWoRXiHs.4SsOydF+bAaOgRDQF02PL428ieL4i8MXzONhqhGpimRwcECjGqUjAIuwuIVzIR7GdBsHWr8lZdzL656+pNXNNSY5xMIQVuk5CzIJyTdGKN2KIyN2PkYkaXo2V4FVb9f2LfToqFgcW2t9Qxgl7dRyb2ru9LAKsuoPSVSK7utkaSMEqYVKVX9Zg7z9lxaUYkcusWg1elLvzu71UrseaO3PDaXmyiXFdzoBC6grwLimZpGLD9.JS46k188VY2hhDIO8TraxqUlz9uGMTWQp0uNwV+dWFhABe9nWqX1dsx38keIiUWwpGEA9kwLdXrlwYVMwUl6yDmKTLYOlzvdAhUXmHXC0CorWh.F8aDSqJLxhyMORFSVme6uaWq9GvwpQbRjfzQedLSnzIm1mEC+BrMGyfA7bsL.icn125myBRhjpSYl9BlRaDOVw7QumfMF8xFf0hDwhnyEk2dyU1sWhx2JmVcnk8xq38s21igOjJCYpjAmXM+G.GELnjAg37Pa6kWg8KYU2MU.6OxdkGKxCGuLPx7TdXh.r+xWxtR+qWfgUrZICB4vvZ3sr.nXenfL6lycdM.jhB8PVkUx6rf9oOvVWO7E7QwrjXg010SGwVas0XRE.fdHsNNRmvBzpuvvTBrBRbIUAhKlRSPtxzBuY+.R1LS9JSwykF7L.zUnBlrrwz85AWoAC3nQBKTGmJIOJq1YxfqnCaV+0rK5850XT6TTLFMHnpHyuZxSuJGMhvXw+Sain8aX5DyD6zseMVAdPvS0gICDjDiGr6WvK59rUqR4mtdihWgwuYn.ApHdxN3w4FtrHKep+xYZMUajMkrLEiJro4tpOewQ539HkBHkfRPyiFgzG9bxxSlXa9jynel3vviLxdReI.2HF407062scQM5yofbzoUtL14YyD6ZIxachLDGhhEI3wHuzDwGG6SIjpOYfJWv7UbjpGPq7.762hRQQPLjRrUVZ9BZnCRcLxQblO89sV4JVzgIw8KWH0yXu5UlXjek2kyg0q2kShc9MJ+04y6hzyDYt4Zl7TkNRLY4XUJ9cP5HVThwgx5gHRtub09bCCaaLdKhyDhgLJ+MHDYcE6e5nXsAkMQIhYaDnsthzggzzy6a8Vd5doyqMyNxDKyQ89XOILuGyGN5vzmGwa9NOhe51nEXTq1WIMOFFfwOmtwy3Vp3LYYrXS4SphsZmLyfs7llwwly1ZmNsVF6fUi8fQ2I6fQcCkAhHGIN7ysbsYMbrliIGf76tnlykE9iyDFmW3DcC8EVw+.2TOoKI+e9v4T9kcy1j7RJv4n4TAdiUv5WFBOtly2reKtgSGRLyn.C0PABLok3RsDmiS9mdjwkcaIhOynGBKxjCDglMYWAJcjeD+DQX171VupyE3ByktCFuQTEZfEvQha8UJsXLtav9pinijXnm6aORY9rbiZufNLYdCOulQbAX3iROrZ.63TyqSAP4csKlWLQgrWVq3kb+6CjAAghiz3xjzkLmzyuoVrQLrq7OJJdyiA7bMU6uTKNoWOIMgcYChcRA5GBCGcjR68jtzj42WqHru073FMs47tnR5vL9v6YlCoQ.Drv+rjqWyUW2q4mieZQeoJsw2NzW5g8nuTk5zWpRCRfUqRBUEBUkDpJDpJDpJITUHTURnpPnpjPUgPPfJPlJds.gh1U75.B01CDJpCBEM.WjxgdIUCMCkR5EpjzJTHoSnRvEAcfZB3.2.xDpAfILC3RHF.FbsAXbCuVfPQ6M75.B01CDJpCBEM.WaBF2zqEHTzdSuNfPs8.gh5fPQCv0Vfws7ZABEs2xqCHTaOPnnNHTz.bsMXbauVfPQ6s85.B01CDJpCBEM.WO.L9.uVfPQ6G30ADpsGHTTGDJZ.t1ALtiWKPnn8Ndc.8463X81bK8mRuN7b42jm9vJ5e8pNNezXGmL99IOm2e7bttr2qm50729QO68cm1oiU8FAqMJj+9eDWapW52aE3s9bGuUX2Vqoa2R+T.266Abuydg7KNeuU4q4cDt7XL1UNXXnns5bQHNTX1aguknGOIzLo0hf7.sROruVI8KFQ9Dw3sfJ.8YNepaLb+yxa4Sp8DAtQcwWZ7un1ijJbIaXlD+.ME27WW5LWt9L2T3ZOXG6+O9eTV78y+GkmnSL3F2GvgiJE1dXxft5jHeAPhRIBioP4EnsNSetx38Bo2Ym8g+M9j0YU54RYcVcbmuSFiAb+H8y8SuUH4K+A1Vv7VY+GQW18.5Yraa1MAIaCtvi7499jwdUXclsDqeikXiarDadikXqarDaeik3A2XI14MHA8G9TOwnGjF5gFNps8F3kJ0VQGaw5k67efiUDd.
                
                gorangroovesG 1 Reply Last reply Reply Quote 0
                • gorangroovesG
                  gorangrooves @Christoph Hart
                  last edited by gorangrooves

                  @Christoph-Hart Thank you so much for the updated snippet. 👏 The script works great. The first line of code was different from I had (and what was in the original). From -1 to +1. Not something I would have figured out in 100 years. :)

                  If you were providing the hardcoded script in the current form, then yes, you would need a thousand variations. However, there is a much simpler and more practical way to achieve the same.
                  The way to achieve this (as is the case with most samplers) is to have choke/ voice groups. So, whatever elements are in group 1 (for example), they all mute one another. There is no need to specify trigger and target. Every note in a group is both the trigger and the target or every other note in the same group. So, in the case of hi-hat: open hat is not the only one being choked. A closed hat should also be stopped by open, as you can't play both at the same time in real life. However, because closed hat has such a short duration, muting it becomes unnoticeable. Especially if a decay is set. By the time decay is done, the closed hat sound is finished anyway.

                  So, if you could create that little option, not only will you make it easier on every future drum producer using HISE, but also on yourself, as you don't have to keep on tweaking and customizing code for the same function. Makes sense? :) Take a look at how it is done in Kontakt for example. This is a standard feature on other samplers.

                  Goran Rista
                  https://gorangrooves.com

                  Handy Drums and Handy Grooves
                  https://library.gorangrooves.com

                  1 Reply Last reply Reply Quote 0
                  • Christoph HartC
                    Christoph Hart
                    last edited by

                    Well to be fair a open hi hat sample should not be choked by another open hi hat sample (same as ride cymbals should not kill themselves when retriggered), so this is clearly a compromise due to the choke group logic.

                    gorangroovesG 1 Reply Last reply Reply Quote 1
                    • gorangroovesG
                      gorangrooves @Christoph Hart
                      last edited by

                      @Christoph-Hart No, I don't mean for one note to choke itself. For example, lets take A, B and C notes.

                      A can choke B and C
                      B can choke A and C
                      C can choke A and B

                      But,
                      A can't choke A
                      B can't choke B
                      C can't choke C

                      So, each note follows the polyphony of the sampler, but choke group creates monophony only between different notes. Makes sense?

                      Goran Rista
                      https://gorangrooves.com

                      Handy Drums and Handy Grooves
                      https://library.gorangrooves.com

                      gorangroovesG 1 Reply Last reply Reply Quote 0
                      • gorangroovesG
                        gorangrooves @gorangrooves
                        last edited by

                        @Christoph-Hart After doing some testing, I have discovered a little bug that needs a tweak.

                        When hi-hat note overlaps in duration another note of the same kind, the second note is not played. The first note is not being treated as a one-shot note. Take a look at the following examples:

                        1. All 4 notes are short and play properly (all closed hats)

                        HISE-hats-playback-ok.jpg

                        1. 1st note overlaps all others and the 2nd note does not play (all closed hats)

                        HISE-hats-playback-skipping.jpg

                        1. 1st note (closed hat) overlaps the others. 2nd note is open hat and it plays, but 3rd note (closed hat) does not

                        HISE-hats-playback-skipping-3rd-note.jpg

                        In any combination, the note immediately following the long note (a.k.a. the 2nd note) does not get played.

                        Can you please take a look at the script you made and revise it, so that all notes get treated as one-shots regardless of their duration?

                        Thank you so much!

                        Goran Rista
                        https://gorangrooves.com

                        Handy Drums and Handy Grooves
                        https://library.gorangrooves.com

                        Dan KorneffD 1 Reply Last reply Reply Quote 0
                        • Dan KorneffD
                          Dan Korneff @gorangrooves
                          last edited by

                          @gorangrooves @Christoph-Hart
                          I've already noted this previously. It's currently impossible to create a drum plugin until it's sorted :(

                          Dan Korneff - Producer / Mixer / Audio Nerd

                          gorangroovesG 1 Reply Last reply Reply Quote 0
                          • Dan KorneffD
                            Dan Korneff
                            last edited by

                            Here was my thread

                            Link Preview Image
                            Sample not triggered if MIDI overlaps

                            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 situation...

                            favicon

                            Forum (forum.hise.audio)

                            Dan Korneff - Producer / Mixer / Audio Nerd

                            1 Reply Last reply Reply Quote 0
                            • gorangroovesG
                              gorangrooves @Dan Korneff
                              last edited by

                              @dustbro Oh, man. This is no good. This is an essential feature we can't do without. This is standard on every professional sampler.
                              @Christoph-Hart How quickly and what will it take to get this resolved, please?

                              Goran Rista
                              https://gorangrooves.com

                              Handy Drums and Handy Grooves
                              https://library.gorangrooves.com

                              1 Reply Last reply Reply Quote 0
                              • Christoph HartC
                                Christoph Hart
                                last edited by

                                Alright, I‘ll ramp it up on my priority list then - I think the problem is that the system that assigns the event IDs is not supposed to accept multiple notes at the same time, but it shouldn‘t be too hard to fix this.

                                gorangroovesG 1 Reply Last reply Reply Quote 1
                                • gorangroovesG
                                  gorangrooves @Christoph Hart
                                  last edited by

                                  @Christoph-Hart Thank you so much. I have full confidence that you will nail it. And i promise you that it will be well worth your time. I will be releasing 15 drum instruments this year, as long as i get the first one working 100%. We are almost there!

                                  Goran Rista
                                  https://gorangrooves.com

                                  Handy Drums and Handy Grooves
                                  https://library.gorangrooves.com

                                  1 Reply Last reply Reply Quote 0
                                  • Dan KorneffD
                                    Dan Korneff
                                    last edited by

                                    giphy.gif

                                    Dan Korneff - Producer / Mixer / Audio Nerd

                                    1 Reply Last reply Reply Quote 0
                                    • Christoph HartC
                                      Christoph Hart
                                      last edited by

                                      Check the develop branch :)

                                      gorangroovesG 1 Reply Last reply Reply Quote 1
                                      • gorangroovesG
                                        gorangrooves @Christoph Hart
                                        last edited by

                                        Hey @Christoph-Hart, the hi-hat choke script you provided a while back has been working great for the regular hi-hat. I have since created an advanced version for variable hats which has several stages of open and close (tight, close, 25% open, 50%, 75%, 100% open). These are nested containers and I switch between them using CC64 controller. I have altered your original choke script to allows CC64 to choke notes. It works great.

                                        Now, the next step where I am failing is that I am trying to add a choke script on the parent container (that contains 6 child containers) which would choke a note using another note. Basically, the same as what we achieved with your original script. However, it is not working properly. It starts working, then it fails. It gives me a number of warnings, such as:

                                        Shank100 Script:! onNoteOn() - Line 28, column 36: Illegal operation in audio thread: String creation {U2hhbmsxMDAgU2NyaXB0fG9uTm90ZU9uKCl8NzQ0fDI4fDM2}
                                        

                                        The line of code in question is:

                                        Synth.addVolumeFade(eventId, decayValue, -100);
                                        

                                        This happens for all child containers that get played once I start using the controller. This "choke by controller" script is present in 4 child containers and works great until the parent "choke by note" script is enabled. I am guessing that there is some sort of double volume fade clash, but I don't know how to go around it.

                                        Can you help, please?

                                        Thank you!

                                        Goran Rista
                                        https://gorangrooves.com

                                        Handy Drums and Handy Grooves
                                        https://library.gorangrooves.com

                                        Dan KorneffD 1 Reply Last reply Reply Quote 0
                                        • Dan KorneffD
                                          Dan Korneff @gorangrooves
                                          last edited by

                                          @gorangrooves Do you have a script you can share for your hi-hat implementation? Or maybe some hints on your experience? I'm updating some of my drum stuff and would like to have better compatibility with e-drum controllers.

                                          Dan Korneff - Producer / Mixer / Audio Nerd

                                          d.healeyD 1 Reply Last reply Reply Quote 0
                                          • d.healeyD
                                            d.healey @Dan Korneff
                                            last edited by

                                            @Dan-Korneff There is a built in choke group script now, will that do what you need?

                                            11c01958-0d49-408b-96f5-aa6d22c1fbc2-image.png

                                            Libre Wave - Freedom respecting instruments and effects
                                            My Patreon - HISE tutorials
                                            YouTube Channel - Public HISE tutorials

                                            Dan KorneffD 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            36

                                            Online

                                            1.7k

                                            Users

                                            11.9k

                                            Topics

                                            103.6k

                                            Posts