This blog post comes with Ableton Operator AMS “wavetables” here.
In Ableton’s FM synth you can use different types of oscillator waves as your operators (both carriers as well as modulators), as well as draw custom ones:
What is not very well known is that you can save those as AMS files (and obviously also load them). The idea for this small project and a blog post came from a video about Ableton Live tips and tricks from Cymatics where I learned about this possibility.
If Operator can write/read such files, this this means that it’s also possible to easily create one with code, and it’s possible to use the harmonic information of arbitrary wavetables!
Note: This post is going to be slightly less technical than most of mine – as it is targeted towards electronic musicians using such software and not software engineers.
Here you can download some Operator wavetables from the harmonics of Native Instruments Massive wavetables I found in an online wavetable pack. I’ve tested those AMS files in Operator in Ableton Live 10 Suite.
To use them, just drag a file and drop it onto the Oscillator tab in Ableton Operator.
This way you can use any wavetable harmonic information as your FM synthesis operator oscillators – for both carriers and modulators!
I also include a Python script that I used to convert those (note: it’s quite naive and hacky, so some programming knowledge and debugging might be required; when programming at home I go with least effort), so you use it yourself on some other wavetables and convert them to AMS files.
Disclaimer / legal note: I don’t know the legal status of those Massive wavetables that I downloaded and converted nor can verify how legit they are (sound pretty accurate to me). IANAL, but I don’t think that sound data that can be extracted / generated by playing Massive by legal owners is copyrightable in any way, but anyway, not going to share those.
The files I uploaded are simply text descriptions of harmonics, lack phase information (more about it below) and don’t use any of the wavetables directly. The format looks like below:
AMS 1 Generate MultiCycleFM BaseFreq 261.625549 RootKey 60 SampleRate 44100 Channels 1 BitsPerSample 32 Volume Auto Sine 1 0.73 Sine 2 0.38 Sine 3 0.30 Sine 4 0.32 Sine 5 0.51 Sine 6 1.00 Sine 7 0.23 Sine 8 0.09
Why not just use some Wavetable synthesizer (like NI Massive, Ableton Wavetable, Xfer Serum etc.)?
You definitely can and should, they are excellent soft synths! This is just a fun experiment and an alternative.
However using those in Operator gives you:
- Very low CPU usage (in my experience most optimized of Ableton’s synths),
- Simplicity and immediacy of Operator,
- Possibility to tweak or change existing Operator FM patches by just swapping the oscillator waves,
- Opportunity to use wavetables as modulators or carriers and possibility of doing weird FM modulations of wavetables in different configurations including self-feedback,
- A quick inspiration point – open Operator and just start loading those user waves for different weird sounds and play with modulating them one by another. A subtle organ chord modulated by a formant growl? Why not!
At the same time you don’t get wavetable interpolation (you can approximate it with fading between different operators, but it’s definitely not the same) and generally don’t get other benefits of those dedicated wavetable synths.
So it’s a new tool (or a toy), but not a replacement.
How additive synthesis works
While the Operator is FM synth, every of the Oscillators uses additive synthesis to generate its waveforms.
Additive synthesis adds together different harmonics (multiplies of the base frequency) to approximate more complicated sounds.
If we look at a simple square wave:
According to (oversimplified) Fourier theorem, any repeating signal can be also represented as a sum of sine and cosine waves, for example for the square wave:
1 sin(w) + 1/3 sin(3w) + 1/5 sin(5w) + …
This is known as harmonic series and amount of harmonics (those 1, 1/3, 1/5 etc) multipliers and the type of harmonics (notice that all of those 1w, 3w, 5w are odd numbers! This is typical of the square waves and their “oboe”-like sound and as opposed to saw waves with both odd and even harmonics) represent the timbre of the sound.
Square wave might not be the best example because of so-called Gibbs phenomenon (those nasty oscillations at discontinuities / jumps of signals), but the reconstruction still looks (and will sound) similar.
Additive synthesis uses this concept: Instead of storing and representing waves faithfully, you can store the amplitude of harmonics.
This allows for very efficient data compression! Many waveforms can be represented very well with just a few numbers. Limitation to 64 harmonics might seem relatively large, but on the other hand this is the same as 6 octaves – so from a C0 note you can still get a C5 tone, not bad for most practical uses.
As I mentioned, the representation in Ableton’s Operator doesn’t use the wave phase (relative shift of those sine waves as compared one to another). Without using the exact phase (let’s assume just random phase for fun), the square wave reconstruction could look like this:
Not like a square at all! But… It will sound generally exactly like a square wave. So does it matter? No. Yes. Kind of. More on that later!
How to get harmonics from any wavetable?
Ok, so let’s say we have a wavetable with 2048 samples, how can we get harmonics for it? The answer is – Discrete Fourier Transform, and in general, process known as spectral decomposition.
It takes our 2048 sample signal and produces 2048 complex numbers representing shifted sine/cosine waves. This is beyond scope of this post, but for “real” signals (like audio samples) and ignoring the phase information you can extract out of is simply 1023 amplitudes of different harmonics and an information about “constant term” (average value, known in audio also as DC term).
Let’s take some simple wavetable (recording of a TB-303 wave with it’s famous diode ladder filter applied):
When we run it through FFT and take the amplitude of the complex numbers, we get the information about the frequency and harmonic content:
From this plot, translating it to the format used by Ableton is very straightforward. Literally take the harmonic index (1, 2, 3, ….), and the amplitude value. And this is all, the amplitude is the harmonic content for given harmonic index! Unsurprisingly this can be coded up in a ~dozen lines of code. 🙂
In this case, we are going to discard the phase information, but here’s how the phase looks like for the curious:
Here’s a comparison of the original (left) with the reconstructed:
Notice that the waves are definitely different by discarding the phase. Interesting characteristic of this reconstructed wave is that it is (and has to be!) “symmetrical” due to use of sine waves and no phase information.
But if you listen to a wav file, then again, they should sound +/- identical.
Does the phase information matter?
No. Yes. Kind of.
Hmm, the answer is complicated. 🙂
Generally when talking about the timbre of continuous tones (and not transients or changing signals), the human ear cannot tell the phase difference.
If we did, then if when we move around (which changes the phase), sounds would change their timbre drastically. Similarly, for example every single EQ (including the linear phase EQs) changes the phase of sounds in addition to amplitude.
But the human hearing does use the phase information, just in a different way – the difference between the phase of signals between two ears is super useful for stereo localization of sounds.
Generally it would seem that the phase doesn’t matter so much?
It doesn’t matter if we are talking about a) linear processes and b) single signal sources.
If you have two copies of a signal, even subtle phase shifts can introduce some cancellations and phase shifts (this is +/- how phaser effects work). In this case, the effect is subtle (as it is very signal dependent), but notice how the phase cancellation reduces some of the harmonics:
Additionally, when introducing non-linearities like distortion or saturation, interactions of different harmonics and different “local” amplitude can result in different distortion, let’s have a look again at the waves with added lines corresponding to some clipping points:
For example after feeding through a “saturator” (I used a hyperbolic tangent function) the waves will be very different:
Notice the asymmetric soft clipping (rounding of the peaks) of the original vs symmetric on the reconstruction.
It results in different harmonics introduced through saturation:
It’s not that one is more saturated than the other, just that the harmonics are different. This goes into symmetric / asymmetric clipping, tube vs transistor odd vs even harmonics etc. A very deep topic on which I’m not an expert.
This can and will sound different, hear for yourself.
Note: those phase differences affecting distortion so much is one of the reasons why it’s hard to get properly sounding emulations of hardware, for example on 303 emulations done through simple analog synths with saw/square waves and a generic filter after a distortion will sound not exactly like the squelchy acid we love.
So generally for raw, unprocessed sounds the phase often can be ignored, but for further processing it can be necessary and YMMV.
Despite the lack of phase encoding or wavetable interpolation, I still think using additive synthesis like in Operator for emulating more complex wavetable sounds is a cool and inspiring tool and a fun toy to play with. Next time looking for some weird tones that could be a starting point for a track, why not have fun with modulating different weird additive oscillators?
Here’s a weird bonus: you can use those AMS files inside Ableton’s Simpler/Sampler as the single cycle waveforms, just drag and drop those. It doesn’t make any sense to me though. 🙂
Side note: a bug in Ableton?
On another note, I think I found a bug in Ableton (when trying to figure out the format used by AMS files). When I save a slightly modified square wave and then load it, I get completely different results:
Notice the wave shape look on the second screen, it’s completely wrong (the loaded one also sounds horrible…).
I think I know where the bug comes from – the AMS files contain the absolute value of amplitude of a given harmonic, while the default waves visual representation (and AMS saved values) have 1/harmonic index normalization. Kinda weird – I can imagine why they would include this normalization from the user’s perspective, but not sure why the exporter/importer loop is wrong.
So don’t worry if your square waves look differently than Ableton default ones.
Pingback: Comparing images in frequency domain. “Spectral loss” – does it make sense? | Bart Wronski
I am not skilled with pyhton, Is it possilbe to convert wavetables without coding? Maybe an online converter?
hi Jelle, to use this script, you don’t need to know coding – just set the path and run the file. Right now most operating systems even have “some” version of Python installed.
An online converter would certainly be possible, but I don’t have anywhere to host it, and I don’t think there is enough interest 😦