Hello Fellow Faustians, First of all many thanks to the developers and documentation writers: due to their efforts, I was able to quickly write a plugin I had been dreaming about for years, while getting my first taste of functional programming. Here is a simplified version, to explain what I did: http://magnetophon.nl/sounds/magnetophon/Faust/MultiBusComp/MultiBusComp.four_mono_compressors-svg/process.svg The feedback loop goes into the side-chain of the compressor. This can be used in mixing and stem-mastering. Normally, when you put a limiter on the master output, the signal with the most energy (usually bass frequencies) will 'push away' all other signals. With this plugin -YOU- decide who wins the fight for the master bus. For more explanation and a usage example, see the attached .dsp file. Making a stereo version was a challenge and a version with an arbitrary number of channels per compressor even more so. Adding metering was near impossible for me. I probably went about the routing and metering functions the wrong way; I was hoping that by avoiding variables, I would get a block diagrams as easily readable as the mono version. Here is the full version, same as the the attachment: http://magnetophon.nl/sounds/magnetophon/Faust/MultiBusComp/MultiBusComp.eight-stereo-compressors-svg/process.svg I have the following questions: 1) Is there a better way to create the routing from the first link, but generalized to an arbitrary number of compressors and channels per compressor, as in the second link? Preferably one that produces a readable block diagram. What I did is depicted here: http://magnetophon.nl/sounds/magnetophon/Faust/MultiBusComp/MultiBusComp.eight-stereo-compressors-svg/MultiRouting-0xaadaae8.svg (line 129-159 of the attachment) 2) Would it be possible to change Faust so that "par(i,0,something)" works? If not, why, and is there a workaround? 3) Would it be possible to make a function similar to "attach" but with one input and no output, so you could tell the compiler to not optimize out something without having to make convoluted routings? 4) I can't figure out how to implement a meter for total gain reduction, generalized for any number of compressors and channels per compressor. In pseudo-code it is as simple as: add all input-signals, get that signals envelope, subtract it from the output-envelope, display value. In faust it gets very difficult (for me at least), because of the need for "attach" combined with the particular routing I need. 5) Are feedback loops always one sample, no matter how many calculations are done within it? Obviously excluding explicit delays... 6) It's probably my ignorance, but the stereo compressor in effect.lib seems oddly implemented to me: compressor_stereo(ratio,thresh,att,rel,x,y) = cgm*x, cgm*y with { cgm = compression_gain_mono(ratio,thresh,att,rel,abs(x)+abs(y)); }; I would expect: cgm = min(compression_gain_mono(ratio,thresh,att,rel,x),compression_gain_mono(ratio,thresh,att,rel,y)); Are these equivalent? Is it an optimization? Am I nitpicking? 7) Is there a better way to implement gaincomp_multi(Nr), line 92-112 8) Up to 85 stereo compressors works, but 86 gives "Invalid Faust Code". Why is that? (line 49) Thanks for your attention, and enjoy MultiBusComp. Bart.