flowchart TD
A["Start"]
B["Init UI
buildKeyboard / updateUI"]
A --> B
subgraph INPUTS
C{"User Action"}
D["Pointer Input
pointer events"]
E["Key Input
keydown / keyup"]
F["Settings Input
volume / spelling / fft"]
C -->|Touch| D
C -->|Keyboard| E
C -->|Setting| F
end
subgraph AUDIO
G["Ensure Audio Engine
ensureAudio"]
H{"Note Event"}
I["Add Pressed Note
pressMidi"]
J["Remove Pressed Note
releaseMidi"]
K["Play Note On
noteOn"]
L["Play Note Off
noteOff"]
G --> H
H -->|On| I --> K
H -->|Off| J --> L
end
subgraph DETECT
M["Update UI
updateUI"]
N["Extract Pitch Class
pcsFromPressed"]
O["Detect Chord
detectChords"]
P["Render Result"]
Q["Update Key Highlight
refreshKeyStates"]
M --> N --> O --> P --> Q
end
subgraph VISUAL
U["Start Visual Loop
startVizLoop"]
V["Draw Oscilloscope
drawScope"]
W["Draw FFT
drawFFT"]
U --> V
U --> W
end
B --> C
D --> G
E --> G
K --> M
L --> M
F --> G
G --> U