HISE Logo Forum
    • Categories
    • Register
    • Login

    vuuuu meter.... vu meter? vu meter master?

    Scheduled Pinned Locked Moved General Questions
    54 Posts 11 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.
    • Y
      yall
      last edited by

      This post is deleted!
      NatanN 2 Replies Last reply Reply Quote 1
      • lalalandsynthL
        lalalandsynth
        last edited by

        ok, interesting , hope this gets fixed.

        https://lalalandaudio.com/

        https://lalalandsynth.com/

        https://www.facebook.com/lalalandsynth

        https://www.facebook.com/lalalandsynth

        1 Reply Last reply Reply Quote 1
        • NatanN
          Natan @yall
          last edited by

          @yall @lalalandsynth
          Oh! Thanks, Guys For Beta Testing ANd Finding This Bug :)
          I Knew This Issues Since Last Year, But Always There Was No Answer To This

          @Christoph-Hart Can You Help Please?!

          1 Reply Last reply Reply Quote 0
          • NatanN
            Natan @yall
            last edited by

            @yall
            Volume And Pan Knob Connected To The Sine Wave Generator And Has Nothing To Do In FX Plugins Scenario.

            You Need To Connect The Knobs To A Gain Module Or To The Master Gain / Pan Controls Otherwise, That's Why You Hear No Difference.

            1 Reply Last reply Reply Quote 0
            • Y
              yall
              last edited by

              @Natanr
              yes the buttons I had not removed them from the project thinking they were put on a gain. stupid mistake.

              1 Reply Last reply Reply Quote 1
              • NatanN
                Natan
                last edited by

                @Christoph-Hart Dear Christoph, Do You Have Any Comment Over This?
                The VU Meter ( PNG Stripe ) Doesn't Work In FX Plugins :(

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

                  I'll take a look, but it might indeed be possible that the signal chain in the FX processing mode does not pick up the levels of the master container properly.

                  NatanN 1 Reply Last reply Reply Quote 1
                  • NatanN
                    Natan @yall
                    last edited by Natan

                    @yall said in vuuuu meter.... vu meter? vu meter master?:

                    @Natanr
                    i just exported the code from @Lunacy-Audio , it works in VST but not in FX plugin. there must be something breaking. i tried with an old version of hise (i don't know which one) and it works . I advise you to find an older version to export your plugin with the vu meter

                    Mate

                    Did You Exported The FX Plugin With An Old Scriptnode Version?
                    Can You Investigate And Find When You Downloaded The Zip File?

                    1 Reply Last reply Reply Quote 0
                    • NatanN
                      Natan @Christoph Hart
                      last edited by

                      @Christoph-Hart said in vuuuu meter.... vu meter? vu meter master?:

                      I'll take a look, but it might indeed be possible that the signal chain in the FX processing mode does not pick up the levels of the master container properly.

                      @Christoph-Hart Thanks Christoph, So Is There Any Workaround, Like Connecting The VU Meter To A Simple Gain MOdule, Or Something Like That?!

                      I Need This Really Bad To Get My FX Plugin Done :(

                      DimitrisSPD 1 Reply Last reply Reply Quote 1
                      • DimitrisSPD
                        DimitrisSP @Natan
                        last edited by DimitrisSP

                        @Natanr Try this...I send you a small test project with a filmstrip (107 frames) connected to a Simple Gain Module LevelMeterTest.zip

                        Then you can replace the filmstrip image with your's and adjust the code and number of frames according to your filmstrip image ☺

                        NatanN A 3 Replies Last reply Reply Quote 2
                        • NatanN
                          Natan @DimitrisSP
                          last edited by

                          @DimitrisSP
                          Oh Thanks Man πŸ‘ Will Do It Right Now πŸ™ŒπŸ™Œ

                          DimitrisSPD 1 Reply Last reply Reply Quote 1
                          • DimitrisSPD
                            DimitrisSP @Natan
                            last edited by

                            @Natanr Happy that i helped!

                            lalalandsynthL 1 Reply Last reply Reply Quote 1
                            • NatanN
                              Natan @DimitrisSP
                              last edited by

                              @DimitrisSP Ha Ha πŸ™ŒπŸ™ŒπŸ™ŒπŸ™Œ Yes Man This One One Works πŸ’― Thank You ⭐️⭐️⭐️⭐️⭐️

                              1 Reply Last reply Reply Quote 2
                              • lalalandsynthL
                                lalalandsynth @DimitrisSP
                                last edited by lalalandsynth

                                @DimitrisSP Testing this , what is that levelMeterLock ?

                                Also , any thoughts on how to change this to a mono meter , that is , see both channels on one meter ?

                                https://lalalandaudio.com/

                                https://lalalandsynth.com/

                                https://www.facebook.com/lalalandsynth

                                https://www.facebook.com/lalalandsynth

                                LindonL NatanN 2 Replies Last reply Reply Quote 1
                                • LindonL
                                  Lindon @lalalandsynth
                                  last edited by

                                  @lalalandsynth said in vuuuu meter.... vu meter? vu meter master?:

                                  @DimitrisSP Testing this , what is that levelMeterLock ?

                                  Also , any thoughts on how to change this to a mono meter , that is , see both channels on one meter ?

                                  take the input values , sum them and divide by 2....

                                  HISE Development for hire.
                                  www.channelrobot.com

                                  1 Reply Last reply Reply Quote 2
                                  • NatanN
                                    Natan @lalalandsynth
                                    last edited by

                                    @lalalandsynth said in vuuuu meter.... vu meter? vu meter master?:

                                    what is that levelMeterLock?

                                    Since This Made By Sliders, You Need To Place An Empty / Transparent PNG Over The VU Sliders To Avoid Mouse Click / Drags.

                                    1 Reply Last reply Reply Quote 2
                                    • DimitrisSPD
                                      DimitrisSP
                                      last edited by DimitrisSP

                                      @lalalandsynth Sorry for been late to answer...I just now entered in the forum!
                                      In order to have a mono functionality use only one LevelMeter...
                                      Delete ''LevelMeterR'' and rename "LevelMeterL" to "LevelMeter"
                                      Very correctly as @Lindon said ...sum the Left and Right values and divide them by 2...

                                      Use this snippet

                                      HiseSnippet 1611.3oc4Y0saaaCEVJNZHwcYqcnCXWRTzKb1ZSrS+YannKNw+T3sjZiXu1kcSJiDsMWjHEjnSSVP.1qQuauF6t7nrGg9FrcHojEsqiqgQawxp.BfIO+vuyGO7viTZEwcIww7HK6k6bZHwx9ScZeJSzuReLkY0npk80c1gbLweWhfD0gDKr19zPbbLwyx1N2SjZYu7hVpmWu41XeLykjMkk0y3TWxNz.pHa1Vk+IpuecrGoCMvP66WtgKmUg6yG.HJmSQqPr6Q3djmhkpsfik8mTyiJ3QsEXAI1xdws4dm1tO+kLs9OiFSOzmHGTxpM3H8z049dRDKm0pRepuWqzHO1xx1oUFOjSyC2zYWpGc37l7gT.JyBS9vdgoAuRlvq3rCOaC3snFd2vosaDMTjIQhsq4zfAaScwvVfIrz5Zsvm63TgCZvDqEfOhTOBFLzhBOrXw6fdPwhq9nUxuRdXiHVfNFGgx1+QOFkZeOhnBOHjyfAEtUlJ25xsdGt6QyfGjp8FdoElcolBxdC8aSCB8IxzyRfcpTZoU051k3BlXHNwz0WuJwEeJZOXiyzQUqUYq8OXus5TC7Sw0996knckAQQvpidF1e.Idk7RccGDoBCklESTTlgGgpf88ODxkMcs.zqFqGkQVyMh.qqR0lG9aRHJQkXsXhPMYp4E5Nf4JnbVgUWI+YR2qBsgn.kQ4fyKXDlJNSiYk3BkV8all3hqtJZczFOBgjdU+25q2hfOBYtjZQxEMDDktv6hA5N.eRA0D2QCHYDoUGgncQExL3GFxbqpEiPmk9CjIqNzjGkJ9b8OH9wjoY5W+XiMxwMV9H2qzgHjFPODLAx0NlDECbsd969t7AoIhz3JIK.1CRV8357H49RcrKTMovP5QucXtizlHL1JdGCSIPGhS0gSYFoZ4JXBnj+NWeTBRaE3Hchag6AkSRSZQb1S4BRSH6M+Y4WN+44QiKpa2IJSdvOh66CNbRh0K0TLr.aPvgjn6.Yp.1GpHTNcz50NWd8ZyqSb00gLTjyZvnhlgD1kUE2Jo3ETOOWBpfeITUy+rjp4s8odjHKpm7d3LR2Rg5rqI2+BqYvClWbKqoNtWd8lyhWbbfxqiaJ77yMphEX4kSIwEDqgjHAURi1UIGC25qupZYmpj3iD7PUfmT0Ff2rE5mX1cvoYCtc4tT+fXAXai.nCAKajyYs1q4OVqRmCp2bmp016biz1PVOKHGnsT+3gd4hes7Kodh9Yt85k6Sn85m0qxKdQ4.ydb1+BntlISDKHgso+dJ67mu5U+0lwC51kdhj7PdaaEP877Is3wTYRoQ7bgGoKdfu9.k4RDCIVcHmH1lehNgKf6kvjpxCxjogD4RydFfAvKMcx71SgLkt5RHTHoZLBciIPnlnO+aIyy.xMMf7eTsbX5gqFfxq3XbYFz0XDzvH.UonkcR6JcZaj6WVyw5U8x1xj8t9F8hAcDx8F3iEi1lnDJIBj9vreLYOWLv2mZRbuW5cbVg6MbZQEt8mLdWXB3EN4+9FuIchuhitqsLvtnS8e4Cba2KM7siFllofxn4cW9qFYYUk3iGg+d9nGT1u7Dd4oFxdPDs393nwY+biFx4lsatlPXt3LmhHCIzUlT5uvQQ4Wk.rJk3pCfutrV4+Af6d7ABJqG7VGQpaceJbuDePjKAfJiAcSCyYufrEL83hxwR.0lv7TC9G3IQXI4X6DgkREZRI2TSIWy443iIpWFRwFeoZbWdT.5IDFIRxUkdW70RBm4uVRSWA.gNQXVbHOlTxzyiIaiQqMIFvFUc8TinkL7f2KIvPukJmN4FlSBoEi3LX7HdZWpwMu+8l0XXXSuMAhFulwtPvJ4NSlp0.3E7TmNJYZX1zaXN830FWb1pMdk9iD8gqujbyFbeKWntbJF02eVCtnyGdAhgUtUMFmN6nGi1ky3g84LpqYN0dD3zeudjQxalX.skPfglgGNyMKuGwmfiIlMDuC7B43nc08cOObQoYmKl190W4ngKRd1G8+i9Iy8QY+jy9ITn73GI2p9gXMBvtQ7Cb0epC4QukTy.wMS8eUXYmckiQkR+JGNNEWqn7U.oG35JyNtKvOS1lMlCat2bXy8mCadvbXyCmCa914vluap1Hu6bqABdfN+GlnUM0Wax1V2pf5nf0+h9zF.s
                                      

                                      And as @Natanr said very correctly if you will not use an invisible image like "levelMeterLock" on top of the LevelMeter you will have problems with Mouse Click / Drags.πŸ‘

                                      1 Reply Last reply Reply Quote 2
                                      • ?
                                        A Former User
                                        last edited by

                                        Its all in the algorithm....maybe a few guys here could help you out.

                                        1 Reply Last reply Reply Quote 0
                                        • A
                                          andioak @DimitrisSP
                                          last edited by andioak

                                          @DimitrisSP @Natanr @yall

                                          Thanks a lot @DimitrisSP for the vu-meter. I modified it a bit to make whole integers from your png of 107 strips and set it to -100 to +6 dbFS. Also added peak values in labels for both L, R and highest of the two.

                                          Here is that project (scriptnode 2020-08-20): LevelMeterTest--andioak-peak-values.zip

                                          @Christoph-Hart Is there a pan-law compensation built into the Simple Gain module/plugin? To compensate for the increased value from the other channel? The values I get are steep when I pan towards one way, but it might be my programming here. (and my gain is +1, but at Left 40:ish i get around 5-6 db over the center peak, thatΒ΄s about what pan law should compensate for...) (and the gif below is 7fps :) )

                                          Here it is:
                                          levelmetertest-andioak-mod-peak-vals.gif

                                          Script of this thing:

                                          Content.makeFrontInterface(600, 500);
                                          
                                          const var LevelMeterL = Content.getComponent("LevelMeterL");
                                          const var LevelMeterR = Content.getComponent("LevelMeterR");
                                          const var LevelMeterLock = Content.getComponent("LevelMeterLock");
                                          
                                          // show values as well, via label with whole integer db values.
                                          const var Label_MeterValue = Content.getComponent("Label_MeterValue"); // the peak of the strongest channel. 
                                          const var Label_MeterValue_L = Content.getComponent("Label_MeterValue_L");
                                          const var Label_MeterValue_R = Content.getComponent("Label_MeterValue_R");
                                          
                                          
                                          
                                          // ------------
                                          
                                          const var Pan = Content.getComponent("Pan");
                                          
                                          const var SimpleGain1 = Synth.getEffect("SimpleGain1");
                                          
                                          //Decay Rate
                                          const var DECAY_RATE = 0.93;
                                          
                                          //Current Values
                                          var curLevelL = 0.0;
                                          var curLevelR = 0.0;
                                          var curLevelM = 0.0;
                                          
                                          //Timer Callback
                                          const var t = Engine.createTimerObject();
                                          
                                          t.setTimerCallback(function()
                                          {
                                          //Synth Values
                                            var LevelL = SimpleGain1.getCurrentLevel(1);  
                                            var LevelR = SimpleGain1.getCurrentLevel(0);
                                            
                                          //Peak Synth Values  
                                            var peakLevelL = Math.max(LevelL, LevelL);  
                                            var peakLevelR = Math.max(LevelR, LevelR);
                                            
                                            var peakLevelMax = Math.max(LevelL, LevelR);
                                          
                                          //Kick Left  
                                          //-----------------------------------------------------------------------------  
                                            if (peakLevelL > curLevelL)
                                              {
                                                curLevelL = peakLevelL;
                                              }
                                            else
                                              {
                                                curLevelL *= DECAY_RATE;
                                              }
                                          
                                          //Kick Right  
                                          //-----------------------------------------------------------------------------     
                                            if (peakLevelR > curLevelR)
                                              {
                                                curLevelR = peakLevelR;
                                              }
                                            else
                                              {
                                                curLevelR *= DECAY_RATE;
                                              }
                                              
                                          //Kick Max peak for mono out or label with max peak for strongest channel.
                                          //-----------------------------------------------------------------------------     
                                            if (peakLevelMax > curLevelM)
                                              {
                                                curLevelM = peakLevelMax;
                                              }
                                            else
                                              {
                                                curLevelM *= DECAY_RATE;
                                              }
                                          
                                            
                                          //Decibel Conversion  
                                          //-----------------------------------------------------------------------------   
                                            LevelL = Engine.getDecibelsForGainFactor(curLevelL);  
                                            LevelR = Engine.getDecibelsForGainFactor(curLevelR);
                                            var LevelMax = Engine.getDecibelsForGainFactor(curLevelM);
                                            
                                          //Set Values  
                                          //----------------------------------------------------------------------------
                                            LevelMeterL.setValue(LevelL);  
                                            LevelMeterR.setValue(LevelR);
                                            
                                            Label_MeterValue.set("text", (LevelMax >= -99) ? Math.round(LevelMax) : -100); // use Math.round (round up) for all except minimum value, -100. 
                                            Label_MeterValue_L.set("text", (LevelL >= -99) ? Math.round(LevelL) : -100);
                                            Label_MeterValue_R.set("text", (LevelR >= -99) ? Math.round(LevelR) : -100); 
                                            
                                          });
                                          
                                          t.startTimer(30);
                                          

                                          UPDATE: this code does what itΒ΄s supposed to, but using labels to be updated by a timer seems to crash hise and the output plugins/standalone exported instruments. Read here about it.

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

                                            @andioak Apparently there's a 3db compensation law but not sure...

                                            
                                            float BalanceCalculator::getGainFactorForBalance(float balanceValue, bool calculateLeftChannel)
                                            {
                                            	if (balanceValue == 0.0f) return 1.0f;
                                            
                                            	const float balance = jlimit(-1.0f, 1.0f, balanceValue / 100.0f);
                                            
                                            	float panValue = (float_Pi * (balance + 1.0f)) * 0.25f;
                                            
                                            	return 1.41421356237309504880f * (calculateLeftChannel ? cosf(panValue) : sinf(panValue));
                                            }
                                            
                                            void BalanceCalculator::processBuffer(AudioSampleBuffer &stereoBuffer, float *panValues, int startSample, int numSamples)
                                            {
                                            	FloatVectorOperations::multiply(panValues + startSample, float_Pi * 0.5f, numSamples);
                                            
                                            	stereoBuffer.applyGain(1.4142f); // +3dB for equal power...
                                            
                                            	float *l = stereoBuffer.getWritePointer(0, startSample);
                                            	float *r = stereoBuffer.getWritePointer(1, startSample);
                                            
                                            	while (--numSamples >= 0)
                                            	{
                                            		*l++ *= cosf(*panValues) * 1.4142f;
                                            		*r++ *= sinf(*panValues);
                                            
                                            		panValues++;
                                            	}
                                            }
                                            

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

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

                                            20

                                            Online

                                            1.7k

                                            Users

                                            11.8k

                                            Topics

                                            103.2k

                                            Posts