I've been testing, thinking, creating new versions, talking with Bojcha who did lots of tests... And I think that the new compressor changes are good in one way and bad in another.
With Gamma, small differences in level are quickly compensated, with helps with a lot of things. But... Big differences are less quickly compensated. Why I think this is bad? Well, say you set the attack speed fast enough to reduce the level without hearing an audible quick level drop (which leads to 'clicking'-like sounds when a new loud sound starts). Point is, the speed at which the level gets lowered must definitely not be longer than for small differences.
For release, especially large differences must be compensated very fast - for 2 reasons:
- Big differences mean very dynamic input, and for more dynamic input it's good that more compression occurs.
- If you have a loud sound, and it takes multiple seconds for the level to get back, that sounds really bad.
- If speeds for different level differences is not equal, then for multiband compression, different bands might come back at different monents which leads to very bad effects.
So, the time it takes for the level to be restored must be constant - and the same is likely true for attack speeds! And hence the current 'Gamma'-behavior is bad.
Now, that doesn't mean that we should do nothing. Because especially for large differences, when the volume comes back at the same speed, it actually *does* take a bit longer before you don't hear anymore that the level is lower.
Example:
- Sound drops by 4 dB. When 3 dB has been restored, you really won't hear much difference anymore in level.
- Sound drops by 40 dB. Now, when 39 dB has been restored you really don't hear much difference anymore.
So in one case when 75% restoration is there we're good, in the other we need 97.5%. And since - without Gamma - the behavior is asymptotic, reaching 97.5% takes multiple times as long as reaching 75%.
Preliminary conclusion: I need to make sure that the time it takes to get to - say - 1 dB from the target level is nearly constant.
What Gamma does to small differences is that it speeds up reaching the target level. Which is good after a large jump, but makes sound more aggressive in other cases - and that can only be compensated by increasing attack and release times, which makes the problem worse!
So, and I'm welcoming other suggestions, but here's what I managed to think of so far:
1. After a big volume change, the speed when reaching the target level must stay higher than it would normally be
2. The speed at big differences must be increased further.
I think 1. is better, because 2. means really really fast speeds at big differences, which would probably lead to other issues.
Edit: I just read somewhere that some compressors don't use attack and release times but slopes in dB/s, which means that they *do* use a linear behavior. I still think that it's bad though...
Edit #2: People have already reported positive results with the current Gamma implementation, which basically breaks everything I've said above. But, Gamma also reduces recovery time after big drops (recovery starts slower but ends faster). I have 2 conflicting ideas here.
For big differences, I think my description above applies and we need a very fast level change.
For small differences, I'm not sure. If I take my "constant time to reach approx. 1 dB difference in level" approach, that would mean that very small differences would almost lead to a stand-still. The good news here is that audio with little dynamics will be changed less.
On the other hand, for small differences a constant speed (linear response) won't have the bad effects described above. But it does call for longer release times as described above, which leads to all the other issues again. So...... I think a near-standstill at small differences is probably ok.
Weighing all this, I'm leaning towards something where a fast volume change "pushes" forward. The best analogy is driving a car.
If I have to drive 10 meters, I'll just barely hit the gass and drive very slowly.
If I have to drive 1 km, I hit the gass and speed up (this is 'release hold'), then release the gass and let the car roll slowing down towards the end.
In my new idea I would not release the gas until I'm very close to the end and then hit the brakes to stop.
So basically, once we have speed, my new idea comes down to keeping that speed even if we get closer to the destination, instead of slowing down gradually.
Ow this is nice. Done correctly, this could lead to a linear release speed which still depends on the level difference - so it's linear, but faster if the difference is bigger.
|