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