Matching Gain Before And After Effects
-
Aside from doing it manually (tedious), there might be a way with storing variables from something like
Engine.getMasterPeakLevel()
andEngine.getDecibelsForGainFactor()
at different stages in the chain, then using those values to set the output gain dynamically... haven't tried it but so who knowsEdit: use
getCurrentLevel()
not MasterPeak -
It kinda works, but there's a volume spike when you first hit play. Chain looks like this:
Replace "Transformer" with whatever DSP you're using that's making the volume adjustment. Just make sure the InputLevel is before, and OutputLevel is after.
const var InputLevel = Synth.getEffect("InputLevel"); const var OutputLevel = Synth.getEffect("OutputLevel"); //Create a timer object. const var t = Engine.createTimerObject(); t.setTimerCallback(function() { //Reads the left channel of Input Gain: var inputlevelL = InputLevel.getCurrentLevel(1); inputlevelL = Engine.getDecibelsForGainFactor(inputlevelL); //Reads the left channel of whatever effect is causing level adjustment: var affectedlevelL = Transformer.getCurrentLevel(1); affectedlevelL = Engine.getDecibelsForGainFactor(affectedlevelL); //Calculates the difference between them (the amount of level adjusted): var leveldifferenceL = affectedlevelL - inputlevelL; leveldifferenceL = 1-leveldifferenceL; //Uses the calculated difference to set the output gain. OutputLevel.setAttribute(OutputLevel.Gain, leveldifferenceL); }); //The lower the timer value, the more responsive the adjustment is (and the higher CPU): t.startTimer(20);
-
Oh Thank You @iamlamprey This Is Awesome
I'll Give It A Try Right Now <3 :) Thank You Man -
Very Good Script,
Here, I Replaced the Transformer With Convolution Reverb,
The result Is Not Very Undercontrol As You Said, It's Acts Very Unstable, And Glitchy :(Snippet:
HiseSnippet 1591.3oc6X80aSbDD+tjbUXCAAHTUebEpO3HERro.shpJRh+C31DhUrAJOgVe2X6Eta2q6smSiP7Ner5a80J0uHn9Enc18r8s1wXRsTP.hK4Auye182L6ryL61RJ7gjDgzwsPmShAG2K409DtZP0ATF2oYMG2K6c.MQARRFo8NIllj.ANttq9.MA2Bq4X9d682iFR49PNIGmmHX9v9rHlJmZqc9EVXXCZ.zgEYI8s2ooufWUDJRQ7rpWYmXp+Ko8gGQ0hshmi6WUOfoDx1JpBRbbWaOQvIsGHNlmI+SXIrtgfdPEm13DkQtgHLPiX8ucpNfEFzZrcm33350J2KrZlW35dGvBXSnm6MthgAIWCa+g6JKBdUrgW44BuJyCdtVvasL3cUu19RVrJmiFaWzqIG2n5Qws.aXkIqyJ+yZdUEnDb0VQzWBMj3fIZT5tkKuI4NkKuwOtdww+gaGIJxPpjzjGmp1GFBgjehXhP1pOnp2qG3qJcibt2PqdtZGlpVjdVrmQwNRJOomPFgAdyQQK12HCvaucUIftcBknXZsDceAJ5VSaFJbxpy6y3vV9Fw0QfxCMhVROQpsR.kgXUZXXWL9qTuTtuhI3k1X8huZ8hD7a6sOBnAID0.fDB8TD+ATNGsQQuLOEQez3dYBudwB5klooGpM08QPj6wzlU0ToD2VLiKUQiiBSK9HLihVC7YcgvjFBodMZP8w.tRVRazF+eQX73AnoODcRfweRXIDeZZBi2mXlDBM3EoIpHDS2S6.MF.0HKDLATVaBuCi3Tp79rioUH2TvMC+zP8oJi8DvP4vEyGHcA0w.v0jiHkzLoQhTtRal11BDrw8xlMssX3jOKZnMCVuo8FlFGyQkJ2bVhS.7iSFAU+wHOvF0JAAiyLBHLmAH8QmfIXsf0gBcv3tJkj0MUAkrYn8YadJyP6vd83yCcza7hiwcY8xjcnXHMLE1zPHRHAhDRhwCGrgfgV91tNjnDkGXHOf0eft.PqGugIb.OjnnxriIktElwX7QDhf+HgBNDOqT7UEKT70EIyxpWu4xSmXRJBCwIbdryVpEnXIdZTWPtYlENQPLi4zoju36NkrcEC+r7jVBJ3M4L0gwvnw1IsGa0i4V1YhwZSJ2FsolkA5zhkS5z0DbFkGG+0iaVipn5xDingxECRESast0fgX82rhFE7pAIuTIhwJvmphBVWSDniSmtXmNLaDCzcOUUEckCLxQchcG.mKU.Oqv8pdsXJ+AyGuqLG7hdsya7Npeh08xpbkC107Z7qKayC+O5sYUKrbgIc3whhCgGLFJWxKuZzB5uywoFDRmx88TVfZPNgmsyb5.rIGKznZIBoxYc9qddXwqcliVzlG4Sln6q4Yb+eJAXS3wmN.9JdsneLDPbD1R.1J1ATrv+uiWO4QoQswqD4CUy5fCWHO2UzUAxFWVOVCn1.OvL3ewuQLqnG6NhYkwLscIWabJJr.xPQXpwz09i08r5vaJmQM4ISma3Y+wSA0roK1GcJb+oNx2LJNMLA1G38sSb716OBOlDQ1zw9n1CaBuuD6oKny.rm8.64qkDBlMozCYUsli2726TiFEi9SaYZznynhh4jXgitnIw6UsN5vetd0NOuwg6Wq9Qu9g3cAdBH61r4VGSG5DosyLWdDUuC49l+bEmPgHtstunw7zDpyCFO7bIc2G5fk2UMj08r5NcgORvWJh7khHeoHxmaEQtblK4hXdANXdtFi23qMiIOkhWv7A.GjZmUkEje3uNqOhX7Y9QDOzWgKuoTVrHYpItMDw5H3ZudNQrjSCI7aGo29roWUPkyk0aueCzHmqNsopToINXWyqRrnLWdmsLWSekLK4eOOi3ZeT+Jme3tR5pmM39ddH1BiwXVcv5X8oP7d2SRx1ilFpFSc5.9CDbQ7.Am4aGMbDfGT62Gj1XetFztJE1QTNkquyQPHPsir+1c1GiHoRzOAKounxY2Wrn8quwKCtD8oTxmGOkvpeF8TBejUQ4CwZDQ8khm6m8Ja5X4KXnf1M2z9eAuCziIUbLukHpmW4sJiM8Gvdtuu1ceyJNNyWmasD57cKgN2dIz4NKgN2cIz46WBc9gEpitXztoJQT1QQjPq5lW8z0sNmhQxlndm+CwOw2DC
-
Yeh the volume spikes are brutal, which I assume has to do with the limitations on timer rates. I'm messing around with a scriptnode version, I have an old build so I don't think I have the comparison node which might be necessary...
-
@iamlamprey
Yeah, The Measurement And Limitation On Timer Kinda Make This Hard For Output Gain Level.
It Works All The Time And Sometimes It Goes Too Down And Cuts The Signal's Volume. -
Do you have access to the core.pma node in Scriptnode? I can't find it, pretty sure my build should have it
-
@iamlamprey No I Don't See That In The List
Eidt: I'm At The Latest Commit
Did Check My Previous Build, And No Such A Node "core.pma"
@Christoph-Hart Is This Available core.pma? -
If I can figure out how to subtract the value of one core.peak from another, I might be able to make a scriptnode version. But it would only affect things in the same scriptnode tree, not external effects...
decent chance im overcomplicating it as well
-
Ok getting somewhere... it's a bit jumpy but I think I can improve on it
Probably all I can do for today since it's officially christmas in australia :)
-
@iamlamprey
You're Doing Great Man Keep It Up
And Merry Christmas οΈ -
@Natan Merry Christmas!
-
@iamlamprey
Mate, Have You Made This More Stable, And Smooth? -
@Natan Well for one it doesn't need a 16x oversample node
You could try playing around with the Smoothing setting for the gain, or wrapping either the gain, the core.peak, or both in one of the fixX_block nodes, or a frameX node.
Not too sure but
-
@iamlamprey @Natan (anyone else!)
Hey!Was wondering if anyone had any working version of this, I'm trying to replicate the same thing for a saturator, and it's not really working out..
Thanks!
-
Yarrr matey, which hise scallywag can save my day?? (bump!)
-
@Casmat Since the phase, the frequency content, or the "fullness" (reverb delay) of the sound will be severely modified by whatever effects you are using, the resulting gain is very hard (another way to say impossible) to predict. Therefore you need to compensate for this in each effect by ear, and probably automate it when the parameters are changing.
So basically it will be a gain module/node at the end of each chain that react to different parameter in a "weighted" manner -
@ustk ahh ok! Thanks!
-
@ustk i have this chorus module which is getting cloned 4 times, this creates a massive gain increase and since itβs cloned 4 times, is there a way to accurately reduce that gain?
Thanks!
-
@Casmat said in Matching Gain Before And After Effects:
@ustk i have this chorus module which is getting cloned 4 times, this creates a massive gain increase and since itβs cloned 4 times, is there a way to accurately reduce that gain?
Thanks!
@ustk just told you what to do...