WavePainter is a custom wavetable synthesizer which allows the user to draw a waveform and then play it at any pitch using MIDI input.
WavePainter intends to give the user ultimate freedom in sound creation. The touchscreen interface will make sound creation both a visual and a tactile experience, and real-time feedback via MIDI input will allow the user to adjust their sound exactly as they like. WavePainter is not intended to make hi-fi sounds (and probably will not be able to, considering hardware limitations), but to make interesting and organic sounds.
Wavetable synthesis is a method of digital synthesis where the application holds a table of wave samples which it plays back at different speeds to create any pitch. This sort of synthesis is quite efficient on low-power devices such as the Raspberry Pi or Arduino platforms because, although it sacrifices space, it only requires a memory lookup rather than a complex trigonometric floating point calculation to output a sample.
An additional benefit of wavetable synthesis is that it can output any arbitrary waveform stored in its memory – it is not limited to primitive forms such as sines, saws, or squares. WavePainter takes advantage of this capability by allowing the user to draw their own waveform graphically.
Hardware and Implementation
WavePainter will aim to run the graphical part of the application as a pygame program on a Raspberry Pi, using a 2.8 in capacitive touchscreen for user input. The synthesizer will either also run on the Raspberry Pi using the Jack Audio Connection Kit, or on an attached Arduino board using PWM for audio output.
All code will be located at https://github.com/davjgardner/wavepainter.
Fathom Synth is a VST plugin which allows the user to design waveforms using primitive waveforms and bezier curves. WavePainter may eventually add bezier curve support as well.
the_synth is a wavetable synthesizer implementation on the Arduino platform.