Case study · produkt
CIRCLE
MIDI sekvencer
Jeden TypeScript engine, dve hostiteľské prostredia: prehliadač a DAW. Generuje iba MIDI — groove je v časovaní, nie v zvuku. Krokový grid, piano roll a sedem generátorov; export .mid priamo v prehliadači.
Kontext
Hudobník píše techno, progressive alebo dub. Nechce ďalší syntetizátor — chce groove, ktorý vloží do svojho obľúbeného nástroja. Preto CIRCLE generuje iba MIDI: žiadny audio engine, žiadne samples, žiadne efekty.
Čo rieši
- Lane: bass, lead, drums, pad, perc, other — každá s vlastnou dĺžkou, kanálom a pitch poolom; kratšie lane vytvárajú polyrytmy.
- Tri spôsoby skladania: step grid, piano roll a sedem generátorov (Euclidean, acid, techno drive, dub sparse, off-beat, arp, random) s deterministickým seedom.
- Groove: master swing, mikro posun lane, humanize timing/velocity/gate, probability, ratchets, dub gaps, ghost notes.
- Dub delay: doznievajúce echo noty sa zapíšu priamo do MIDI súboru, vrátane wrapu okolo loopu.
- Evolution: loop 1 zostane presne tak, ako bol napísaný; loop 2..N sa posúva — dlhé loopy zostanú hypnotické.
- Export: .mid (SMF format 1), clipboard base64, pattern JSON a nástroj pre Renoise.
Architektúra
Engine je čistý TypeScript bez závislostí a bez browser/Node API. Preto beží nezmenený v prehliadači, v Node (testy, CLI, sidecar) aj v C++ plugine cez vložený JS runtime.
- packages/engine — timing, lane model, MIDI, serializácia, validácia, evolúcia.
- apps/web — Next.js 15 / React 19; MIDI sa kóduje v prehliadači (
Uint8Array+Blob), nikdy nejde na server. - plugin — VST3 + AU (JUCE) ako MIDI efekt, bez audio zberníc.
- Most — JSON protokol
circle-host-v1; obal neobsahuje hudobnú logiku, takže web a plugin sa nemôžu rozísť.
„Jeden engine, dva hosty“ je overené testom: bundlovaný artefakt vydá byte-identical MIDI ako zdroje.
Testy
161 testov enginu a 12 testov webu. MIDI sa overuje na úrovni bajtov nezávislým SMF parserom — nielen „súbor sa vytvoril“.
- Timing math, render pipeline, validácia a repair untrusted JSON.
- Plugin protokol a pull-based player.
- Renoise tool overený proti Renoise 3.5.4 (27 API symbolov, 167 nôt, 139 note-off, 35 delay hodnôt).
auvalna tomto stroji: AU VALIDATION SUCCEEDED.
Čo to nie je
- Nie je to syntetizátor — zvuk robí nástroj, ktorý si vyberieš.
- Nie je to DAW — je to generátor patternov a MIDI.
- Plugin je MIDI efekt, nie nástroj s audio výstupom.
Stav
Engine, web, testy, bundling a JSON host sú hotové a overené
(pnpm verify). VST3 + AU wrapper je postavený,
nainštalovaný a prechádza Apple AU validáciou.