At the end of the day yesterday I had a working GUI application and synth. The synth was running well on the Raspberry Pi connected to an HDMI monitor. The task for today was just to get the Raspberry Pi Touchscreen connected and set up. This proved to be much more difficult than I had anticipated or hoped. My intent was to configure it to mirror the HDMI display, which is a setting provided in the so-called “Easy Install” shell script provided by Adafruit. This did not work for me, however.
Worried that my touchscreen was broken, I installed an older version of the operating system, which was supposedly a tested known-good. HDMI mirroring did not work on this version either; the touchscreen was still blank. What was strange to me was that the capacitive touch actually worked – when I touched the screen it moved the mouse on my monitor. I then tried the setting which set the touchscreen as the primary display for the console, and did not use the HDMI display at all. This worked, and I was then able to configure the Raspberry Pi desktop environment to start using the frame buffer object of the touchscreen. It is cramped and barely usable, but it works.
With the touchscreen seemingly working, I started up Jack and launched my application, only to find that the performance was suddenly so bad it was unusable. Quite frustrated at this point, I reinstalled the most recent version of the operating system, recreated my configuration changes, and verified that my application was performing well again. I then ran the touchscreen configuration script, selecting the same options as I had on the previous version. As I expected, selecting the touchscreen as the console worked here as well; there just must be something wrong with mirroring the HDMI display. I started up the desktop environment, started up my application, only to find that the touchscreen was broken. Touches don’t seem to correspond with location at all, and sometimes do not even register. It was at this point that I gave up, since I was running out of time. It is possible that I could get it performing better on the older version of the operating system, but I don’t have the time or patience to try. For now I will just use my wireless mouse to draw the waves.
While I did not manage to get my application running on the Raspberry Pi as well as I wanted, the application itself is still very cool on its own. I spent quite a bit of time playing with it running on my desktop (where there were fewer audible artifacts, fewer dropped MIDI events, and a much bigger display). So while I am frustrated at the hardware, I am happy with the software I have created. If I spent time working on this in the future, I plan to increase the amount of data used to represent the waveform, which will increase audio quality, and I plan to add a “smoothness” slider which will optionally apply a filter to the wave data before it is transmitted to the synth. More advanced features could include the ability to construct waveforms from various building blocks, including bezier curves / splines, or other types of smoothing functions. I could also include the ability to load up and edit a stock waveform such as a sine or triangle wave.
In its current form, WavePainter is a cool tool for exploring how the visual shape of a wave affects its sound, and through that exploring what makes a tone sound the way it does.
This work is licensed under a Creative Commons Attribution 4.0 International License.