Audio Compression & Limiting - low CPU%
Posted: Fri Feb 14, 2020 10:40 am
What building blocks would you recommend for keeping the CPU% under 24% while executing 24 Audio Compressors-Limiters, processing 16-bit audio streams?
peak envelope follower (attack time, release time)
RMS envelope follower (attack time, release time, rms time)
lin2db translator
db2lin translator
compressor law (T1 threshold, C1 compression ratio)
compressor & limiter law (T1 comp threshold, C1 comp ratio, T2 limit threshold, C2 limit comp ratio)
This is for emulating a 6-band stereo hearing aid (see the attached .fsm). Barebone. Not yet reliable, due to some initialization malfunction. Please let me explain. After loading (it fails loaging randomly), for the various modules to take effect, one is obliged to wake-up the bypass switches, some pots and some selectors. How to solve this? Any sort of guidance will be highly appreciated.
The bandwidth limiting IIR filters at the input (a highpass followed by a lowpass) can be Butterworth or Bessel, of any order (slope) between 1 and 8.
The band-splitter is a IIR Linkwitz-Riley array equipped with all required phase followers. I had great fun designing this. Albeit looking funky, and possibly naive, It guarantees a perfect bands recombination. Unfortunately, not phase-linear. I mean, the global phase. One can change the band-splitting filters order (slope). Please note, upon specifying F1 (lowest crossover frequency pot) and F2 (highest crossover frequency pot), all crossover frequencies get automatically calculated in logarithmic progression.
In case you know more efficient band-splitters that are guaranteeing a perfect bands recombination, please let me me know.
- I am considering a IIR bidirectional filter array as alternative (phase linear thus), because then, a simple delay per channel suffices as phase (delay thus) equalizer. Hope the latency won't cause an issue in case 100 Hz is the lowest frequency to be reproduced.
- I guess there may be other possibilities, like warped-IIRs or warped-FIRs. Right?
The RMS envelope follower, lin2db translator, db2lin translator, compressor law are not my conception. In case you recognize one or another as yours, please tell and I'll be glad to add credits inside the corresponding module.
Your comments and suggestions are always welcome.
peak envelope follower (attack time, release time)
RMS envelope follower (attack time, release time, rms time)
lin2db translator
db2lin translator
compressor law (T1 threshold, C1 compression ratio)
compressor & limiter law (T1 comp threshold, C1 comp ratio, T2 limit threshold, C2 limit comp ratio)
This is for emulating a 6-band stereo hearing aid (see the attached .fsm). Barebone. Not yet reliable, due to some initialization malfunction. Please let me explain. After loading (it fails loaging randomly), for the various modules to take effect, one is obliged to wake-up the bypass switches, some pots and some selectors. How to solve this? Any sort of guidance will be highly appreciated.
The bandwidth limiting IIR filters at the input (a highpass followed by a lowpass) can be Butterworth or Bessel, of any order (slope) between 1 and 8.
The band-splitter is a IIR Linkwitz-Riley array equipped with all required phase followers. I had great fun designing this. Albeit looking funky, and possibly naive, It guarantees a perfect bands recombination. Unfortunately, not phase-linear. I mean, the global phase. One can change the band-splitting filters order (slope). Please note, upon specifying F1 (lowest crossover frequency pot) and F2 (highest crossover frequency pot), all crossover frequencies get automatically calculated in logarithmic progression.
In case you know more efficient band-splitters that are guaranteeing a perfect bands recombination, please let me me know.
- I am considering a IIR bidirectional filter array as alternative (phase linear thus), because then, a simple delay per channel suffices as phase (delay thus) equalizer. Hope the latency won't cause an issue in case 100 Hz is the lowest frequency to be reproduced.
- I guess there may be other possibilities, like warped-IIRs or warped-FIRs. Right?
The RMS envelope follower, lin2db translator, db2lin translator, compressor law are not my conception. In case you recognize one or another as yours, please tell and I'll be glad to add credits inside the corresponding module.
Your comments and suggestions are always welcome.