Gain Staging: Best Practices?

  • I'm curious if anyone has a suggestion for the best gain staging practices in HISE?

    Should I be putting a gain processor before every other processor to control for clipping?

    What about instances where you can create clipping within a single processor, like a delay processor with the mix and feedback high enough to create clipping? And to that end, I'm able to get a lot of clipping in the dynamics processor by virtue of the release time.

    I've attached a HISE snippet here that has a Sine Wave Generator and just two modules (inactive, but when activated the each can create clipping when a chord is played).

    HiseSnippet 935.3oc6W0saSiDEdbRlEJkEUPUHtBEgP6cfRVXAtKtMooTQS2n3.6xUnA6SiGg8LlwiKDtFj3Uf63cfW.dDPZeAVtFoU8MXYFa23wMVQkncYEn0W4y2wmY9N+Lmy3gBtKDGyEHqUFOMBPVmE6LkI865SnLzN8PVmCOfDKAQyLnMmFQhiAOjkU8s0.Vqz.k9bXmMIADlKT.gPOfScgcogTYA5P66QCB5S7fwzPiu9l163xYc4A7DEepiaghHtOgLA1in+rZXj0OrkGUxENRhDhQVM1j6M0wm+LV12+.ZL8wAfVnMxQsPYv84AdZFqeG00mF3M7H+NFgrvCKhB0yhBqiGP8nyvKhFqkpnYgElwCqZKhdsMoWqJoW6JnGxfcMxXmhDbuj.hrLyzoibETd4L0NLIvhoxoloq+So64wCoRW+p4asJ3qJQ8uMeyS9+Hdq82GbkEjsAt+uurY5ufBwZFbY0LtbJbOHfLMkEmN681khToP5yQ6B6abFaM6YJFQm3anYc69.38X0IKCK9yWr9e04HbSCd+ke0m5rK+YCUaXeA7zYqyq+C66RmCE0yd.84lEYigvHtpkhaoJu5kCe0OYguJxdi3IRJax.hTn2W7dIgNp1GtfJ4wXPfZwwV0PZSSkaok0jvAXdoB+s5IWYasrUtx1GozrB4BYYkyf6MkQBotwoIlUmIVN2rsx61hQTdhmYcrFdru.h8UkCGWwFRoJEXFrznif.fDazq7g1c4gQhTZM2VbXmBkGeiruw6168EpGoO6kq5su4MWwXYKwDkY+jgtx7w9iu3kcRaxChJ72bMU5x45l2qyULmieUCVLf7DHIphkadEeyVwctrJtUwNTFjNZNsj6hoxM+MxAPysAFHzcWaufoye3jNcN5DOc9Wckpserfvhi3wkVXGHjNlyzQ5Bv6GC5lElkboOc4DQkpNrSekSVoMNDYhHctwFg7DlbQ4Z7IKWWd7ow2u3AHVM9+qO7O3LPqgyckz0T05gQApVoG.AbEhluWHGr4QnkK9GvY7HeNi5ZVYLBTGZmLADl9QkN2waHstcEch1UUcRDpXFrn3xR2poTrXQ4tKgynaS8I1leebEv5eGcEvu.p70X5xWi8Hj3J3ORMvPJ3A5Z4Smhn7aV5Oysh5uJUxMaiNfDjn.v3VWuEJT0c7Qtt5v80Twmps4mWBatwRXyMWBa9kkvlasD1b6kvl6rPazCl1HQxCyNJp.FtUOhjnp0mcmNq5nOCbt10fE

    But aside from those particular instances, just curious if I need to have a gain processor between every unit and constantly checking the current DB of the output?

    Currently, I'm doing a whole lot of output gain knobs that the user can control in the interface (which I like anyway), but I feel like if I can make it so clipping isn't an option, the world will be a slightly better place.

  • just giving this a little bump 🙂

  • @musictranscriber you could try turning the volume down on the Sine Wave Generators so that when the signals are mixed they don't clip.

    The way the delay module clips when the mix and feedback are really high is the nature of that module's algorithm.

    The same goes for the dynamics processor because that's the nature of a compressor.

  • @Eskano thank you for the reply.

    Yeah, but do you have any insight into how to check the gain between each module?

  • @musictranscriber If you need to get the level of a channel or effect, use .getCurrentLevel(). (Effect of Synth based). That said, gain staging is sort of project dependent so there's not really a gold standard that I'm aware of for everything, and if I'm not mistaken in the digital world, anything (before an effect anyway), even if clipped, still has its information intact and can be recovered, which can be verified by clipping your initial synth by 6db or so, then reducing the second by an equal amount and comparing the results.

Log in to reply