Saucer Platform
Software Unit Tests
Software Integration
Software Design
Design consideration: to share synth code between desktop and device.
Shortcoming: abstraction doesn't allow for low latency, high bandwidth control.
Glfw on top of a desktop os is not a realtime environment, and control delays are audible. Even the Arduino IDE's abstractions cost a good deal in throughput. The basic on/off(note num) interface works great up to a point for development, but the interface to the instrument will have to grow from there in a way that glfw can't.
What about multitouch? While it may still have unacceptable latency for use as an instrument, it could be a useful prototyping tool...
Polyphony
The above design groups a "voice" under an InstrumentControl for multi-voice(polyphonic) control. Glfw can keep track of key states, and could do a 105-voice synth on the desktop.
- How many voices can the device support?
Auxiliary Controls
- Octave selector
- Key Selector
- Master Volume
- Fingering Scheme(Guitar, Trumpet, Piano)
Input Processing Stages
To share the most code possible between the desktop and arduino, software debouncing is pulled up and out of the common section, as are the glfw event handlers.
The action map could use glfw key names - this requires a #include, which could be disabled with preprocessor directives.
There will also be a separate input mapping for breadboard prototypes and final designs.
Debouncing
To keep latency low, smoothing/hysteresis can't be used. Instead, changes in state can be locked out for a certain number of frames(to be determined by experimentation).
Question: Are there better debouncing methods?
Aftertouch
Pressing a pressure-sensitive analog input(e.g. piezo) harder or softer should result in a louder or quieter note.
Question: How do we handle the change in intensity that occurs over time? Can we use an envelope for that?
digraph G {
"Key" [label="OnKeyUp/Down"]
"Map" [label="Action Map\n- MIDI note\n- Voice idx"]
arduino [shape=component]
PC [shape=component]
Control [shape=octagon]
PC -> glfw
glfw -> callback
callback -> Key
glfw -> Imgui
Imgui -> Control
arduino -> readPin
readPin -> debounce
debounce -> Key
Key -> Map
Map -> Control
arduino -> analog
analog -> Control
}
Comments (0)
You don't have permission to comment on this page.