Synth Kitchen - synth.kitchen
In-browser modular synthesis with Web Audio and Web MIDI.
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
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?)
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
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
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
TODO:
- MidiDevice module
- MidiOscillator module
- MidiEnvelope module
- MidiSequencer module
- MidiSequencer module can output to external devices (latency compensation?)
Done:
- some way™️ to sync sequencers, envelopes, etc.
TODO:
- sync with external MIDI clocks
- Ableton Link support