A little background: I’ve written a series of articles before about Virtual Pickups and how they are implemented in software (DSP). It’s a three part series: Part 1, Part 2 and Part 3. I wrote about Standing Waves, Nodes, Antinodes and Pickup Position, Comb Filters, some underlying Math and Simulation in DSP code. I also presented what I thought was a minimal interface I really like.
It has taken a while (I can’t believe it has been almost 2 years now!), and now I’m back to writing the software. What has transpired since then? Production of the XR and the Nu took the most of our time and I’m left with very little time to do what we I best: R&D. Now that the Nu is out, it makes sense to go back, pick up and continue where we left off, starting with the GUI.
The GUI… I want something cross platform (Windows, Linux, OSX). I have to say, cross platform C++ GUI toolkits suck. The usual suspects, QT, and wxWidgets are like 90s tech using ugly C++ mechanisms. For audio applications (and plugins), JUCE looks nice, but it is not free. I also messed around with WDL-OL I discovered from Martin Finke’s Making Audio Plugins blog, but I didn’t really like the kludged up structure (or lack thereof).
So, silly me, why do I always have to be a perfectionist! I decided to roll my own GUI library. I’ve written GUI frameworks before, and it seems to be a good excuse to rewrite the GUI framework I authored when I was in Japan, many, many, many moons ago. This time, I’m rewriting the framework in modern C++14. For rendering, I chose to use NanoVG, a small antialiased vector graphics rendering library and GLFW, an Open Source, multi-platform library for creating windows with OpenGL contexts and receiving input and events.
And the GUI library shall be named photon.
And the Application shall be named ɛlf: Multichannel String Processor.
Here are some GIF grabs of the widget controllers in action: