• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Stop wasting time looking for files and revisions. Connect your Gmail, DriveDropbox, and Slack accounts and in less than 2 minutes, Dokkio will automatically organize all your file attachments. Learn more and claim your free account.


Software Design

Page history last edited by james.susinno@... 1 year, 8 months ago

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...




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.



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?



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.