HISE Logo Forum
    • Categories
    • Register
    • Login

    Samplers as round robins?

    Scheduled Pinned Locked Moved General Questions
    29 Posts 4 Posters 1.8k 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.
    • Christoph HartC
      Christoph Hart
      last edited by Christoph Hart

      Yupp, there you go:

      HiseSnippet 2243.3oc6ZstaabbEdoj1VS1HmlKnn+bpPABoMkrnTZafUcsroDMHpksfnxETCCiQ6NjbpVNy1YmUJLF9EnOO8AouB8MHuAseyL6xcoLsDCSbJhiHzO3dlyYluy84rhGpjArjDoxqR0iGGy7p7d98FKzCaOjxEdc2yqxM8OflnYJhizCGGSSRXgdUpr7iLDpTcEO6mu89OjFQEArBRddegjGvdLeDWWP8vc+q7nnNzP1w7Qk39S2safTzVFISAdV1eSuXZvozArmPMrsjuWkew9gbsT0SS0rDuJq7PY33dCkmKb7+E7D9IQLyCs75gMxQtiLJzfXCUu1C4QgGlq2IddU9kGVXEV1YE9X+C3g7IzKrF+Z6BjBIJaOprzkAuVWM71bVvqRI3shCdefeu.EOVWrhAaeTF0Bz0ZJ34V0ao+464em6PNdHOgbRpVKEjyg+f.auVIiH5gLxIrgzy3vOb2UqAdWm7zmbW6BIbAiLfIXJJTzDmjmvHAiChXg4L2oycITrP9pwQzwrPBiFLjngOe0Z3vRzjynJx9BJrIj6QZiymIzaLfoaKGEKE3g5q4VdsF6rZM6t+HE8DBknX8YJFB1HZoEXGzcutj97HDolTd6yHg8+Y1.ay1Okus9ZcrrzZsFMWsFYVetbA2ZQEb60Z77cdCRZzVtHxXs6mJBzb3kNoMromfTh5YtplPCiRYMVs1KcaCrONGt05mq579DtNgH622wUe.APRjyPiBLzeiDlNOlo9uys86T6UF337DFFZ6N9IvYBvx7R25VtnK7GkDR0TRhVkFnSUvcMjpIATgIrHEGhAMtyOAATbw.BULlbJWDB.CPhkGQsp+4b8PqqlcFhLbxzcOBMgLjlLjbJa7FNhYKIHRUHpag.DbPvDzj3LMBBUoniwlmE63DfK355MlXtaZVRXE0vSN4DR4CINMYHjgBzFKiw2vNRCAzUHBE5qv4gRbbmlXzuIpvkg9NXGhYJq1ahxULZBN7lPMbYUBolfXIMAajhmeBHel72SQneLO3TGt4J7HODoXIQPlyMJ0XYpE5DA6bmfFuD.vstyp0DnZaBp7xH6aPY2PTNK3zxwXnjVZTnwCxDxzACaZOWylZbrF8ejDtZD2YncNEI0ajocEIlG7fu5E85921GYls15y1orxaBfLgTPAPHzj3eXaM9HNMhm4TLntH304UmDl.2KSInQWHBLCHFM040mNIyFEXjHKq3kE6u0FoXIL0Yr54vuQoL3R4QHEiCMaycHbxedhthmt8sKkt8xoy9MGvy3O2TqZ8VMIohPVe.tvmuyD1dk8au5hVKa5FL7IVMe.GNNWjWd4QqMvZfJNx4Jb7MYmrQ9lcsoS5tgEUitfpYLFgl5MkLqyP648qG9rMg1eOx5sZL8Zu70KS53M+v2YVLzxvfETyXYW94NSQ+UE14Y4UQnemznnIAylOnVXhDkEMULU5iUor58oQIlplyzScj8Xc9ImGBlmRdMm9rmojRwgnXijmwRJ7j8UxQt9wHmdCxU3pPkoo7T+P3hldqtZ+z5sdi9.qm5Bqd0dh1TwmnQ4MT5kq+N4Rbsyr2l3KYnDHZBgrDS6GVwUIBFREBVTh08Xu3Bp3BtSGcBSU9BFFxOUzNmcj69776p7Xl9SRx5fftd8Qk7wWrenY6w8rHwJI5tNxpHkq6tgsfzzGhqMa1gXP7QGgBqol5cqVSwFPTptn1wWaK.ky5jvAo3I1cqdCSI8pYaA2J.ph7MLkjbB0zZNheps1fZLJDiRE3nMLRFHkgNIApGnniFgUah1QjyKrm11fBaAHbAH6YPgJSibRlYemXPqFICPs5.f4LzeaSDSUG28l3bb4L.D4dpGygiHOGx5ijBHzT1PawposgMIGfKiggKLWOKi45MZRBLF2p4gPw3FI55NZ47at.jaSxVvAw1la.CPnLcDsfAeCAmvuBzRGY7OfSjBkqe2l7WtGYKjAU0lKTxmUCg+Wze0ue8hK5UXrlVOQl97nlWp93xzLockfP1U9hXJSXSspW.glA4l8JYBV24my6QjyHlnY5QlpMeiLE3lUnDiRQWjn7zXV1nf4Q44TZ4MwNVloB8pLUq5LC1JH85yo4kM+hYhsL1AqZ67Z2LaxrGZG2xiiwwtgu69zdVCR4on897t6gZD46C1RbL3tfZtw.UYO1YXjZ2bfU82ikbpVFa4MalIXSu5S8qKOj93xO385iahgdkgoQlI9JOIrY7+rEfudpQM6ZvcBWOtrh8cX73Mm6o2mW39A9Gx0ACmMdWZF3E1+213M6kMrp+986yBzEfcE+Ne0h9lEVLnbSGT9U98vUGrisZAxuw9L4KomwHOJep+VWxKA5eOuuDn349k.8z.MN9iUTQRrLYpMtGaD+XDzmTl3mmv5nX+iiLd4xzaKopYtz2d+NPImoL8nnIsMb4A1B3Yqs6+4a9W2uxxeOeaOy7kQsxaqWF0xyWHyU7Bnxfz66m0xv8lLrnope1KRYZXr7bCiVWJLJUec42T80dQbLwusR266mcCimXa7LixrywlTyeTLCHWoun7d6NOxeCi76KBunzat6OdUY+gwuWMGi83ihifNcFKBMkrX7CQWn9zzHcN0oi.NPJjwCkBdP4LKLGjhOX.SUF6yTgdf1b2lBJe7tGwhXzxUB9869XjASUvNwVPaQq42VbY9qequCtDSUMx6FcGW9mmcGORlpwbMGPQfJttjOJjzCMkBX42sFzprjovj64MMO65JIBsO7ewmrEaYdtR1hsxWbQ6.u0O66.6BAutC7L6.u0OE5.OecPujNvdee5.68tcG3sttC70cfutC7auNvaecG3q6.+l6.u8OE5.ei+u1A9c7Yf295NvW2A95NvyQG3eLNiQz.k7EY+roLwx2vRA5sv9aKrp+AlmIsxqR46u4Fa5MBsVdQPfwbuNrOyVlsV.Y1dAj4SW.Y9CKfL+wEPl+zBHymcoxX5p+fTsz8i+BNzCNbe6+VrJUb+KrrQ8d+Ozll5wE
      

      The problem when implementing this is that you need to take care of the note offs. I've written a helper "class" that lets you push and pop any kind of value using the event id as hash key so it will also work with overlapping notes.

      EDIT: Fixed the MIDI channel filter settings so that it actually works :)

      1 Reply Last reply Reply Quote 0
      • T
        tomekslesicki
        last edited by

        Awesome, thanks!

        1 Reply Last reply Reply Quote 0
        • T
          tomekslesicki
          last edited by

          Ok, this works great but there's one thing I'd like to implement, and that is MPE. Would it be possible for the three samplers to still support that even with the filter rr script?

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

            Yeah, you're right, this won't work with MPE then, as it needs the channel info from the original event.

            However I just thought of a much more simple solution: just use the MidiMuter module:

            HiseSnippet 1154.3oc6Y01SiaDDdcBtsI8f1q8TU+nKpefHnnD35KRHDuDHmh5EHBycsRmNcZwdRxJr20c8ZJnS2+w9Sg+As650I1F7A4bKm3tl7AD6yNy5mY1YlGGk9blCDFx3HiZGeQ.fLdfo8ETwn1ivDJp6dHiEL6gCE.2RCs6EA3vPvEYXT8IJ.iZygh+b4V6h8vTGHEBgdNi3.Ok3SDon829WIddcvtvwD+LV+3s65vnsYdrHIepZ1DEfcNEODN.qLqhIx3S12kHXbaAV.gRa1k4dg8H1eR01+bRH4DOPsnExVdPZXT6QDO29ii0PDx3S6mF4U0Q9iL6QbISvSy.eY7FVodjMGXTIOklKGkZ81nTGlmq5.dKzyHC8lSSuGZZ6vIAhzcTb6qSPSYWqbzSuKpRmJlxbanv5LL2xORdeFZso0KhuqWcHHxE5KsnZYOkUsVrwJyW2pfO2pqqUdWWewFubih8c95bXnEm2k5BmKCglanQupcChnNBBiZwnGvDvgzkZT+0Zy7XNXOKxjCPiVu1.IG7k3I4mFZ7Wmd19qFBhcDBN4DoEK0bkI7361TedKubiMhM+MZuz+MwpkWdirnjAKMIL1L4YtpGPGJF0H8YlMRq+l5WKtFLPEX0qck8ZynBNyyC3EtspwieSNtDMx+DfuhrdwKBlXnrZLe4d8oqbWV6I.pHigLZWJQbX.jz5N9ZZLRKzj.LqQowUVz3vo.yRgtdOFpslSx+6Yc2CKvp1tDLocA.WPTQnwdvYxYX5lvZl6AgmJXAxoXWqCUNmf4F4gE4GdnlRlrgLEmq6rq5oERDWjcJ56vDklENQoUQQ6TR2GZ1mHbFULeqT.ekYs6Z9lLeddy8GL.bDojcNyN+dYGFWNprflJetoMgBwiwhIx2Du152vmAVOAn.WkTacCZk+0zpUFL0ZkG5HjO9i4XZX.KL2AaC9jiYTUFIE7YgPGN7GGotkyh2lg4Et0ka0QFjE5iMVDwiKW1wmEQE4JOp9uTfrn6Di4tqzuqNcz6VzrqNtNYhjVLSdP557UGWMIUZVjNUynRxPPoohX1rPx6JrajPHarItJHxPJiCIPwC6ydiilhy3KLGPN2VD4bpZdcXAGx6sQkUmt98a4xq1XNZS7C7f8omAdR8fXN9URAfA3HOwXz72i8XTVvHFk3jsE3HP9JCCGB7rbuv.R9xExW4ME4QaeD3A3rsye+1OU1Fh4x7DTxbw6Pg7Mce8slZ5ZoFMY8wgDW0+eJwcDKRPnC6gkEpmiLLOHx2Vpr3.RlPofm7AYZTQMdQutoZsVZg5Fu3ukeR1rkZsQxlsFuYYkQW6dhL5kaMSF89mL5ZyjQ+nPFcsYxnyjQmIid2Iit98kuM51eXKi179hLZy+KkQW+C.YzjialL5MHit9LYzYxnyjQmBYz2GOCerCm8JG8PKUs7mEiHiaZ7unYMydp0VsFOkxzr4pMQ9xoxuxwQkt+AY9oXeVqD9rdI74wkvmerD97SkvmetD97K2nOJAwchDLecqnDn+9w+1PFF6SwxJ43pdz+.fJy6PD
            

            You don't need to take care of the note off events here because that will be handled by the module itself (as long as you enable Fix Stuck Notes).

            1 Reply Last reply Reply Quote 0
            • T
              tomekslesicki
              last edited by

              Nice! Now one last thing - what if I want to have 6 samplers playing in each RR cycle?

              So:

              RR1: Sampler1, Sampler2, Sampler3,Sampler4,Sampler5,Sampler6
              RR2: Sampler7,Sampler8,Sampler9,Sampler10,Sampler11,Sampler12
              RR3: Sampler13,Sampler14,Sampler15,Sampler16,Sampler17,Sampler18

              I was able to achieve that with the filters and I'm sure it's doable with the logic here but I always sucked at maths ;-)

              ustkU 1 Reply Last reply Reply Quote 0
              • ustkU
                ustk @tomekslesicki
                last edited by

                @tomekslesicki You can put them in 3 containers

                Can't help pressing F5 in the forum...

                1 Reply Last reply Reply Quote 0
                • T
                  tomekslesicki
                  last edited by

                  Nice idea! Can I put the samplers into containers without copy-paste? It changes names of the modulators and I have quite a few of them...

                  1 Reply Last reply Reply Quote 0
                  • T
                    tomekslesicki
                    last edited by

                    This post is deleted!
                    1 Reply Last reply Reply Quote 0
                    • T
                      tomekslesicki
                      last edited by

                      Ok, I've tried to make this like that:

                      On init:

                      const var muters_a = [    Synth.getMidiProcessor("MidiMuter1"),Synth.getMidiProcessor("MidiMuter2"),Synth.getMidiProcessor("MidiMuter3"),Synth.getMidiProcessor("MidiMuter4"),Synth.getMidiProcessor("MidiMuter5"),Synth.getMidiProcessor("MidiMuter6")
                                           ];
                                           
                      const var muters_b = [    Synth.getMidiProcessor("MidiMuter7"),Synth.getMidiProcessor("MidiMuter8"),Synth.getMidiProcessor("MidiMuter9"),Synth.getMidiProcessor("MidiMuter10"),Synth.getMidiProcessor("MidiMuter11"),Synth.getMidiProcessor("MidiMuter12")
                                           ];
                                           
                      const var muters_c = [    Synth.getMidiProcessor("MidiMuter13"),Synth.getMidiProcessor("MidiMuter14"),Synth.getMidiProcessor("MidiMuter15"),Synth.getMidiProcessor("MidiMuter16"),Synth.getMidiProcessor("MidiMuter17"),Synth.getMidiProcessor("MidiMuter18")
                                           ];
                      
                      const var muters = [    [muters_a],
                                              [muters_b],
                                              [muters_c]
                                         ];
                                           
                                           
                      reg rrIndex = 0;
                      

                      And note on:

                      function onNoteOn()
                      {
                          local index = 0;
                          
                      	for(m in muters)
                          {
                              m.setAttribute(0, rrIndex != index++);
                          }
                          
                          rrIndex++;
                          
                          if(rrIndex == muters.length)
                          rrIndex = 0;
                      }
                       
                      

                      But I'm getting this error:

                      onNoteOn() - Line 7, column 26: Unknown function 'setAttribute' {Q3ljbGVTY3JpcHR8b25Ob3RlT24oKXwxMDN8N3wyNg==}
                      
                      1 Reply Last reply Reply Quote 0
                      • Christoph HartC
                        Christoph Hart
                        last edited by

                        You're wrapping the muterX arrays into an array again, so it doesn't reach the actual modules.

                        Try

                        const var muters = [    muters_a,
                                                muters_b,
                                                muters_c
                                           ];
                        
                        1 Reply Last reply Reply Quote 0
                        • Christoph HartC
                          Christoph Hart
                          last edited by

                          Oh and the onNoteOn callback is also wrong. You need a nested for loop (and make sure you don't increment the index in the most inner loop, but in the outer loop so it reflects the actual RR index.

                          T 1 Reply Last reply Reply Quote 1
                          • T
                            tomekslesicki @Christoph Hart
                            last edited by

                            @Christoph-Hart I think I understood half of this sentence :D

                            1 Reply Last reply Reply Quote 0
                            • T
                              tomekslesicki
                              last edited by

                              If you had a bit of time to help me out so this, I'd be really grateful :-)

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

                                HiseSnippet 1326.3oc6a99SabCFG+tDtokrBacqZZuzCsWPTYzDHjMoJD+H.UQqAhHz1IUUUYtyIwh6ry74ieHT+eb+ov+AaO9tK4t.GPVZSEk47hn3G+X6u9w1Oe7cBZI31Deetvvrvgm2mXX9Hq1myj8p2CSYFM11vbNqlXeIQfhLs048w99DGCSy7uPYvrvLFgetb8svtXlMIwjgwq4TaxKodTYh0Va7GTW2cwNjCodo7t5FMr4r5bWd.nm7VkM5isOF2krGV4VNKCyuZGGpjKZKwRhug4LawcNucO9orH+eM0mdjKQUnhQanihLuK20QoXkUi58ntNsFLu8MLLK1JIJjOJJ7DqlTG5P6IQiuKrBTRKRGOLycaxqRZ4UNS4UNK4YlRdyDIuGa01VP6KSpQoseH1Zh5pLh7hp0HWm7VPb1WhNAKPdAvZqOZMzaea3B+RcIxQl6KLupXSkaUluzhn6zqpyW5cKNaQTFet6gX4wZHV8iYHVYrFhZvP7trGhYKJHcQBQClC4LHxU94QVupecBX1RJmg3r83Rx9rEJU7hH2b41XWDcXGDYsXgNfF5ioBnp3UlRQUcQR2q7wS4fxwRI1uXTE3sjOQtoTJnGAczBkWbnh+40hF4ROeXC9PRaS90ydFpI+DBR1i.MvVP7HLXmsZF0iHHHNHSI5T3rL5nTdPbP0PR3jsOXCxbfcP7NH4o7jdNb3e5Sim1wCdz2whbXkQeS6rvv38ZwQlkbIrtxdoh.oWRJ9ghWaAnSG0JPwBWot5blTvccIhLqVkjRbaMbAVf2QDwhv4I2.xPGgSqilNn3MmNHc1J3roDBiobjyZvnx86SFVNZ+z.KkMFNASaJYdk1Z3zIC2RLc8bPF0izD7qW0XarDqRKEaC7qOQHopYn41jSf78QIoJXsMw+XIuOjw+ZYvf7nbm.WrbzjqJhRbEPHdjrWMTilOUddZhyGcF2r.BiqberUKpztW15MWF5EhZSa8Fyul0ZmNcH1xDwNi0t+4mVX0cIk4hjx2X0lxHg4aCExOFVF8FLjY4EDFQnBpUtk6U72i68J5O12qXeaIL7GJvL+9b+Q531DO5gblJhjX7U9jcEj+5.0pbZ604XQlUc456BSxLaSarLPDtcYSOd.SNx1i7i8Zx+g62Lyz59M4GusL2wcZxOXexP1anRdTR4Q2cb0fT9wKHcaY0LyEmDDbUFpl4huK0VARIbvl5nLQ6x3BRrovj8oW7LFi93as5POqsLv9XU9Z+q1IWt9muTkeZV7JLPisod8cI6vNg3B7fPM98..nCNvUNv5nqiM4Ld+dbF0NcT7.BbiktcIhzZOyIDb2F3wCRr7jMNf3RvoON+Ka7R3XHV.wIxDFKpL9whaa85mrhjKRkZB8v.wk++mHtC3ARJqaSLrQ8LCSq8B7ZCjEaBnDFi3BCjkYNU9fnxkUkiPKLmvB+C7ItxJpxlwUVYPkSJFc46IXzKWWiQu+gQW9K.LJP.0Xz6.itrFipwnZL5zCitx8kmFcCMF89GFcEMF8AAFcEMFUiQ0XzoGFsp9k5pwn2HFsp9k59f.iVUiQ0XTMFc5gQWU+Rc0XzaDitp9oQePfQWUiQ0XTMFc5gQqoeotYgQm7i2ewiNqoQmOHPm0znSM5TiNGCz4miwvCaK3u2NJokZu7WGZAl2rv+MdJX0TUFUYPVJKqxKU1vCxJ+daaU39Wg3S1sY4InMqLAso5DzlUmf1TaBZyuMAs42u01n.haFH4dQGEACs1I7OxeSycXXXmb3tdi+EfGr3z6
                                

                                Interesting part:

                                const var muters = [[Synth.getMidiProcessor("MidiMuter1"), Synth.getMidiProcessor("MidiMuter4")],
                                                    [Synth.getMidiProcessor("MidiMuter2"), Synth.getMidiProcessor("MidiMuter5")],
                                                    [Synth.getMidiProcessor("MidiMuter3"), Synth.getMidiProcessor("MidiMuter6")]]
                                                    
                                reg rrIndex = 0;    
                                                
                                
                                function onNoteOn()
                                {
                                    local index = 0;
                                    
                                    for(pair in muters)
                                    {
                                        for(m in pair)
                                        {
                                            m.setAttribute(0, rrIndex != index);
                                        }
                                        
                                        // Move the incrementation here or it will be incremented 6 times instead of three
                                        index++;
                                    }
                                    
                                    rrIndex++;
                                    
                                    if(rrIndex == muters.length)
                                        rrIndex = 0;
                                }
                                

                                This should be adaptable to your setup without too many hurdles...

                                1 Reply Last reply Reply Quote 0
                                • T
                                  tomekslesicki
                                  last edited by

                                  Thanks! It adapted perfectly :-)

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    tomekslesicki
                                    last edited by

                                    This post is deleted!
                                    1 Reply Last reply Reply Quote 0
                                    • T
                                      tomekslesicki
                                      last edited by

                                      Ok, just a quick follow up - the solution that @Christoph-Hart posted works great most of the time but I’m getting occasional stuck notes. Any way to remedy that?

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

                                        Do the stuck notes occur with MPE or with normal keyboards too? And does it happen with the sine example that I posted or is it just with samplers?

                                        T 1 Reply Last reply Reply Quote 1
                                        • T
                                          tomekslesicki @Christoph Hart
                                          last edited by

                                          @Christoph-Hart said in Samplers as round robins?:

                                          Do the stuck notes occur with MPE or with normal keyboards too? And does it happen with the sine example that I posted or is it just with samplers?

                                          Only with the Samplers, and with normal keyboards too

                                          1 Reply Last reply Reply Quote 0
                                          • T
                                            tomekslesicki
                                            last edited by

                                            And I have fix stuck notes enabled

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

                                            54

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            101.8k

                                            Posts