It started from the basic Omnichord idea: one hand selects chords, the other hand plays or strums over them. I did not try to make an exact software copy of a particular Suzuki Omnichord. The useful part of the concept is the separation between chord selection and the strum surface, and from there the instrument grew into something with its own synths, bass, rhythm section, presets and tuning systems.

The design is deliberately split in two:

Qt Quick / Python
    touch UI
    chord and preset state
    synth/rhythm configuration
    tuning calculations
           |
           | OSC, normally localhost:4560
           v
Sonic Pi
    synths
    samples
    timing
    sustained/manual chord voices
    rhythm + chord + bass scheduling

Keeping the UI and audio engine separate turned out to be useful. Sonic Pi remains Sonic Pi; the Qt application does not embed it or import its Ruby code.

Main features

The instrument currently has:

  • four independent chord rows;
  • 12 root buttons in the Omnichord-like order Db Ab Eb Bb F C G D A E B F#;
  • 36 chord types, selected independently per row;
  • octave selection O1 through O6 per chord row;
  • chord inversions per row;
  • immediate multi-touch chord playing;
  • automatic suppression of rhythm chords while a manual chord is held, so the accompaniment does not fight the player;
  • a seven-octave strum range, C1 through B7;
  • tap or drag playing on the strum surface;
  • separate chord, strum and bass synth engines;
  • 27 Sonic Pi synths with editable parameters;
  • independent chord, strum, bass and percussion volume;
  • a copy button which copies the complete strum synth setup and volume to the chord synth;
  • 54 editable rhythms;
  • tempo from 40 to 200 BPM;
  • separate percussion, chord and bass activity controls;
  • independently switchable rhythm and bass playback;
  • rhythm-specific bass patterns;
  • 18 presets;
  • full-screen operation with automatic scale-to-fit;
  • a panic button;
  • configurable concert-A reference;
  • three tuning modes: EQ, JV and HARM;
  • configurable title text in title.json;
  • touch and OSC debug logging;
  • a standalone multi-touch test.

The UI is intended for touch. It uses direct multi-touch areas for the musical controls rather than treating the touchscreen as a mouse.