The component visualizations for oscillators, filters, envelopes and LFOs are now ready. The real DSP elements are used in the GUI to provide a realistic rendering of the component output. For oscillators and lfos a single wavecycle is shown and for envelopes a scaled envelope cycle from attack to finish is drawn.
For the filters fftw is used to calculate the FFT of the filter impulse response and a scaled version of the power spectrum is then drawn. I have yet to test if the FFT calculation is fast enough, but it looks quite decent.
In addition to the component visualizations, labels with knob values have been added. Now the exact values of all the ports are visible in the UI. It makes the UI a bit more crowded, but is hopefully more useful then the browser approach of ElectraX. The knob + name + value combination is also used in Curve.
Here is a screenshot
After having worked out most of the lower level audio processing components in rogue I started to improve the GUI.
I wanted to customize the appearance of the Gtk GUI, but had some problems to apply theming so I considered looking at Qt as an alternative. I was quickly convinced by Qt and converted the full GUI to Qt.
All in all the advantages of Qt over Gtk are
- easier theming, at least compared to Gtk 2.*
- better designer tools
- a dial widget to start from
- C++ based programming model
Some disadvantages are
- integer range for dial widget
- build time metamodel and C++ syntax extensions
For the UI the main inspirations are ElectraX and Curve.
The UI is quite flat and I tried to make it usable and informative. Here is a sketch of the current state
I might still slim it down to something like this
The modulation part is not yet very usable and there is lots of empty space, but otherwise I am quite content with the current state.
I am currently working on a new softsynth project and wanted to get some more immediate feedback of code changes to waveforms shapes, since most of the synthesis used in rogue are related to phase/waveform shaping.
The HTML file is available here and it looks like this
The waveforms are categorized by synthesis types: VA for virtual analog, PD for Casio CZ style phase distortion, EL for various electronic waveforms and AS for additive synthesis.
The width controls the pulse width or distortion of the waveform and the tone field controls the brightness for additive synthesis. This combination gives me the possibility to try out new waveforms easily.
The functions used in the plot are referenced in the HTML document and take three arguments, the phase, the width and the tone. All parameters are from 0 to 1. The waveform plots are for 1.5 cycles.