How tboi0602/musical_instrument works
Chordroom is a browser-based Vietnamese guitar and piano practice studio. The main workflow turns a keyboard or on-screen chord action into a scale-degree chord and one chosen playing technique, then renders instrument notes through modeled audio sources that ring naturally. Separate capabilities cover metronome timing, song progression editing, and configurable instrument techniques; the README explicitly says patterns are compatibility data, not an automatic accompaniment path. The graph follows documented behavior and sampled calls; unsampled component wiring is omitted where uncertain.
Main entry points: AudioEngine.ts Audio engine · Studio.tsx Studio shell · studio.ts Studio settings · chords.ts Chord and scale theory
Components 24
Studio experience
- Studio shell
src/components/Studio.tsx - Sound controls
src/components/controls/ControlBar.tsx - Chord keyboard
src/components/keyboard/ChordKeyboard.tsx - Performance view
src/components/music/Performance.tsx - Manual play
src/components/music/ManualPlayPanel.tsx
Music and songs
- Song editor
src/components/song/SongPanel.tsx - Pattern editor
src/components/pattern/PatternEditor.tsx - Chord and scale theory
src/musicTheory/chords.ts - Song progressions
src/musicTheory/progressions.ts - Note utilities
src/musicTheory/notes.ts
Audio runtime
- Audio engine
src/audio/core/AudioEngine.ts - Technique selection
src/audio/manual.ts - Instrument contract
src/audio/instruments/Instrument.ts - Guitar engine
src/audio/instruments/guitar/GuitarEngine.ts - Piano engine
src/audio/instruments/piano/PianoEngine.ts - Guitar voicing
src/audio/instruments/guitar/GuitarVoicing.ts - Modeled sound source
src/audio/core/SoundSource.ts - Metronome scheduler
src/audio/core/Scheduler.ts - Meter utilities
src/audio/rhythm/PatternEngine.ts - Pattern presets
src/audio/rhythm/patterns.ts
Settings and state
- Studio settings
src/store/studio.ts - Device storage
Other components
- Player
- Web Audio
Connections 38
- Player → Studio shell: uses
- Studio shell → Studio settings: hydrates state
- Studio shell → Audio engine: handles transport
- Studio shell → Chord keyboard: hosts
- Studio shell → Sound controls: hosts
- Studio shell → Performance view: hosts
- Studio shell → Manual play: hosts
- Chord keyboard → Chord and scale theory: builds chords
- Chord keyboard → Audio engine: triggers chord
- Manual play → Audio engine: triggers chord
- Sound controls → Studio settings: updates settings
- Performance view → Audio engine: reads playback state
- Performance view → Chord and scale theory: builds display chord
- Song editor → Song progressions: parses and resolves
- Song editor → Studio settings: saves song
- Song editor → Audio engine: plays selected chord
- Pattern editor → Studio settings: edits patterns
- Pattern editor → Audio engine: previews chord
- Studio settings → Device storage: reads and writes
- Studio settings → Pattern presets: loads presets
- Studio settings → Meter utilities: adapts and validates
- Audio engine → Chord and scale theory: builds scale chords
- Audio engine → Technique selection: selects technique
- Audio engine → Guitar engine: dispatches performance
- Audio engine → Piano engine: dispatches performance
- Audio engine → Metronome scheduler: runs metronome
- Audio engine → Meter utilities: gets meter timing
- Guitar engine → Instrument contract: implements
- Piano engine → Instrument contract: implements
- Guitar engine → Guitar voicing: gets string voicing
- Piano engine → Chord and scale theory: inverts and voice-leads
- Guitar engine → Modeled sound source: plays modeled notes
- Piano engine → Modeled sound source: plays modeled notes
- Audio engine → Web Audio: creates audio graph
- Modeled sound source → Web Audio: outputs sound
- Metronome scheduler → Web Audio: schedules clicks
- Song progressions → Chord and scale theory: resolves chord data
- Chord and scale theory → Note utilities: uses note utilities