Howdy, I'm giving a try at how to implement a compressor as a Pd patch. This is what I came up with, it needs cyclone 0.3! Here's a screenshot. I'm using rms average to detect the gain level and rampsmooth~ to perform attack/release. I wouldn't know how to do it in Vanilla...
[image: Screen Shot 2019-04-07 at 23.42.22.png]
Seems rough and rudimentary. It's more of an intuitive approach, as I don't know much about compressor design.
I'm hoping to get feedback from you people on how to implement a compressor in Pd as a patch and how and why this approach is "ok" and can be improved, or if it's all terribly wrong.
Are there any other attempts to implement compession in Pd out there?
Thanks Cheers
Hello,
On 8/4/19 10:45 am, Alexandre Torres Porres wrote:
...compressor as a Pd patch. > I'm using rms average to detect the gain level and rampsmooth~ to perform attack/release. I wouldn't know how to do it in Vanilla...
I generally ruin all my music with this:
https://github.com/chr15m/blockhead/blob/master/e_master.pd https://github.com/chr15m/blockhead/blob/master/e_master-help.pd
The age old tradeoff between the music being actualyl good vs people wanting to dance to it.
Cheers,
Chris.
hi, you responded to my "how to do it in vanilla" inquire, yeah, I can see how to do it with [line~] and [env~] and such, but I meant under a signal rate paradigm.
Anyway, I see your approach on compression seems similar to mine :) haven't looked throughly though.
thanks
Em dom, 7 de abr de 2019 às 23:52, Chris McCormick chris@mccormick.cx escreveu:
Hello,
On 8/4/19 10:45 am, Alexandre Torres Porres wrote:
...compressor as a Pd patch. > I'm using rms average to detect the gain
level and rampsmooth~ to
perform attack/release. I wouldn't know how to do it in Vanilla...
I generally ruin all my music with this:
https://github.com/chr15m/blockhead/blob/master/e_master.pd https://github.com/chr15m/blockhead/blob/master/e_master-help.pd
The age old tradeoff between the music being actualyl good vs people wanting to dance to it.
Cheers,
Chris.
My tech development newsletter: https://mccormick.cx/subscribe
On 08.04.19 05:22, Alexandre Torres Porres wrote:
hi, you responded to my "how to do it in vanilla" inquire, yeah, I can see how to do it with [line~] and [env~] and such, but I meant under a signal rate paradigm.
excuse my ignorance, but where do you see "[line~] and [env~] and such" in the chris' limiter?
sgamkdr IOhannes
On Mon, 2019-04-08 at 10:13 +0200, IOhannes m zmoelnig wrote:
On 08.04.19 05:22, Alexandre Torres Porres wrote:
hi, you responded to my "how to do it in vanilla" inquire, yeah, I can see how to do it with [line~] and [env~] and such, but I meant under a signal rate paradigm.
excuse my ignorance, but where do you see "[line~] and [env~] and such" in the chris' limiter?
It's in the [e_automcompress] abstraction used by [e_master].
Roman
On 08.04.19 12:23, Roman Haefeli wrote:
On Mon, 2019-04-08 at 10:13 +0200, IOhannes m zmoelnig wrote:
On 08.04.19 05:22, Alexandre Torres Porres wrote:
hi, you responded to my "how to do it in vanilla" inquire, yeah, I can see how to do it with [line~] and [env~] and such, but I meant under a signal rate paradigm.
excuse my ignorance, but where do you see "[line~] and [env~] and such" in the chris' limiter?
It's in the [e_automcompress] abstraction used by [e_master].
but that is not used, is it?
fgmasdr IOhannes
for the white paper readers, there is the very good article:
Giannoulis, Dimitrios, Michael Massberg, and Joshua D. Reiss. “Digital Dynamic Range Compressor Design—A Tutorial and Analysis.” Journal of the Audio Engineering Society 60, no. 6 (2012): 399–408.
On 8 Apr 2019, at 12:18, IOhannes m zmoelnig zmoelnig@iem.at wrote:
On 08.04.19 12:23, Roman Haefeli wrote:
On Mon, 2019-04-08 at 10:13 +0200, IOhannes m zmoelnig wrote:
On 08.04.19 05:22, Alexandre Torres Porres wrote:
hi, you responded to my "how to do it in vanilla" inquire, yeah, I can see how to do it with [line~] and [env~] and such, but I meant under a signal rate paradigm.
excuse my ignorance, but where do you see "[line~] and [env~] and such" in the chris' limiter?
It's in the [e_automcompress] abstraction used by [e_master].
but that is not used, is it?
fgmasdr IOhannes
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
On Mon, 2019-04-08 at 13:18 +0200, IOhannes m zmoelnig wrote:
On 08.04.19 12:23, Roman Haefeli wrote:
On Mon, 2019-04-08 at 10:13 +0200, IOhannes m zmoelnig wrote:
On 08.04.19 05:22, Alexandre Torres Porres wrote:
hi, you responded to my "how to do it in vanilla" inquire, yeah, I can see how to do it with [line~] and [env~] and such, but I meant under a signal rate paradigm.
excuse my ignorance, but where do you see "[line~] and [env~] and such" in the chris' limiter?
It's in the [e_automcompress] abstraction used by [e_master].
but that is not used, is it?
Am confused now. The logic inside [e_autocompress] is message based and the signal level is taken from [env~] and in the end converted back to a signal with [line~]. From what I understand, Alexandre is looking for an implementation that is purely signal based (or in other words: emulates more closely a analog circuit compressor).
Or am I missing something completely?
Roman
Em seg, 8 de abr de 2019 às 13:50, Roman Haefeli reduzent@gmail.com escreveu:
From what I understand, Alexandre is looking for an implementation that is purely signal based (or in other words: emulates more closely a analog circuit compressor).
Or am I missing something completely?
yup. Not that I'm looking for a way to do it in vanilla, I guess I didn't express myself well. I can even actually think of ways to do it now, but I'm really happy with externals and I'm just really concerned on how is the best and more sophisticated way to implement compressors in Pd. Apparently, my approach is the same as the other examples provided here.
thanks
I could also check diagrams and source codes, as my final intent is to include a new external in my library, be it an abstraction or not. If there's something important about compression design that you can't efficiently perform as an abstraction, then I guess the compiled external is the way to go. But one way or another, it really helps me out if I can first figure out how to implement this thing as a patch.
cheers
Em seg, 8 de abr de 2019 às 14:42, Alexandre Torres Porres porres@gmail.com escreveu:
Em seg, 8 de abr de 2019 às 13:50, Roman Haefeli reduzent@gmail.com escreveu:
From what I understand, Alexandre is looking for an implementation that is purely signal based (or in other words: emulates more closely a analog circuit compressor).
Or am I missing something completely?
yup. Not that I'm looking for a way to do it in vanilla, I guess I didn't express myself well. I can even actually think of ways to do it now, but I'm really happy with externals and I'm just really concerned on how is the best and more sophisticated way to implement compressors in Pd. Apparently, my approach is the same as the other examples provided here.
thanks
On Mon, 2019-04-08 at 15:01 -0300, Alexandre Torres Porres wrote:
Apparently, my approach is the same as
the other examples provided here.
I wouldn't say so. The one I posted differs in that it doesn't average the side-chain signal. Also, from what I understand, the rampsmooth~ object creates linear ramps while my compressor uses [rpole~] which generates "curved" ramps, more akin to a condenser being filled and depleted in an analog circuit.
I'm not aware of any totally different designs from what has been posted here. Obviously, they are similar to some degree. So, I'm not quite understanding what 'sameness' level you're talking about.
Also, yours and Chris' differs quite substantially in that yours keeps everything in the signal domain while e_master.pd does the gain calculation in message domain.
Roman
Em seg, 8 de abr de 2019 às 16:44, Roman Haefeli reduzent@gmail.com escreveu:
I'm not quite understanding what 'sameness' level you're talking about.
I consider these examples all following the same structure/approach. The differences are nothing but different options inside the structure, like using a Peak over RMS detection (in my design, by the way, I'm thinking about offering both options set by the user).
Well, I just followed my intuition and I was wondering if other designs followed a quite different approach altogether. I still consider these options kind of simple, as we don't have a 'knee' parameter, for instance.
Anyway, I'll keep looking more into compressor design, and I'll try and check some source codes, diagrams and literature out there. I'm kinda happy with what I'm getting with this design from my first tests, but it still seems kinda cheap :)
thanks
ps. Roman, why does your patch have a [- 2.5] dB correction for the threshold parameter?
Also, yours and Chris' differs quite substantially in that yours keeps everything in the signal domain while e_master.pd does the gain calculation in message domain.
Roman
Em seg, 8 de abr de 2019 às 16:44, Roman Haefeli reduzent@gmail.com escreveu:
The one I posted differs in that it doesn't average the side-chain signal.
I've been testing suck "peak" detection mode, but it doesn't work well at all with low attack values, and a 0 attack makes it unusable.
Has anyone solved that or that's the way it has to be?
cheers
I'm pretty sure the rjdj abstractions, "rjlib" ? Had a compressor, and those were mostly if not all pure vanilla abstractions.
On April 7, 2019 8:22:20 PM PDT, Alexandre Torres Porres porres@gmail.com wrote:
hi, you responded to my "how to do it in vanilla" inquire, yeah, I can see how to do it with [line~] and [env~] and such, but I meant under a signal rate paradigm.
Anyway, I see your approach on compression seems similar to mine :) haven't looked throughly though.
thanks
Em dom, 7 de abr de 2019 às 23:52, Chris McCormick chris@mccormick.cx escreveu:
Hello,
On 8/4/19 10:45 am, Alexandre Torres Porres wrote:
...compressor as a Pd patch. > I'm using rms average to detect the
gain
level and rampsmooth~ to
perform attack/release. I wouldn't know how to do it in Vanilla...
I generally ruin all my music with this:
https://github.com/chr15m/blockhead/blob/master/e_master.pd https://github.com/chr15m/blockhead/blob/master/e_master-help.pd
The age old tradeoff between the music being actualyl good vs people wanting to dance to it.
Cheers,
Chris.
My tech development newsletter: https://mccormick.cx/subscribe
hello,
in nusmuk_audio you can find my single band compressor: [compress_limit~] It look even more rudimentary than yours, but it's the same kind of approach. I think the main improvement should be to implement a multi band compressor.
From a personal pov, I prefer smooth curve (iir filter) than ramp.
cheers c
Le 08/04/2019 à 04:45, Alexandre Torres Porres a écrit :
Howdy, I'm giving a try at how to implement a compressor as a Pd patch. This is what I came up with, it needs cyclone 0.3! Here's a screenshot. I'm using rms average to detect the gain level and rampsmooth~ to perform attack/release. I wouldn't know how to do it in Vanilla...
Screen Shot 2019-04-07 at 23.42.22.png
Seems rough and rudimentary. It's more of an intuitive approach, as I don't know much about compressor design.
I'm hoping to get feedback from you people on how to implement a compressor in Pd as a patch and how and why this approach is "ok" and can be improved, or if it's all terribly wrong.
Are there any other attempts to implement compession in Pd out there?
Thanks Cheers
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
On Mon, 8 Apr 2019 at 04:48, Alexandre Torres Porres porres@gmail.com wrote:
I'm using rms average to detect the gain level and rampsmooth~ to perform attack/release. I wouldn't know how to do it in Vanilla...
You can square the input, average it with a 1pole lowpass, and take the sqrt. The period of the filter is your analysis window. I was convinced I had seen this technique on Miller's book but I can't find it anymore.
D
[image: Screen Shot 2019-04-07 at 23.42.22.png]
Seems rough and rudimentary. It's more of an intuitive approach, as I don't know much about compressor design.
I'm hoping to get feedback from you people on how to implement a compressor in Pd as a patch and how and why this approach is "ok" and can be improved, or if it's all terribly wrong.
Are there any other attempts to implement compession in Pd out there?
Thanks Cheers
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
By the way, I found this in my abstractions but I don't know how bad the distortion is compared to standard compressors.
[image: image.png]
http://dariosanfilippo.tumblr.com
On Mon, 8 Apr 2019 at 11:02, Dario Sanfilippo sanfilippo.dario@gmail.com wrote:
On Mon, 8 Apr 2019 at 04:48, Alexandre Torres Porres porres@gmail.com wrote:
I'm using rms average to detect the gain level and rampsmooth~ to perform attack/release. I wouldn't know how to do it in Vanilla...
You can square the input, average it with a 1pole lowpass, and take the sqrt. The period of the filter is your analysis window. I was convinced I had seen this technique on Miller's book but I can't find it anymore.
D
[image: Screen Shot 2019-04-07 at 23.42.22.png]
Seems rough and rudimentary. It's more of an intuitive approach, as I don't know much about compressor design.
I'm hoping to get feedback from you people on how to implement a compressor in Pd as a patch and how and why this approach is "ok" and can be improved, or if it's all terribly wrong.
Are there any other attempts to implement compession in Pd out there?
Thanks Cheers
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
On Sun, 2019-04-07 at 23:45 -0300, Alexandre Torres Porres wrote:
Howdy, I'm giving a try at how to implement a compressor as a Pd patch. This is what I came up with, it needs cyclone 0.3! Here's a screenshot. I'm using rms average to detect the gain level and rampsmooth~ to perform attack/release. I wouldn't know how to do it in Vanilla...
Seems rough and rudimentary. It's more of an intuitive approach, as I don't know much about compressor design.
I'm hoping to get feedback from you people on how to implement a compressor in Pd as a patch and how and why this approach is "ok" and can be improved, or if it's all terribly wrong.
Are there any other attempts to implement compession in Pd out there?
Check:
[dynlib_compressor~] (stereo single band compressor)
[dynlib_4mbc~ ] (stereo four-band multiband compressor)
from:
https://github.com/reduzent/netpd-instruments/tree/master/abs
Cheers, Roman