Forum

    • Register
    • Login
    • Search
    • Categories

    Samplers as round robins?

    General Questions
    4
    29
    619
    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.
    • T
      tomekslesicki last edited by

      Ok, another RR related post from me 🙂 I'd like to script something that would cycle the notes between three samplers. How would you approach this?

      d.healey 1 Reply Last reply Reply Quote 0
      • d.healey
        d.healey @tomekslesicki last edited by

        What will the group setup be for each sampler?

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

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

          Each has it's own RR groups and different velocities, too. Ideally, I'd like to be able to turn this system on and off via a button on the interface so all samplers could either play at once or cycle.

          1 Reply Last reply Reply Quote 0
          • d.healey
            d.healey last edited by

            So let's say each sampler has 5 round robin groups. Do you want all of the samplers to play group 1 then 2 then 3, etc. at the same time. Or do you want sampler 1 group 1 followed by sampler 2 group 1, etc. or do you want sampler 1 group1, sampler 1 group 2... etc? 🙂

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

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

              Try a MidiChannelFilter in each processor and then Message.setChannel(roundRobinIndex) in your top script.

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

                @Christoph-Hart I'll try that, thanks!

                1 Reply Last reply Reply Quote 0
                • T
                  tomekslesicki @d.healey last edited by

                  @d-healey said in Samplers as round robins?:

                  So let's say each sampler has 5 round robin groups. Do you want all of the samplers to play group 1 then 2 then 3, etc. at the same time. Or do you want sampler 1 group 1 followed by sampler 2 group 1, etc. or do you want sampler 1 group1, sampler 1 group 2... etc? 🙂

                  I was thinking:

                  Sampler 1, group 1
                  Sampler 2, group 1
                  Sampler 3, group 1

                  Sampler 1, group 2
                  Sampler 2, group 2

                  And so on 🙂

                  d.healey 1 Reply Last reply Reply Quote 0
                  • d.healey
                    d.healey @tomekslesicki last edited by

                    @tomekslesicki I think Christoph's solution should do what you want then.

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

                    1 Reply Last reply Reply Quote 0
                    • Christoph Hart
                      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 Hart
                            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 😉

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

                                @tomekslesicki You can put them in 3 containers

                                I cannot help pressing F5 in the forum...
                                Studio427 Audio - Audio Instruments & FX Plugins for music production. Website - Facebook

                                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 Hart
                                        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 Hart
                                          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 😄

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

                                            14
                                            Online

                                            977
                                            Users

                                            6.6k
                                            Topics

                                            60.5k
                                            Posts