HISE Logo Forum
    • Categories
    • Register
    • Login

    fix channel resizing in HISE broke my routing

    Scheduled Pinned Locked Moved Solved Bug Reports
    20 Posts 6 Posters 1.1k 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.
    • DanHD
      DanH @d.healey
      last edited by

      @d-healey Yes, just one send effect into one send container. Plus I'm using 6 channels elsewhere.

      DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
      https://dhplugins.com/ | https://dcbreaks.com/
      London, UK

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

        @Christoph-Hart @DanH I managed to recreate it in a minimal snippet

        Notice on the master out there is nothing coming through on channels 1/2 (but there should be). If you bypass or remove the second container then it works. In commits prior to the one I linked to above it works with that container present and unbypassed.

        HiseSnippet 1158.3oc6Y0raaaDDdokXpkSpaSQPQNxC8fCPZfjcZR.5AIaI4.g5eDDch6sf0jirVXxcYIWpTkh9fja80n2x0dquC8Tt42f1YIorHkoDjUkchMrNX3clc39syOeyPv19BKHHP3SzJcv.OfncOcyAbYu58nLNoUCh1WqG.b6NhPIie7VgGS1ZfGMH.rIZZEdoZWZkJRh9cZ0snNTtELRDg7ZAyB1g4xjij1t1Owbb1lZCGvbSs6mVqkkfWW3HBQDUPuLwiZcB8XXOpZaKoSztSSalT3aJoRHfnUbKg8.ydh2xi2+qYArib.0hJDS7AEKdagisBwJoj58XN1sGdyCHDsun8H+PgX+vCz2kYyNSdZ+gRgwHKR6OzVJK7JjAdURCuxofWNPRKEjJFCo6qaZ4y7jiznvyc0awkfeWJ51SCk38Rz9fdcAtAt7ItzSfs8wEmYvZOqb4Gaf+4Q+X2PtkjI3FB9dBIrOesGsxusRoU98ULFWU2t4pScL9BGGvOW0pHs+zLbMdn6Qf+iM5ScBgy1Hd8y5S0mrOMcH2J9VmZiBdKNStuGvmTh.IwUg+2qZ0fJop.QhLbedfujoffVCnOlUGGVJo2.BNQJ7v75yEyvrEgcnCUlMERU2jn.8AYhapfCOfIGjttZgkWMqP795sYRqd4iwkxAinm5x.iIUieodytcAK4H.VTe6e9xozK8wu7DHEuWTQEtB7qrHHD8lYBQsBWFDf5e1Q.daszMgZoLswtS74urtINPAdhpid0nEFwHZZkRO7CHd4bvAa+D.oJcH0TOgVba3WyDkKLyWgJW3NwSHLGcU9zjJlLe1tToOC8C56E5ZhbFVPhWS02TaIUGt30kUqUfPg4nE+K9KQYE0ZsDkUFpLcpzpw9g6pahTfQbiQtfuMZswgz9fwKAjbT4glVT8uW7Dj6aIwi+.eJOvSDj4AaBtrCDbkmdjvWEfCEA+RGUHKs75BpetpNs513kLWaLoxP+nX+lthPtLSI8TItqLmD2Euk39+IqTogXzj454.M48AGbRuHL9M3nccogNxgRylKuqfK75I3LqzA5N.VCd7wfeZrm6EZSoDe8lQRdPsNfCPSmz9c01AS1n9neBlSewBhd6g5wv0PU.Zb8sgaga1CudUzH3JtYyLLD95WKFBe+9feeF71a4zucX7apbCmut8qhlK9rR0zyJOuuD8oUyq98zp4W+hceuP0ue1MKVwYKhOc3c0UCekB2EPu9ENd+T+h1IiztZxHsc.ruyQIA2XQFwxxV10QHbMYuaXkye792+wpMntdHkQhnZarw+T8PPtCZsyns8WUa3OXLYer5gLa70BSI.ekI3cPpIYQo+4h6E0GmdqTtzaEGidSQZMQ5sgJqLlx0GRTpTt9XJ2PstPhxMlzPSyF5tXjuWePGYZnS6bnykZ4KdiU72IPksubjDLSfG8ggJouqZsQERz2N.sSu7SJSbQJ12XYop69drlMeaVeNrYi4vlmNG17CygMOaNr44ygMuXp1n5tsYnT3FyIiBZ2L5Cpno0jSw54HFGx+AxUL64
        

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

        orangeO DanHD 2 Replies Last reply Reply Quote 0
        • orangeO
          orange @d.healey
          last edited by

          @d-healey

          It works here. Are you using a Faust-enabled Hise version?

          sounddd.gif

          develop Branch / XCode 13.1
          macOS Monterey / M1 Max

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

            @orange I'm not using a faust version. Which commit are you using?

            Peek 2023-01-05 13-45.gif

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

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

              @d-healey said in fix channel resizing in HISE broke my routing:

              @orange I'm not using a faust version. Which commit are you using?

              I built Hise 3 days ago, but I am not sure if after this commit or not.

              I asked Faust because all of my old projects are crashing when Faust is enabled. But they work without Faust without any issues. I can't open my projects!

              develop Branch / XCode 13.1
              macOS Monterey / M1 Max

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

                @orange Please test with the commit I linked to if you have time (813c0a7ddd15242aecc0e85466522b8c8d7ae2be)

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

                orangeO 2 Replies Last reply Reply Quote 0
                • orangeO
                  orange @d.healey
                  last edited by

                  @d-healey Ok I'll test with that commit.

                  develop Branch / XCode 13.1
                  macOS Monterey / M1 Max

                  1 Reply Last reply Reply Quote 1
                  • DanHD
                    DanH @d.healey
                    last edited by

                    @d-healey Does the same as you described here :(

                    DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                    https://dhplugins.com/ | https://dcbreaks.com/
                    London, UK

                    1 Reply Last reply Reply Quote 1
                    • orangeO
                      orange @d.healey
                      last edited by

                      @d-healey Like yours here.

                      NoSound.gif

                      develop Branch / XCode 13.1
                      macOS Monterey / M1 Max

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

                        Thanks for confirming. I just tested further and the send effects have nothing to do with it. I've simplified the snippet

                        HiseSnippet 934.3oc6X80aSbDDe2XuU3.EUpPU8w6AdHHQQ1I7mJ0GHIN1HKHIV4BTdCsr2X6U4tcut2dlZUw2M9HvGE9F.ydmS7Z3havD5ehheHJyL6byucl423wWeiV.YYZCg13vIo.gdMV3DkcT6QbohzaGB8GXYfJ5.ctUpFtc9Px1SR4YYPDgRq8X2onMpSJ979GsMOlqDvLUDxy0RA7TYhzNSa+MehLNtKOBNTl3c56sYOgV0VGqyQDUi0jjxEGwGB6wcGaEFg9cchjVsIzxsPFgVeaczjvQ5WqJO+ykYxWECNgVjP7AUptqNNxgXmVR6Qx3n9GeyyH3Cs+r7Psx7vMY6Jijmn2Oe3LDLyC+7Ack4gWs4fWKe30zCdU.IpGjpWBoavBEFYpclEGdtJqmxBlAbLs6CkxyRnuk0ViGPYuaB+HnqAENwg0dPyl2I.+ys+sA4JgUpUAZ0dZKruZsau5esZiUeypAepoACpzlKLFcbLXpzrqRaVjiqoxSdEXtSvXdbNbxAwq+74T1omS8K4hxas2A0pdJoc+TPcZMBjooJ7+dVuc3VtqPLUGdtTvXkNHP2AFic0kkkFrcfrir5Tru9ypYX2hNJOlamuExwalZ.yAyU2bEGUlzNwmWct0WcVg3MX8kVwnpw3JUfQLS8s.iSYieOqyfAfvNCf0Ycew2Fpme3uxoLT7ZEjJTBLsNOFHldlGHRqsH1vYZ.39iAyXI75+lghr+yMT7R90EM900KC+UYgHUpfiUD7epPN324igfGCHIyk7VDQ6cm+Ds8EVL7GZ3prTc1bO3PHQdnV4xByT9rL7KWg+3.W0zWeaM2Too2+nt3krReB41bSQawVI5bkct1fZKZCnVK4FP0ujr+UtjViiwXnLIMF5nFCw3FCEX7GwUDFvyisGqc9d4c0Jc5HsRJ7KzG.Vib3Pv3i8JuPaYs3ZxyzbyMO.hAteS6s17oXyF2f4IXIyEs9hWXsx50OyJgafi.F7+2gz0tXOjd5O3aWN1D9m3x.6kmDhyFE.FckBhcqdPWwMeqTtoStb3nJpP3C3moFa4joSM15Xi+iDiurk4V+e2k4Ne90rWNK+xE2tnLSnQkwn9WULlZbceOW+SLtgumabB5R3Bi9khxWXgiqckBMXFSU7FpZv10IGzhT7RLP+XMuaSRBxwdoP3JN+BRYq1m0WBe1XI74dKgO2eI74AKgOObI74WWnOtwaaka0IkjUTQ+NEuYGJsihi88EbDxGAq8fmJB
                        

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

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

                          @Christoph-Hart Bump bump, this is a pretty big bug for anyone using more than one stereo out and more than one container.

                          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
                          • Dan KorneffD
                            Dan Korneff @d.healey
                            last edited by Dan Korneff

                            @d-healey

                            the source code changed from:
                            #if FORCE_INPUT_CHANNELS
                            internalBuffer.makeCopyOf(buffer);
                            #endif
                            to:
                            #if FORCE_INPUT_CHANNELS
                            if(internalBuffer.getNumChannels() == buffer.getNumChannels())
                            internalBuffer.makeCopyOf(buffer);
                            #endif
                            Now when I add a 2nd container to the project, I don't get any sound from the output of HISE. I have to disable the 2nd container for it to work again. Do you know why?

                            The code you provided has been modified to check the number of channels in the internalBuffer and in the input buffer before making a copy. 
                            It compares the number of channels in the internalBuffer and the input buffer and only makes a copy if the number of channels are the same.
                            
                            It seems that the issue you are experiencing is caused by the 2nd container having a different number of channels than the internalBuffer. In this case, the script doesn't make a copy of the buffer and the audio engine processes the buffer with the incorrect number of channels. The audio engine then doesn't produce any sound or produce sound that is not expected.
                            
                            You can fix this by checking the number of channels of the input buffer and the internalBuffer before making a copy. If the number of channels are not the same, you can use buffer.setSize() to change the number of channels to match the internalBuffer before making a copy.
                            

                            can you show me how to adjust this code to check the number of channels of the input buffer and the internalBuffer before making a copy?

                            You can check the number of channels of the input buffer and the internalBuffer before making a copy using an if statement like this:
                            
                            if (FORCE_INPUT_CHANNELS)
                            {
                                if (buffer.getNumChannels() == internalBuffer.getNumChannels())
                                    internalBuffer.makeCopyOf(buffer);
                            }
                            
                            This way, if the number of channels in the input buffer and the internalBuffer match, the internalBuffer will make a copy of the input buffer. If the number of channels don't match, the internalBuffer will not make a copy, avoiding the problem you're facing.
                            Please also note that, if you are sure about the number of channels of your audio file, you can always set the number of channels for the internalBuffer before making a copy of the input buffer, like this :
                            
                            if (FORCE_INPUT_CHANNELS)
                            {
                                internalBuffer.setSize(buffer.getNumChannels(), buffer.getNumSamples());
                                internalBuffer.makeCopyOf(buffer);
                            }
                            

                            In my current setup, I have 4 channels on my hise project. after updating the code to your suggestion, I'm seeing signal on the output of bus 3 even when nothing is playing

                            It seems like the problem might be that you are not handling the case where buffer.getNumChannels() is different than internalBuffer.getNumChannels(). In that case, the internalBuffer should be resized to match the number of channels of the input buffer, otherwise the makeCopyOf() function will copy the data into the wrong places.
                            
                            You can try this modification:
                            
                            if (FORCE_INPUT_CHANNELS)
                            {
                                if (buffer.getNumChannels() != internalBuffer.getNumChannels())
                                    internalBuffer.setSize(buffer.getNumChannels(), buffer.getNumSamples());
                                internalBuffer.makeCopyOf(buffer);
                            }
                            
                            This will check if the number of channels of buffer and internalBuffer match before making a copy, and if they don't match, it will resize internalBuffer to the number of channels of buffer before making the copy.
                            
                            This way the code should handle the case when the number of channels of buffer and internalBuffer don't match, and match the number of channels of input buffer before making the copy.
                            
                            Also, you should move the internalBuffer.setSize(buffer.getNumChannels(), buffer.getNumSamples()); out of the if statement, so in case force_input_channels is not defined it will set the size of internal buffer to the size of input buffer.
                            

                            is this the right way to do your suggestion:
                            if (buffer.getNumChannels() == internalBuffer.getNumChannels())
                            internalBuffer.makeCopyOf(buffer);
                            else if (buffer.getNumChannels() != internalBuffer.getNumChannels())
                            internalBuffer.setSize(buffer.getNumChannels(), buffer.getNumSamples());
                            internalBuffer.makeCopyOf(buffer);

                            Yes, that would be the correct way to implement my suggestion.
                            It checks if the number of channels of the input buffer and internalBuffer match before making a copy, and if not, it resizes the internalBuffer to match the number of channels of the input buffer before making a copy.
                            It's important to keep in mind that, if the input buffer has different number of channel than the internalBuffer, you should also make sure to clear the internalBuffer before making the copy, otherwise the previous content of the internal buffer would still be present and you will get unwanted signal in your output.
                            

                            So... In short, I changed the code in hi_dsp/modules/ModulatorSynthChain.cpp , Line 252 from:

                            #if FORCE_INPUT_CHANNELS
                            	if(internalBuffer.getNumChannels() == buffer.getNumChannels())
                            		internalBuffer.makeCopyOf(buffer);
                            #endif
                            

                            to:

                            #if FORCE_INPUT_CHANNELS
                            	if (buffer.getNumChannels() == internalBuffer.getNumChannels())
                            	{
                            		internalBuffer.makeCopyOf(buffer);
                            	}
                            
                            	else if (buffer.getNumChannels() != internalBuffer.getNumChannels())
                            	{
                            		internalBuffer.setSize(buffer.getNumChannels(), buffer.getNumSamples());
                            		internalBuffer.makeCopyOf(buffer);
                            	}
                            
                            #endif
                            

                            @Christoph-Hart Is this the right way to do this? or do we need a "Human equivalent" solution?

                            EDIT:
                            simplified

                                if (buffer.getNumChannels() != internalBuffer.getNumChannels())
                                    internalBuffer.setSize(buffer.getNumChannels(), buffer.getNumSamples());
                                internalBuffer.makeCopyOf(buffer);
                            

                            ... and it works.... mostly. A couple of the routing meters show junk, but audio seems to work.

                            Dan Korneff - Producer / Mixer / Audio Nerd

                            Christoph HartC 1 Reply Last reply Reply Quote 2
                            • Christoph HartC
                              Christoph Hart @Dan Korneff
                              last edited by

                              @Dan-Korneff Nah, we must not resize the buffers in the processing callback (in the other case it works because it just shrinks the array length without reallocating.

                              But I think I've fixed it. I also spent a new preprocessor macro HISE_BACKEND_AS_FX which will use the same processing style as a compiled FX plugin (so it will not render child synths and only the master FX chain).

                              ustkU 1 Reply Last reply Reply Quote 2
                              • ustkU
                                ustk @Christoph Hart
                                last edited by ustk

                                @Christoph-Hart does this also fixes my issue here?
                                https://forum.hise.audio/topic/7069/audio-inputs-aren-t-working-anymore

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

                                1 Reply Last reply Reply Quote 0
                                • d.healeyD d.healey marked this topic as a question on
                                • d.healeyD d.healey has marked this topic as solved on
                                • First post
                                  Last post

                                26

                                Online

                                1.7k

                                Users

                                11.8k

                                Topics

                                103.2k

                                Posts