LCD controller is working. 800x480x12bit color (+8 bits for future hardware drawing support for tuner position autodisplay).
I wrote small graphics library - simple drawing and text (TBD).
Test image on LCD:
The same code working on Simulator:
Simulator is cross-platfor Qt application.
Simulates LCD screen, encoders, button, pedals.
Theremin sensor is simulated using "mouse synth pad" - area at bottom - horizontal movement is pitch antenna frequency change, vertical - volume antenna frequency change.
Mouse position is de-linearized to simulate values from real theremin sensor.
Simulator supports audio simulation as well.
When new audio frame of length N is needed, it interpolates sensor signals from previous to new value for each sample. For each sample, puts interpolated pitch and volume sensor values to allow audio IRQ code read these values, calls audio IRQ, then retrieves value written to Line Out register by synthesizer audio IRQ.
Inside IRQ, values are read from sensors, scaled, linearized, transformed to note / volume.
Amplitude and frequency vibrato is supported.
Simple additive synthesizer is implemented. Waveform is represented as 256 harmonics (amplitude + phase). On each harmonic, filter is being applied - (naturally, based on table of desired spectrum).
Written helpers to initialize settings for standard waveforms - triangle, square, sawtooth.
Tried to set filter to voice formants - don't hear the difference... Something is wrong with my filter.
Simulator allows to experiment with synthesis algorithms. Code debugged on simulator is the same as will be compiled to run on second core of Zynq.
Project is available on github. Anyone may try it (use QtCreator to build and run).
Playing with mouse is a bit hard. Wacom tablet instead of mouse is better.
I'm planning to add native support of wacom tablet, to allow changing of note by pen movement, and volume - by pen pressure instead of up/down movement.
Another nice option - get sensor data directly from FPGA board via USB serial and use them.