HISE Logo Forum
    • Categories
    • Register
    • Login

    Architecture of a Guitar

    Scheduled Pinned Locked Moved Scripting
    16 Posts 4 Posters 803 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.
    • A
      aaronventure @Christoph Hart
      last edited by

      @Christoph-Hart I have Sus/Mute/Pwr/PwrMute with 8/16/4/4 RRs. Sus has 2 layers. In Kontakt all of these fit nicely in one group spread out over velocities, I then have 8 groups, with the script allowing correct group for playing the event note.

      From what I gather, here I can either have one articulation per sampler, which ends up being 4 samplers, and I make use of the built-in RR/group system to put all round robins, with all strings being laid out in a single map.

      Or I go with one sampler per string, which is the exact same layout I have in Kontakt, but then it's just the question of making sure each event goes to the correct sampler. What other way of doing this is there, other than the MIDI channel method you mentioned? What if there are more than 16 samplers, hypothetically? Is there no "allowSynth()" or something like that which could be called in the Container MIDI Processor? In Kontakt it's ignore event> disallow all groups > allow desired groups > execute artificial event.

      I'm sure I can set up communication with the MIDI processors of individual samplers which would then either ignore or process the event, no? What would be the best solution for this? Global variable? Or is that too slow?

      d.healeyD LindonL 2 Replies Last reply Reply Quote 0
      • d.healeyD
        d.healey @aaronventure
        last edited by

        @aaronventure said in Architecture of a Guitar:

        In Kontakt all of these fit nicely in one group spread out over velocities, I then have 8 groups, with the script allowing correct group for playing the event note.

        Why not do that in HISE?

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

        A 1 Reply Last reply Reply Quote 0
        • LindonL
          Lindon @aaronventure
          last edited by Lindon

          @aaronventure said in Architecture of a Guitar:

          What other way of doing this is there, other than the MIDI channel method you mentioned? What if there are more than 16 samplers, hypothetically? Is there no "allowSynth()" or something like that which could be called in the Container MIDI Processor? In Kontakt it's ignore event> disallow all groups > allow desired groups > execute artificial event.

          So you have an incoming event(note on) now you need to send it to the correct sampler... so you can;

          • change its midi note (as Christoph said) and make each sampler react to only one midi channel, so we are limited to only 16 samplers here...
            or
          • have a "note generating midi processor" in each sampler, set the values you want in the processor and tell it to generate.. now you have unlimited samplers.. you can even let this processor manage articulations for you.

          In both cases you need to manage note ons and offs...

          HISE Development for hire.
          www.channelrobot.com

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

            @d-healey Why not indeed, I'm just learning about how to best communicate between different MIDI processors.

            @Lindon Thanks. Setting values would be done by creating a control in each processor, and setting its value from the main container processor, right?

            Also, global cables would fit here, no?

            LindonL 1 Reply Last reply Reply Quote 0
            • LindonL
              Lindon @aaronventure
              last edited by

              @aaronventure said in Architecture of a Guitar:

              @Lindon Thanks. Setting values would be done by creating a control in each processor, and setting its value from the main container processor, right?

              yep

              • never used Global Cables (yet)...

              HISE Development for hire.
              www.channelrobot.com

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

                What if there are more than 16 samplers

                You have 256 MIDI channels inside HISE - you're welcome :)

                A 2 Replies Last reply Reply Quote 4
                • A
                  aaronventure @Christoph Hart
                  last edited by

                  @Christoph-Hart Hah, great. I don't think I'll ever need 256 samplers, so that settles it, I guess.

                  Re: global cables, I'm trying to wrap my head around it but there's only one thread on the forum and nothing in the hise_tutorial repo. Correct me if I got this wrong:

                  I create the cable wherever by first calling GlobalRoutingManager.getCable(id). I can then get a reference to that same cable from anywhere else by calling that same method. GlobalCable.registerCallback then registers a function for the cable change, but for that processor only, right? So each processor can have its callback for whenever the cable's value gets changed.

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

                    @aaronventure yes, but in this case I would not use global cables but stick to the message type that is already being passed around: the MIDI message (or its internal representation).

                    think of it this way: you have a central post office (your main script that calculates the string) and multiple smaller post offices (your samplers). Now if the packages they send between each other are completely self contained and all information they need to process the package is slapped onto the package with a sticker, they don't have to talk at all and everything is smooth and nothing can go wrong. A global cable in this case would be the equivalent of the central post office having to call the smaller offices and tell them: "the next package you're about to receive is for post office #3", then hope for the best that this information will receive the target on time and not get stuck somewhere along the way.

                    The prime use case for global cables is to send a modulation signal (or whatever) back to the UI or distribute an UI event to different targets, but if you can get by with only using midi messages for communication you should be good.

                    A 1 Reply Last reply Reply Quote 1
                    • A
                      aaronventure @Christoph Hart
                      last edited by

                      @Christoph-Hart Agreed, and thanks for the clarification!

                      1 Reply Last reply Reply Quote 0
                      • A
                        aaronventure @Christoph Hart
                        last edited by

                        @Christoph-Hart said in Architecture of a Guitar:

                        You have 256 MIDI channels inside HISE - you're welcome :)

                        Reply

                        How does this work, exactly? Message.setChannel says it can take only 1-16).

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

                        49

                        Online

                        1.7k

                        Users

                        11.7k

                        Topics

                        101.8k

                        Posts