Blog
This started by tidying up some of the notes I took while working on audio/DSP stuff, but it's become a project of its own.
Latest post
The Design of Signalsmith Stretch
Geraint LuffSignalsmith Audio Ltd.
A closer look at our open-source C++ pitch-shifting library

My ADC talk Four Ways To Write A Pitch-Shifter is now out on YouTube!
I'd watch the talk first (if you haven't already), but then come back if you're curious about the inner workings of Signalsmith Stretch.
Investigations
Things I figured out up with while trying to solve a problem... or just having fun. 🙂
Cascaded box-filter smoothing filters
Geraint LuffSignalsmith Audio Ltd. original
We combine box-filters to create a family of cheap FIR smoothing filters, and provide some optimal sizes.

Stride-Interpolated Delay
Geraint Luff original
When we change the length of a delay-line, we usually use either a smooth slide (with detuning) or a cross-fade (with comb-filtering artefacts). Let's look at a third option!
Analytic pluck synthesis
Geraint Luff original
No feedback, no wavetables, no aliasing: synthesising a plucked-string sound using a family of directly-computable band-limited impulses.
A cheap energy-preserving-ish crossfade
Geraint Luff original
A fun little polynomial cross-fade curve with (almost) constant energy, extended into a family of curves for fractional power-laws.
Effects
Guides to some designs for particular audio effects. The reverb one was presented at ADC21.
Warmer waveshapers
Geraint LuffSignalsmith Audio Ltd.
Looking at a couple of ways to reduce the bright high-end you commonly get from waveshaping distortion, while preserving clarity.

Designing a straightforward limiter
Geraint LuffSignalsmith Audio Ltd.
We set out some requirements for a brick-wall limiter, have a go at solving them, and sketch out some ways it could be modified.

Let's Write A Reverb
Geraint LuffNo magic numbers, no tricky tuning: a clean and flexible approach to designing a smooth high-quality reverb, using a variation on the classic feedback-delay network (FDN) structure.

It's not quite a how-to guide (the ADC22 talk is closer to that), but here are some particular choices for our Signalsmith Stretch library:
Technical Tidbits
Technical stuff I thought was interesting!
Constant-time peak-hold
Geraint LuffSignalsmith Audio Ltd.
Looking at some ways to implement peak-hold (sliding maximum), including one with constant O(1) complexity.

Smooth Monotonic Interpolation
Geraint Luff
Producing a smooth, intuitive curve from a set of control points.
Invertible fixed-point complex rotation
Geraint Luff
A look at how to perform lossless rotations on integer / fixed-point co-ordinates or complex values.
Box-filters without accumulating errors
Geraint LuffSignalsmith Audio Ltd.
Exploring some ways to efficiently calculate box filters without accumulating floating-point errors, including varying-width filters.

Extra-wide window functions
Geraint Luff
Window functions are typically matched to the length of your FFT, but they don't have to be. Let's look at how we can use a window longer than the FFT size.