WavePainter

A Draw-Your-Own Wavetable Synthesizer

  • Overview
  • Design
  • Updates

Overview

April 13, 2018 7 responses davjgardner

WavePainter is a custom wavetable synthesizer which allows the user to draw a waveform and then play it at any pitch using MIDI input.

Motivation

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

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.

All code is located at https://github.com/davjgardner/wavepainter.

Existing Work

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.

7 thoughts on “Overview”

  1. Darryl Haylett says:
    December 4, 2018 at 5:52 PM

    You have observed very interesting points! ps decent web site.

    Reply
  2. ogphillips says:
    April 25, 2018 at 12:18 AM

    I can’t seem to comment on your Design tab, so I’m posting my design comment here. This sounds like you have a great idea of how your device will work, and you have plenty of backup plans! If the RP ends up not working as you expect, I noticed that you mentioned pros and cons of the Arduino and the Teensy. Which one do you think you’d prefer over the other? Is it more important to have analog out than to have features of the other device?

    Also, do you already have an idea of how you will utilize that Python library in order to implement this? Are you writing your own code or following a template from a similar project/idea?

    Reply
    1. davjgardner says:
      April 25, 2018 at 2:05 AM

      Sorry, I forgot to check the box allowing comments, fixed now.
      Arduino vs Teensy depends on what the course staff have in stock. I have an Arduino Micro that I could use, but I don’t really want to dedicate my personal device to this project. For that reason I would be more likely to go with the Teensy because I know there are some available.
      I’ll be writing all my own code, but I expect I’ll draw heavily from pygame examples and documentation since I haven’t used the library before. If for some reason I hate it I might instead write a native GUI app in C++ using the Pi’s GTK framework, but that would be more difficult.

      Reply
  3. Olivia Phillips says:
    April 20, 2018 at 2:56 AM

    You mentioned that the user will be able to play back their wave at any frequency. Does this mean given a certain amount of space to draw a wave, if one user drew one period and another drew 5 but they had the same amplitude and general shape, they would sound the same? In other words, the user isn’t generating frequency with their drawing. If not through the drawing, how do you plan on having users input frequency? Also, just to clarify, which parameters are users changing besides amplitude? Shape?

    Reply
    1. davjgardner says:
      April 20, 2018 at 3:29 AM

      1) In the example you give, the user with 5 full periods in their drawing would always have 5x the frequency of the user who drew one period. The program will interpret whatever is drawn as one period, no matter what it resembles.
      2) Frequency input comes from an external MIDI keyboard. The idea is the drawing determines the timbre, and the MIDI keyboard determines pitch and volume.
      3) The user is essentially changing all parameters – shape through the touchscreen interface, and frequency and amplitude through playing the MIDI keyboard.

      Reply
  4. jessicah7654 says:
    April 20, 2018 at 1:21 AM

    I’m very excited to see how you incorporate a touch screen into this synth! We’ve only had experience in class with physical synths. Are you considering coding some visual responses into your synth? I see some potential for incorporating colors to make the music even more visual or to add in some stock animation with certain notes, etc.

    Reply
    1. davjgardner says:
      April 20, 2018 at 2:04 AM

      My focus will definitely be functionality first and fancy GUI second, but certainly the sky’s the limit as far as GUI enhancements go. I also had the idea of a library of waveforms which could be composed together as starting points for new waveforms.
      I find it somewhat unlikely that I’ll have the screen react to the note being played, since the actual pitch the synth is producing is controlled by an external MIDI keyboard or the like rather than by the touchscreen. I’m currently considering two different solutions for processing MIDI input, and neither of them could easily communicate with the GUI application.

      Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Update 5/10/2018 – Results
  • Update 5/9/2018
  • Update 4/27/2018

Recent Comments

  • Darryl Haylett on Overview
  • davjgardner on Update 5/9/2018
  • jessicah7654 on Update 5/9/2018
  • davjgardner on Update 4/27/2018
  • davjgardner on Update 4/27/2018

Archives

  • May 2018
  • April 2018

Categories

  • Updates

Meta

  • Register
  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Proudly powered by WordPress
Protected by Akismet • Blog with WordPress