Waldorf Blofeld adventuresWavetables in the Waldorf BlofeldWaldorf 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 domainI 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 programDownload 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 Run the python script in whichever way is appropriate on your platform (that would be The program will generate a Sysex MIDI file called 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 resourcesStromeko'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 <norling@lysator.liu.se> |