Faking a sidechain compressor
Big huge thanks to the folks in the Strudel discord for helping me with this, particularly @jader, @froos, @superdirtspatz and @cleary for showing me a bunch of these techniques and providing some great examples.
Big huge disclaimer that I’m pretty new to music production, might be wrong, and at least am massively over-generalising.
What’s a sidechain compressor?
A compressor is a thing that makes things quieter when they get loud. A sidechain compressor is a thing that makes one thing quieter when another thing is loud. Most commonly, you’ll see this as bass/pads compressed (quieter) when the kick drum plays (is loud). This gives the effect sometimes called “pumping bass”.
Why do I want one?
Having the rest of your mix move away from the kick sound gives a whole bunch of movement to the sound, and particularly provides some off-beat emphasis. This is super useful when you’re aiming to make your listeners/dancers bounce.
What options are there in Strudel for getting this kind of effect?
There’s not a real sidechain compressor in Strudel. There’s sort of an approximation to one in Tidal via busses. But there’s a bunch of different ways to fake it. At the moment, all these are constrained by needing to have a note in the pattern at least as frequently as the kick drum you’re sidechaining off. You can fudge over the note onsets to make it sound kinda continuous, but you can’t change the gain inside a single note.
Pattern the gain of your part
Thanks to @froos for this full example.
This is how I’d been attempting to fake the effect before asking for help on the Strudel Discord. I think I’d been tending to fake a bit more of a curved shape by having more than 2 steps in the gain pattern.
// A little rolling semiquaver bass thingy$: n(`[0!12 <[1!2 2!2]!3 [2!2 1!2]>@4]`) .scale("F2:minor") .s("sawtooth") .gain("[0.3 0.8 1 0.9]*4");This approach seems to work well if you have lots of notes in your bar, so you have fairly precise control of where in the bar is louder and quieter. It doesn’t work as well if you have notes that want to hold across multiple drum beats. I think it would be possible but annoying to make work if you have a more complex kick pattern.
Play with the attack and release of your sound
Thanks to @froos for this idea. I’m not good enough at understanding ADSR parameters to have come up with that as an approach.
// A lil wibbly crotchet bass thingy$: n("0 0") .scale("G1:minor") .gain(".3 4") // pattern the attack and release to smooth over the note onsets .attack(".2 .3") .release(".1 .05") .s("sawtooth") .fast(4) .lpf(200) .lpenv(3) .lpd(0.2) .lpq(6);Fake it with FM modulation
Thanks to @superdirtspatz for the example of this.
A smaller, simpler example from me to help me isolate the knobs which affect the fake-sidechain-thing from the ones that make the example actually sound like music.
// a continuous-sounding pad chord thingy$: n("[0,2,4,6]*4") .scale("G3:dorian") .s("triangle") // Some frequency modulation, with a not super speedy attack // Tweak the fmattack to get the rhythm you want // and the other fm params to control the sound .fm(4) .fmattack(0.3) // Things to make the sound nicer .lpf(777) .hpf(777);The future?
@jader pointed out that there’s a pull request open on Strudel (for a while) which would add arbitrary gain modulation per event. If that got merged (and also came with some docs about what it does), that might be an approach. But I don’t have the skills or understanding of this feature to run it in an unreleased version of Strudel at the moment.
Use tidal instead?
This is how you could do it in Tidal, which works even if you don’t just have a 4 to the floor kick pattern using ampbus.
|* ampbus 1 (stitch (10011000) 0.1 0.5)
struct "10011000" $ s "bd"