Audio stops when Envelope Decay reaches -61 dBFs – Bug or setting?
-
Merry Christmas!
I'm trying to get a smooth amplifier decay on some continuously playing samples. But the AHDSR envelop seems to stop the sound immediately when it reaches about -61 dBFs. Is this a bug or just a setting that can be changed somehow? Is it just something like an Eco-Mode like it was on filters etc?
My Release is cranked all up to 20000 ms
-
Showing the XML of the envelope revealed there's indeed EcoMode="1.0" but it seems it can't be set to 0. When I change it to 0 in my text editor, it still remains 1.0 with next HISE session.
-
BUMP…
No ideas on this, anyone? Very sad to not have this working. It would be a feature of very use for high quality synthesis.
-
It looks like it's hardcoded in the source:
float AhdsrEnvelope::getAttribute(int parameterIndex) const { if (parameterIndex < EnvelopeModulator::Parameters::numParameters) { return EnvelopeModulator::getAttribute(parameterIndex); } switch (parameterIndex) { case Attack: return attack; case AttackLevel: return Decibels::gainToDecibels(attackLevel); case Hold: return hold; case Decay: return decay; case Sustain: return Decibels::gainToDecibels(sustain); case Release: return release; case AttackCurve: return attackCurve; case DecayCurve: return decayCurve; case EcoMode: return 1.0f; // not needed anymore... default: jassertfalse; return -1; } }
-
@Frankbeat In the meantime, have you tried the version in ScriptNode?
-
@aaronventure I created a Scriptnode Envelope Modulator in the Gain Processor slot and sticked in a simple_ar [poly]… It obviously gets triggered when I press a key but no sound is heard.
HiseSnippet 1500.3oc2X0raaaDDdojWmX2jzl1bo.4.OzCI.IVR42FzCV1R1IFIxVPx0n2bWStxZgI2kX2kRVsnnOB8bt0Ggds2x6PeQxaP6rbIEIkULbDrSKpMfAmYmg627+P2UJ7nJkPhbVY+IQTjyMv8mv0CaMjv3ncZibtEtCQooRWKqMmDQTJpOxwo5KMLbVYITxOue8MIADtGMmEBcff4QeCKjoy41s4qYAAaS7o6yBKH8SZtimf2RDHhA7TEWGEQ7NgbLcWhQrJXjyxa4yzBYeMQSUHmk1T3Oo+PwXtU9CXJ1QATCQCTe3EYYusHv2fXyynVCYA9cyraEB4f6l6EpZ8B2A2g4ylxO2a7EIG3lqQQ+gSkxvqZI303CAu4.ImBPZIKjtMtumjEoyOwfmOCuCGBNCHfauHTrxhbdGtk.DfqWKjbBcaIPLUg68r50efK7m6+cCh4dZlf6J36Jzz83269q9yqtxp+xptydzfAy8Ly0HEAAT4bO1Dokmmh2iGGdDU9.2QjfX5TAAyurOc4KlO0yZ0EDTv2gyz6EQSoySJZLmH.J0sAO886zlnIlfRJOPtHpTyLvwoMcDjgaCQqfaSUmnEQPN9YhePlivONfnKmNYpgRO.7Gkhgl.EWwzSJViMaN1ReX+Q84VBLWq8BB2ai6xzdCmOdqLG7BdsqZ7lVwdS7VCFP8z4fcI71+v4VddoCk6ZgxWh6qkTRHiebeRXDTRjfmUwoTMtLZhFcgah1URCDD+9repfXuq4lwf+RVl6ezL4p1HTDyKcWoHuGMhRzP3ufNWuYuduTJhilUq2udRxx9RnIN3JJdvdbJ320EswVRgRM.Lmj2kp3QcikGa7U4b5QGQkpx71MNDh8bNM.TF63XpbUTSrl40gnkrSKJcxsTeeRR7FlrjP2XF5GMC8img9IyP+zYne1LzOOm1AWNW7ZWr1ZcHQcIfIVPxMYoYYvYVNkaoTPzo93DbTXt4bl.s7U0PwOoMrtR6u9QrhQw44Wyh2uNcd9V7QP8YDcJ5S.9cSO0M6X2omWt8QGAWDMTvYdkKPfD9iOlJKZZy0dyVT3A3Olgx3KoEcJLlcWpdrPdRh2J8YHKz3KtAtsJJi0FAAhwsDgQrzHJ3CR30UDLIyQ3TwJAMsiPVqIrSE3ldEQsOgEXD6.nMRxK4Z35qA+B0l6lzca4sIdfANoKQOzL2yrOAjIQkq4MM4pDtJFSLuhrNvXmjtahvPiYZJ8yRUfRipEVkvljXnf3SE66eG0AlS8HAnCLQ.CjQl2t0KYQpcMPEyzC3PhDUB42ASSSfVKWhEBq3yEqeNF5+1kHgM0gsKUYv05vQ8GmLIf.8w0FsqTjQ5lUbZRxmZFwO6olPa.8zrkxZyTQAjI1wYpyvwfOtO8TCV9a3msfDZevlRT2XhnBnFJ2mRAd1NLdpcjWY0gbZYdM+sl80znBCR+8291+b89mPGaiDob+wup8estwUcc7FZMLSDcl2M5p+xWA2iFPIJJ5LunO9a2z9n7sa4M6sa69.29xP6XM8xvvm6UCYNevq9lod8VwxQyCA4yHlllVJy.soPbRHIoA0U5mDbt6XW8+Q6X23ReZ+sR2v1Etco9+3eK0MvI6D5ZVg+eKn1SDqgUyyVO1zCuOLIviVbSZSG7T55YyH5S490yZoldXir0tMG1H6PjW1qBrszms8dqR4l0PS9zw.Xg9fhozJn4sARlFzpjfZHrdKHpk.5h1SHRln+MfzuQ7Z5jLhWwJP7FwAlWrE0uhkR7qFa29UKYfdaXaA6+mIObs8B7caSo0Hw9LgajDhdIiepk+nKSSCU0FSFQGHjvSxgSzCCqcDDGenuLNrlJVYVYn1Q9GNX7gun9KNRxH7FqApfZGGE.i00lI5U+jDFBIdRwgd185LAiqmvABC7DqdEbGCsaCznzQ2lMhPgvh8G54YpzeHjBMecdzBnyiW.cdxBnySW.cd1BnyyW.c91yUGy2TsQrVDZmB.L5tksxwYqoUNUQ+CQr9KA
-
@Dan-Korneff You mean, chances are it would help to change that in the source and recompile HISE?
-
@Frankbeat Admittedly, I only did a quick search through the source code. There were a couple spots where it appeared to be hard coded, but I don't know it's exact and complete implementation.
-
@Dan-Korneff Okay. But thanks anyway, mate!
-
@Frankbeat that‘s the line you need to change:
-
-
@Frankbeat no zero will cause the envelope to run indefinitely. Try something in between :)
0.001 means -60dB, 0.0005 is -66db 0.00025 is -72 dB etc y
-
@Christoph-Hart Alright, thank you very much!
-
Veery nice! Now I have a smooth logarithmic decay stopping at about -100dB.
And it was a charme to see how easy HISE can be recompiled. Never thought, I would do such things
-
@Frankbeat welcome in the world of the real software developers, all that pain that you had to go through for setup your HISE environment finally pays off :)
-
@Christoph-Hart since you're handing out welcomes to the big boys' club, can you tell me what your workspace looks like?
How are you working on this thing? Anything out of the ordinary? What do code iterations look like? Are you closing and re-launching the app all the time?
My "big boy" development experience is limited to Unreal and its way of doing C++, where it mostly hot reloading so you can, most of the time, write live code.
Do you have something like that set up for HISE? Is there something JUCE-specific in the workflow?
-
@aaronventure No, I'm doing most of the work with a standard edit & recompile cycle in VS2022+Resharper but I find that to be not too annoying - the debug build takes 10-15 seconds to recompile if I'm working on a code piece that doesn't require recompiling all modules and there are a few convenient helpers to live-edit constant values & colours (the
JUCE_LIVE_CONSTANT()
stuff). I actually found the delay between writing code and seeing the result quite useful - it forces you to think a bit more about the code you're about to write.If I'm starting out with new features from scratch (eg. the ML stuff), I usually do it in a small isolated app that compiles faster than HISE and then when it's somewhat ready I move it into the big codebase.
-
Today's
65fb14f - - added HISE_SILENCE_THRESHOLD_DB preprocessor for changing the silence detection threshold for envelope decay values etc.
seems to be about addressing this.
/** This can be used to change the threshold of what is considered "silence" in HISE. This value is used at different places to figure out whether to stop smoothing, stop a decaying envelope curve, etc. It tries to use a sensible default here, but you can override this (as a positive value, it will calculate the gain factor by taking the number as negative dB value and convert it to a gain factor). */ #ifndef HISE_SILENCE_THRESHOLD_DB #define HISE_SILENCE_THRESHOLD_DB 60 #endif