back   Back to the index page

Waldorf Blofeld adventures

Wavetables in the Waldorf Blofeld

Waldorf Blofelds blessed with recent firmware have the capability to load user wavetables (with sysex MIDI messages). Each wavetable consists of 64 waves, each with 128 21-bit signed samples. I like to imagine that as a table (2D matrix) with 64 lines (waves) and 128 columns (samples).

The instrument's oscillator will select one of the 64 waves (or actually, I think, interpolate betweeen two adjacent "lines") based on its PWM setting at that exact moment. Then it will interpolate audio samples (of whatever size is used internally) using the 128 waveform samples. You can think of it as the oscillator scanning a two-dimensional table; traveling left-to-right at a speed depending on the current key (and tuning and modulation and octave setting and…) and traveling up and down depending on the wavetable startpoint plus any PWM modulation.

I found the Sysex message format for uploading wavetables on the Waldorf user forum, here are pointers to the posts:

In summary, the format is:

Index   Label   Value           Description
0       EXC     F0h             Start of SysEx
1       IDW     3Eh             Waldorf Music ID
2       IDE     13h             Blofeld ID
3       DEV                     Device ID
4       IDM     12h             WTBD (Wavetable Dump)
5       WT      50h..76h        Wavetable number
6       WN      00h..3Fh        Wave number
7               00h             Format
8-391   WDATA   00h..7Fh        Data: triplets with little-endian signed 21-byte numbers
392-405 NAME    20h..7Fh        Wavetable name (ASCII)
406             00h             Reserved
407             00h             Reserved
408     CHK     WDATA & 7Fh     Checksum (add bytes 7..407 together)
409     EOX     F7h             End of SysEx
64 sysex messages are send back to back to transfer a whole wavetable.

Creating Blofeld wavetables in the frequency domain

I created a stupid little Python program that can generate Blofeld wavetables from a pixmap image with frequency information (i.e. harmonics and stuff). It takes a 64x64 pixel greyscale png image and generates a MIDI sysex file with the wavetable data by making a fourier transform of each line.

This is how it's used: Each of the 64 lines in the image represents a single wave, with the first wave at the top (y-coordinate 0). The pixel values in that line represent the amount of harmonics that should be present, starting from the fundamental in the first column (x-coordinate 0). Black means no sound at that frequency, and shades of gray and white mean that there will be a proportional degree of content at that frequency.

So now you can use your favourite image editor (the GIMP) to create any wavetable sound you can imagine. Easy! No, not exactly. The example below has a strong fundamental frequency at wave 0 (sounds like an organ) and introduces octaves around wave 10 and then more and more overtones (mostly even harmonics, I think).

Running the program

Download the Python program with a swift click on this link and unpack it.

You need to install Python 2.x, SciPy and NumPy and Python Imaging Library (PIL). It should work on Windows and MacOS and is proven to work on (Ubuntu) Linux.

Create a 64x64 pixel 8-bit grayscale image and save it as wavetable.png in the directory where you put the script.

Run the python script in whichever way is appropriate on your platform (that would be ./ on Unix).

The program will generate a Sysex MIDI file called wavetable.mid that puts the wavetable data in slot 80. The slot, name and Blofeld id are hardcoded at the moment, but you can change them with relative ease in the source code.

Send the generated midi file to your Blofeld with a midi file player (aplaymidi works if you're on Linux) and run for your life.

Blofeld resources

The Waldorf user forum

Stromeko's synth pages with lots of Waldorf resources

Blofeld wavetable editor and patch editor software for Windows

This page was last updated: Sun Dec 18 14:53:24 2011

Jonas Norling <>
xhtml?, css?