Syntə RSS repo @m
bandcamp
say hi! events
back

30/08/2026

Dynamics2

I can explain everything…

ideas

like all of my best ideas, the dynamics in Syntə largely came about by accident. Well, actually that’s not true. It was always the intention to avoid loud surprises and it turns out that takes quite a lot of limiters with some careful design. Its still not perfect but less prone to blasting your ears off than a lot of tools out there…
Its a continual effort to calibrate and check my maths (cos thats how I work)

how we got here

Our ears are quite complicated in how they respond to sound at different frequencies and levels.
I’m not going to outline everything here. but in general we’re a lot more sensitive to higher pitched sounds, especially at low volumes.
With Syntə I wanted to be unconstrained regarding how sounds are constructed, for example Pure Data doesn’t let you use feedback (not easily at least), whereas in Syntə its a core component.
Take the osc function:

+ a mod 1 out a

here, the output is sent to a which is used at the input - this is a feedback loop.
The main danger of these is large DC offsets that splat all the audio, this is mainly dealt with bu some artifical headroom followed by a high pass filter.
another classic example is delay feedback which can result in piercing shrieks. This is the thing I wanted a limiter for, as well as other things like full-scale white noise.

limitations

The first limiter (oh yes there is more than one, eek) was on the main output and has a simple sidechain eq to make it sensitive to sound along a ‘pink noise’ spectrum. There is more detail about this in the project readme btw.
This has worked well, with some tweaks over time.
however, if you have one loud sound it will ‘duck’ all the other ones, which can be disruptive.
So I decided to add a limiter of similar design on a per-listing basis. this means that for each chunk of code, there is a limiter to stop it getting too loud and stomping on the others.
the main output limiter remains, just to be on the safe side.

quirks

there is a quirk to the per-listing limiters that, if you use the mix function, it will slowly turn down the sound if it is regularly peaking.
tbh I haven’t properly checked that this is working properly, which I should probably look into at some point.
Its fun to have a fast feedforward path and a slow feedback path to the sidechain.

then I added another one

oops. From playing at gigs, especially emoms, the output always was a bit quiet in comparision to other setups. Which can be a bit annoying. Plus, I was getting bored at normalising or doing a finalising limiting pass on recordings before uploading.
so i designed a new ‘finalising’ limiter to place right at the end of the chain.
this uses the same code as the other output limiter, except with different time constants.
The other limiter has relatively slow and symmetrical reaction times that are close to how the ear percieves loudness - shorter sounds are let through more.
The finalising limiter has a very fast reaction onset (attack) and it also has a lookahead delay so it can peek into the ‘future’ and act before a transient appears. It has a longer but still fairly quick release time.
There are other things you can do like have adaptive time constants, maybe I’ll experiment with that in future.
this limiter listens to all frequencies the same, so it has a tendency to brighten the overall mix, however that is okay because there was already a ’loudness eq’ that could be turned down to compensate.

and then

I felt like the sound was a bit ‘spikey’, and wanted more sustain, especially in the midrange.
So i added what I call a half-band.
This is like an additional band of limiting, but instead of being separate it is mixed back in to the main output.
when you mix dynamics channels together like this it is called parallel compression (or limiting)
the sound is high-pass filtered at 420 Hertz (naturally) before being compressed at fairly high gain and a slighly longer release time and then mixed back in.

wip

this is still under evaluation, and tbh the whole setup needs another calibration pass.
but it does sound quite nice and makes things more ‘full’
it would prob be better for this parallel pass to happen before the finalising limiter instead of alongside it, however because the midrange is generally quieter its okay for now.

okay so the dynamics slightly got out of control…

I have attempted to explain how we got here.
a few simple steps to doom… :)

benefits

I can now upload wavs that Syntə spits out directly to bandcamp, which streamlines the process and speeds it up.
which is great.
I’ll probably continue to tweak things. there are some tweaks that aren’t commited to the repo yet even.

it definitely wasn’t an aim to squish all life out of the sound, which I think I have avoided

I though you all might find that interesting
or at least I felt guilty enough to try to excuse my excesses hehe

↑ top