# What are the basic categories of operations performed on audio signals to create interesting sounds?

I don't know if this question will make sense as I'm very new to dsp.

In my limited foray into audio dsp I've come across:

1. Frequency Modulation
2. Amplitude Modulation
4. Subtractive Synthesis

My question is: are these the main fundamental categories of signal manipulation (specifically for audio)?

In other words can all the effects and fancy things that FL Studio with a full suite of plugins can do, be broken down into a series and combination of the above 4 operations? Or are there a whole bunch more? Can a modern DAW with plugins theoretically be broken down into any categories in this manner? Do the above 4 categories even make sense in themselves?!

A bit of background: Essentially I'm trying to make a very basic (but very flexible) audio synthesizer/editor as a project to learn both programming and audio dsp. Using java I started by mimicking basic real world synthersizer-ish classes, calling things like Oscillator and LFO and the like, but every time I learn something new, I find myself having to rewrite everything to fit the new concept into the program.

I'm trying to start again now and come up with the basic objects and structure of the program. In order to that properly I need to know how I should allow these objects to interact etc...

Thanks!

EDIT***

Thanks for the useful comments and answers. I realise I've probably been underestimating the dsp side of stuff and I won't be able to just create a basic template & structure for a simple synthesizer and then just expand it/build on it. I will probably have to repeatedly rebuild again & again as I learn new stuff & the "proper" way to do things... It will take longer, but maybe I'll learn more? Also sorry I don't seem to have enough rep to upvote anyone yet... as soon as I can, I will.

EDIT*EDIT***

I should add that a bit of googling revealed this basic guide to "types of synthesis" which I found relevant and interesting.

• Do you want the theoretical background on synthesis techniques, or do you want something more like this (i.e common methods that are used in practice)? dsp.stackexchange.com/questions/192/… – datageist May 26 '12 at 2:17
• If I were to sum up all possible sound manipulations in as few categories as possible, I'd name linear and non-linear transformations. But those are too general and broad to be able to implement. – Alexey Frunze May 26 '12 at 9:24
• @datageist - I guess I'm gonna need both! But that's a very useful link, thanks. – kiman May 26 '12 at 19:02
• @Alex That is very general, but it is a conceptual starting point and at least I now know that I was kind of barking up the wrong tree. – kiman May 26 '12 at 19:04
• get Will Pirkle's book, Designing Software Synthesizer Plug-Ins in C++: For RackAFX, VST3, and Audio Units. you'll actually be making a synthesizer and learn along the way instead of trying to figure out everything on your own. – panthyon Aug 4 '15 at 0:41

The AM / FM category is a bit strange for effects - true, you can get some interesting effects by modulating the amplitude of an input signal ; but what does "frequency modulation" mean for a complex input signal for which you don't even have an accurate frequency representation? You could very well say that every effect is an amplitude modulation, by the $\frac{out(t)}{in(t)}$ signal, but this is not going to help you implement it!

There is no magic single-purpose engine at the heart of all the audio effects provided by music production software. But if you look at the source code of a large suite of audio effects from a DSP developer, here are some "building blocks" that will have been factored out in their own classes and which are shared by many different effects. I don't imply that this forms a good basis to categorize effects ; but from an implementation point of view, those blocks are essential:

• Fractional delay lines.
• Convolution engine, for fast convolution of an input signal with arbitrary-sized impulse responses.
• Waveshaper (application of a non-linear function to the input signal in the time-domaine).
• Synthesizer building blocks: oscillators, LFOs, ADSR envelopes.
• Signal detectors: envelope follower, f0 extractor.

With those blocks you could build:

• Synth-like filters or wah-wah: one or two biquads
• Auto-wah: envelope follower + envelope + biquad
• Flanger / Phaser: LFO + delay line
• Chorus: LFO + delay lines
• Algorithmic reverb: delay lines (array of parallel and serial comb filters)
• Convolution reverb: convolution
• Spatializer: convolution (with HRTFs impulse responses)
• Guitar amp simulation: convolution, waveshappers
• Distortion, Fuzz: gain + waveshapper
• Bitcrusher (quantizer): a particular case of waveshapper
• Ring modulator with a sine carrier: oscillator
• Noise Gate and other dynamics effects: envelope follower
• Tape simulation: convolution, waveshapper, envelope follower (for the dynamics processing)
• Tremolo: LFO
• Leslie emulation: convolution + LFO
• Vocoder: biquads + envelope follower

While some of these effects are just a matter of patching the different blocks (a flanger truly is a LFO modulating a delay line), some other effects need more complex glue between the parts, that is specific enough not to be factored into a building block of its own.

This is, overall, an interesting set of effects that will cover a lot of ground for music production, but it's not exhaustive and there are indeed some effects which do not fit this framework... Some examples: * Dirty sample rate reducer (in a bitcrusher): true, it's a multiplication by a dirac comb and then a convolution by a rectangular window... but it's easier to write it as something that duplicate the value of one sample over the N following samples instead of patching an amplitude modulation and a convolution! * Pitch alteration effects (pitch-shifting, auto-tune) do not fit this framework well. They need a more complex representation of the audio signal to be performed (phase vocoder for frequency-domain methods ; pitch detection and pitch marks for time-domain methods).

I suggest you to play with "modular style" software tools like Pd, Reaktor, Plogue, SyntheEdit... - and try implement effects from the basic building blocks they provide you.

• For what it's worth, frequency modulation is used in FM Synthesis. This is easily seen from the case of a single tone FM modulation, which results in a signal with a Fourier series defined by Bessel functions of the first kind. – Bryan May 26 '12 at 16:03
• "FM synthesis" as implemented in synthesizers (such as the Yamaha DX series, the OPL-based hardware, and software emulation of those), is a misnomer, since this is actually done with phase modulation. en.wikipedia.org/wiki/Phase_modulation – pichenettes May 26 '12 at 16:23
• I don't see any sources attached to that Wikipedia entry. Regardless, according to that entry, it says they sound "similar", and that PM is used because FM is more difficult to implement. I don't buy that, given that FM is a special case of PM. Still, the theory I cited behind FM modulation producing harmonics related to Bessel functions stands, and is useful. – Bryan May 26 '12 at 17:54
• @Bryan. See Claim 1 of the "FM" synthesis patent, US4018121. A sin(w t + I(t) sin w_m t) - it's phase modulation. PM is easier to implement because 1/ you don't need an extra accumulator to integrate the varying instantaneous frequency into a phase - see the few posts here in which people tried to generate a tone with time-varying frequency and got bitten back 2/ conversion from a frequency into a phase increment involves a division. With PM you recompute the phase increments at the modulations rate ; with FM you would need to recompute the phase increments at the sample rate. – pichenettes May 26 '12 at 18:36
• Very useful answer, thank you. I realise that I've been focussing a lot on the programming aspect (that I'm just learning) and not taking the dsp side serious enough. It probably won't be a project I can just start small and build up gradually, but one that I will have to rebuild and rebuild many times as I learn. – kiman May 26 '12 at 19:07