HISE Logo Forum
    • Categories
    • Register
    • Login

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

    Scheduled Pinned Locked Moved General Questions
    54 Posts 11 Posters 4.3k 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.
    • 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
                          • A
                            andioak @ustk
                            last edited by andioak

                            @ustk thanks. whoah.. math is beyond my scope atm, but pan law I thought would remove the 3db. Not add it as suggested there. I got that wrong though, as pan law is the opposite.

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

                            53

                            Online

                            1.7k

                            Users

                            11.7k

                            Topics

                            101.8k

                            Posts