How to reach -inf in the core.gain node?
-
@southfieldsound -100 = silence.
-
@d-healey that's originally what I had assumed, but then I noticed that if you put a -100 gain node, followed by a +100 gain node, you end up still having signal. I assume this is because of 32 bit floating point. My concern is that the end user of the plugin in their DAW can end up raising the -100 dB signal as well since their DAW would be in 32 bit floating point also.
-
@southfieldsound said in How to reach -inf in the core.gain node?:
if you put a -100 gain node, followed by a +100 gain
It's just maths, -100 + 100 = 0.
However if the signal coming out of HISE is -100 it shouldn't matter what the user does in their DAW, they won't be able to increase the volume - at least that's what I think, I haven't tested it so give it a try and let us know.
If you just want to prevent any signal coming out I'm sure there is another node for that. @Matt_SF @aaronventure @ustk ?
-
@d-healey in a perfect world I would want to set gain to -inf, so that placing any increment of gain (such as +100, even +1000) will not let us hear any signal at all. I will test it, but based on floating point theory the user should indeed be able to hear the unwanted signal in the DAW if they turn it up.
If it's not possible to set the min value on a gain node to silence, is there another way to achieve this using scriptnode?
-
@d-healey David is right. If you set the gain to -100, HISE will clear the output
HiseSnippet 1850.3oc6YzzbaSDckcT9pEFZokxMzANjxTxX635z.GrymsdnNwSrIsbJrQZs8hk1Uiz5jXX3N2fq8V+IvUNQ9IvPOxENw47K.3s5CaIKWGGmPBvT6Y738su2p22u29TUGtNw0k6fTludWaBR4lp05xDsVuElxPk2.o71pUvtBhilOn05ZiccIFHEkzOVBPYtoPdeNs3ZXSLSmzGDBsGmpSdJ0hJ5CsZoOiZZtE1fTmZEA67kJqyYqyM4c.9IsZFjMVuMtIYarDsTpnmfcagT9H0LOr.gr7RMLLvKsjQgBEV4Qqjekr3FYxiOHagUxmK+x4dzxMPJSuoAUvcpIvBhKbnqwM5VqE+Hl+CXOpK8.ShbQVTM3I6CFsdKpoQ0PkiKBonVsupJsup5NpUnFzdv6qxdGuMz5SQTklRpQwRYOGrjRDVZJeV5Vp0zcn1h96H4manVlAVvFXv1DkU7wEobh55b.AlXQKbaxVNvhdDrPgLYdfF7y8+zFcX5BJmowYayEjcXKb+4+l4ma9ucdsA2pQigtm7w3vMMINCcao6fynHbAVGqCHNOP6PrYGRODAwOtNc5wSmp6K0QPjyJynhcrIAq2haZH0Ux+mzBfBTav+97xafEXoQI.FfmMwQPkrixFjCgv.eSzbpaPbaK31PfPB6G34vM5XhEwcmjAZAa.5iX1Pogh4REciFHdN7wxLRerwkEukZUpPu0v4wTCgGAM0+D7XPj4aotYiFDcQeFbJ0sd9jFFl4bGFNePXH7LkO7aFrTaqmmcnAfemZemcaGhM1gTmW0D2cAWrksIYWfGef1Alb810neMIYDhsOKrlDiEzagYLho6jDHM8kTxIzt7NBJqYErvgdLj9b6NV0f755j0C3N.lRJYLj+5Lx0R+hZDlg2h+B9DrYV4ZkfMyFtYjvusIhi3Ns8LGA+GoLiut20SIueiiyhV0zjez5bKaZfWJXC7fUka10tEmQ0kf7wHjSW0h2AdHArKTBpNlZJcqq0wERTXrCqFfrWcOkz6Qbb8N3YTyrH7Eby2la.aMyVXcPw1sJVzRFuHy8.NmDmE064jFiWi5m3W.L11xSMrTouhC3ZKo1PVnTZxphc.xfz3xLPoTRGIijuSqbEDRlx+QW1cO4t5XSzdRmBIQdOEI5S4KDSKQcd0NLW.MhCJlLcaOYBbtVr29IkgHDOZIHN+h5mYoN1oIQ3E22W.kBT3JjxrUnr.Yne9lJ3iG.1oEqIH1x.pn3UqM4He4JJlRAeFU+CHwQuAoAtioHA7U6H3VPfjm7ihnBmVsozlGS8cCP84PVr4fMY4q2Bn3LzYohoyhoeROZ8yWbRR8CnKhqed4KdwOULg94jl+3cK4KUdMDNQpmTnH72Lik8qz2WZr3uu7c23UE8aCplEmKZAokFjIyWZ3LY9RmAecYn2to5tDWh3b5bE0eZVUujHYQmQRlj9U8nbDdVETorCAuJhglzITSv0fCtA0RSzBKfeHZtzlLrolLvTS2j.0uLPWrLNohHduspsEd+fDGFwEx2qWVmX3jTRG3PtnYe7ZziQz8Ki3wskMj4HZ5oN640HAFDXbtBHu1SXcVQjm9yWbFbd0J.aPsM6hRb5CmGOs3U.aoptpgwjEIFZ+OGo1CI4M41eSt8vOQMuQculS0TNKkjsdYzkgsn5tKFteR+r9zNBOsOP8q53JzZvczbwMHhtZGAs1SzfaCHamG5D7LaKS18rI43v6CuA00FtIyZcfaj42oVLHxpALCxwgM0uIbuDC3N2djG1neLuc0qBqV8VND2Vsfq+OIVsw1MmOlt44+geqneg9UEBrd6AYpxuFe7xktBXp4.ebnluK4RiqNsXRaXowiqd4q9yeMn32tRGyDEVJNgEVFVAYTojEVNs3quvBjkhZP76EaxRFD6dNy3mY9iylIC5xOPHBoZ0a7GexIuNEWzVg7ZcancFEbClg1XzPIXfF1hQXXmMn0371VXua9egmA28727FpOCeHwaJ3d2J+tdqgLhVZOl.8RKm7U1QLG7eYbmCt8XOG7czE.KT2Aybs4tjrwLnDKZcNi3FC5.TjanTjKt6mnCK9Q6CJFVRUwVfpHBdyVJDXtn.qhYwNLXcrSphbrPgK+8haxvGXRpQ.I2XGWcPwfGH.pZGSWxynFhVYiRXev4hB9IXGCvFpGajioiOcqoFuoaEe5qQveHCCb5qgWSvkyHbuFmxbrQnNWHOViJ6iXS3pmlPXrGOda0fbPgPiGGVgy3gSwquUeWhvg1rIId13gIPA0V6A4NkBKr0CzGV5ov8owNU75IahzEm+2pyPsWuePq.ZxjGZ+28sCj9+0ucfwO5CxG9uaq38Tg7x4z7LkZWO1xqhWpvUwyvBq6v2OXvUxf9Y8f.xMK3pZUjq0xhNbv92rfRF6qqG+nRPXtIkvklTByOoD9vIkvBSJgKOoD9nylPYE8fYeHiMf1bpto+UYU76vw+cA72TtkzBG
-
@aaronventure @d-healey @southfieldsound Well, I am not 100% certain about this...
In your snippet, it seems to work. But...
At 16bits, the dynamic is 96dB, so effectively setting to -100 clears out the last bit, so raising up to whatever million dB after that will be still 0, rien, nada, nichts, peau d'balle...
At 24bits, the dynamic is 146dB, so there're plenty of bits full of information below -100, we just can't hear it... So raise it again above +100, kaboom:
-100 ≠ NO SIGNAL
The solution to this is using aMath.clear
node, or aMath.mul
set to 0 -
@ustk hm interesting
alright then, we can just test the db control with a compare node and smooth over to clear
HiseSnippet 2299.3oc6Z0zaiiaFlxNzNwS1O6tc6gVTcnEHawz.qLdyLC5g374tFcbhQbZlcNkkQh1lMRhBRzIwsn26s1SEXts+D50dZmeBEcO1K8mP9Ezsj5KKJI6XqIIcyhj.DDQxWxW99979vW9QGWpN1yi5BTpczHGLPYYX2Q1rAaO.QrAs1An7tv1HOF1UMnnsF4f77vF.Ekxetn.kkV.3+yUarExDYqiGWD.bLknieAwhvFWZml+Vho4dHC7QDqDstQyV5T6solzgb8oLrNvAoeFpOdejnYkffu.4M.n7qf0+r0w3m9jdFFnm7Di0We8m+rm234Znd0afNUa8m2XsFOcsm8zd.kJ6ZPXT2tLDC6ATVXKpwntCnWXGL.GS7HmZhEenA5xG4fh2iZZHlhhRAaOfXZzIxP4A.JvNiMakCLaeDrMwfDW9Xy266Wg5XIRZ.UJIqdkkTOsjpW8DpWNpjRBUZg.U5Cfc0cINrw0HzmGAaYy8l8Pb+TRUIns.k2.2lxafMaUKzY38b4eDKvJqWu9iU4+4S+M8FZqyHTaUp89TF9.6U9zZ+wZKU6OUSMcU85kachgwkZZhcysZAzvcZBth8PqSwtOV8bj4PbbC4SeYaJbx1zjtb8fYchFRsaYSXG3fsmDP.DZp3+2uq0NHFR3HBKi2NGrKiHTAkcvmyCCBbKKA2A6cFi5vCDx3y3nEpwPSDSFBIBzBqfaCj7aBmisGgMJYf3MFtZVUwO.1gvzGjuNVJGcjaotMzwvnw2AtaudXc1XEbA3de4cWnWsvPO9XJF7kC+TcuuTK2ft+LbL.2wE6fbwGQ6XhFshGxxwDeHWGer5olT8y5R9C3rQENApvVhVrh9.jsM1zqHAOUlYqh1zcJGRGxH18aiXtjK4Qg6OzpKmWWGucn1wKSojHFJ365huE3htXaC+O9N9OgUpI9VIrRsnJSD9sOlcA08Le2Q3+CTpFX687Mxmz6RMvlllzK1lZ4PBQobefeYcnlibFPsI5hhBZQjltoEcHePBUW9RPGgHlBXc2gdbxAiCr6xar+5dJkOF6542wUg0Wk+KGluO0fWU08P5bC6nNH1.Q7hfugCNwtqpGCRkz0j3jfE.kpVzqQKUFX33ZskvZHVnT3x5fb4hwotELPkTJmfQJ.zJ9hGRVJXna4crnVcjI3XAnPHj+nHZd0fIQEQSqAGZ6waF1EHMm9P+4DGbsZb8YmCIDd5y.Y8ELlY4HjaeLyKjp0FqG3H8MysLD7q5b2GOBBDa.DEWA9BbONTIgUQXEh9BnrXahc3DeLIUazkoJ6pM5xvNhnvjsq6Y3KBLFIaovZUEFzAY55cv8PCMYYJeygLpEO5yH1ADZ2q.6K.JR17Gwmrt3U6mNyr.icnDWigtjjgVx9Td51mW8lr1GtsP1970u90+iMxXedS++9G2LXV4mEYAMOIzupyj+q4eo4Loee0OZmucif7k5ZQorAbtrzJYil4qjMZdM50MgcaY3gXOLaNAWIwSiCTxgZRDFGUcVf0XQukBh+YPOeqN13DmHS4IgLGFxA1QAXyEx8lHxNjQ4VA4lGBY9YdNjzePFE7UuYhfi4NZB7SalUmtZiIqSKC21G3HxdrXn1oiLjPx+xXj7zDIK5d5Cw7f3yrLaEQxywwquC7E7L.PtpGxyxadBOpAMbGcxEXllbrvhvcbG8RL6tOX3sbYtof774AKLOdrB9di4w8O0gDcWyJ..YBb4upYAhJxy3Msnhkf6ZiNU.txzQ4qUWsQXHQ0fDxhQCSLISOGSBKmzBShlWpxeq+q+NQ+mGie3XjBsGkfXIoDDEs0QnCWSRu4keXrrWWfVpgtZfWNTMOwhbY5DTe+X9fK6gLxM8zzxmu4IodDcTQYxvtTpP+2SrEnDF+PWZvtJ.SkmXwPdBd.3EhsYOldnTxBjoKtN1C+TCSkhrepXfh0mBi1j6y6UocWNaz07l5cBolKLz82jwK+Px3yax3EYG4IgD.IRWQ.XQIciksHjtUg5lB1IowcYHGXLX0fZxNjQxL8wa1BLTtYVg9FkNQlAIlabtXPhk5AFjGXPtkXPtqCjh2ghzTRd2.yVFGoSUaBGJPxfgDzkKB8IC0lexxXImB005Ph847gEanJBfUYTUdG2iXoxFfX7+fU8H8sQlph73T8oB8uuw2lynMYJ3uKzwBMgsE+iiSCVpMYmoo5jaoi5op+gTpMCoMdudarhg3ad6UvZv1b0f3XNJydE+lItWwae0BB2zvnXGnSj+eNVZLRjGNX6GVILyYW5k9TtMEu9jrWVkwHajEQ2a0n5y6POhpaJHseN72Ozio1i5p5g5gYiTuX.wDqxvdhK.Enrv0QLJ5KGS7kQuffcHdNlnQaMrWuv0kkJQrZfsA9xnqAcWqSwF7r+7EO5pQkP6v6Bu1QCbwdCFvSDsHdsYFlSmQXdi+5+NLgiMYLj9YoUpVS.i2p4cfRsDGiyWy2CeioUWk8HRAMmMs5q+1+6+J5BCD.y43PHm+7EAy4EFvYoHF3fbwJFYfbVsALy+Zs50A27ABy3Msb0FoyvsbtYFEd8s4lXTtBjJgs7yHdBGeW70xmuTaQomYg7egEu0u0oOInxGAeI5br+qMz+0O7w9ey4QsT+bLOCbwcDoMk2a3+bVeugNy76M7.cFWENxEY64P8vZRv.rE4HpM1SpzTRrVtRrlLnkMzVtqCJRpUBSwdbSQh1sXynBWKYgcP1RcF+aodps342D84+YifaZnKlOyMNvSmaXPoB65LzzC+RhAafVRAGW7ZIK9KPtFbentzS6p7zd0kZE7UWV46cu5x6AOfOoWm1RQ5XWhHgic46Q0jG45qieHLjrJpT4Pu1TaZzCjZri9PLykzuOVl1NuIT3hvwk7QMiVALtneQyfa4v+lOJlsPateod45u9Ig4LnJ3KTu+9vKK+C5Gd4rG8wo.+9sW7Sfbp30T8ckp++wWdW7dMuKFCKjtK8jvS3RDzuneI74sc3d5ZK9VUCbd5D8r3KYbhttbWkQv0JpfOonB1nnB9YEUv0KpfOsnB9rqWPwJ5gGRhH1fmYSmcC1yqRzymPbGB+O.+cXDhB
-
@aaronventure Nope, add a positive gain after the limiter, there's still something.
No matter what you'll do, if you don't use a pure mathematical multiplication, the limit of the dB scale can't be guaranteed to kill the last bit
-
@ustk thank you, your suggestion of using the Math.mul node seems to work best for what I'm trying to achieve.
The dynamic range of 32 bit audio is 1528 dB. Perhaps setting the gain node to something -1600 (just to be safe) may work, but that seems a bit clunky for me. Weird things happening with the analyzer when I do it.
Would there be a way for me to create a UI slider on my plugin, where dragging it all the way down will make the audio silent, and dragging it up would increase the gain (just like a fader on a console or in a DAW)? Would I have to code something where, if the slider is in the lowest possible position, the Math.mul node becomes engaged? Or, maybe I should start using Math.mul nodes instead of Core.gain.
Thanks all for looking into this and for your help!
-
@southfieldsound you're right about 32 bit and the test I have made confirm there's still not zero bits after -1000dB, and even batman can't hear that...
But superman could! After all, each -3dB just divide by 2 the previous factor, so you never reach 0 until the last bit can computationally handle it...Now to be strict, the math node does the job of nulling to death, so yeah, if you need pure mathematical silence, use this instead.
Just pair it with a smoothed_parameter node to prevent clicks and you're against any upcoming super hero!