Skip to content

rain-sk/synth.kitchen

Repository files navigation

Synth Kitchen - synth.kitchen

In-browser modular synthesis with Web Audio and Web MIDI.

Plans

Drag-And-Drop Canvas

The GUI should be inviting and feel natural.

Done:

  • don't spam requestAnimationFrame
  • stop the viewport from growing for no apparent reason
  • support undo/redo of patch state changes (modules, connections, name)
  • newly-added modules' names are based on the type of module
  • adjust the viewport size to something reasonable during drag-continue and drag-end events

TODO:

  • newly-added modules are positioned "meaningfully" (try to avoid overlaps, aim for the center of the viewport)
  • modify the existing selection properly when using shift+drag
  • scroll when dragging a module past the edge of the viewport
  • infinite-scroll zoomable module canvas

Keyboard Nav

Done:

  • Some way to move selection from module to module using only the keyboard
  • modules can be deleted with the keyboard
  • Some way to go in-to/out-of a module's controls

TODO:

  • A way to navigate structurally, based on existing connections
  • A way to navigate independent of structure/tab-order (search?)

Module UIs

Done:

  • modules have names
  • K-rate audio params have a relevant input
  • A-rate audio params have a connector, text-input, and slider
  • signal-flow is represented as left-to-right

TODO:

  • modules can be renamed
  • modules look nice
  • sequencer is cool
  • modules have colors and can be re-colored

Connections

Done:

  • a way to connect/disconnect modules with the mouse
  • a way to connect/disconnect modules with the keyboard

TODO:

  • undo/redo takes connections into account
  • connector inputs have some kind of gain control
  • connection ports/cables give some visual feedback of what's passing through them

Saving/Loading

Done:

  • export/import files containing JSON-stringified IState.modules

TODO:

  • export/import files including connection state
  • catch and handle parse errors
  • catch and handle a potentially-malformed state
  • ability to define custom modules based on sub-patches

MIDI

TODO:

  • MidiDevice module
  • MidiOscillator module
  • MidiEnvelope module
  • MidiSequencer module
  • MidiSequencer module can output to external devices (latency compensation?)

Global Sync

Done:

  • some way™️ to sync sequencers, envelopes, etc.

TODO:

  • sync with external MIDI clocks
  • Ableton Link support