christopherorea/harmony-app
ForkA browser-based music theory experiment and MIDI controller interface designed to help musicians (especially guitarists) explore harmony, chords, and rhythmic s
TonnetzViz with some Sternenherz inspiration
Fork of cifkao/tonnetz-viz
christopherorea.github.io/harmony-app/
No GitHub topics on this repo.
- JavaScript80.8%
- HTML9.8%
- CSS9.4%
1 Review
Harmony is a creative browser-based music tool with more depth than the README initially suggests. It combines an interactive circle of fifths, chord recognition, editable progressions, a Tonnetz view, a piano-style keyboard, MIDI input, a circular step sequencer, and Strudel live coding. The central EventBus gives the application a sensible structure by separating MIDI input, music theory, audio synthesis, progression management, and visual components. The music theory module checks multiple possible chord roots, which allows basic inversions to be recognized. The sound engine tracks active MIDI notes and supports polyphonic synthesis, several oscillator shapes, noise sources, and note cleanup. The circular sequencer can assign progression chords to steps, switch between staccato and sustained playback, and export patterns into the Strudel editor. Responsive CSS and the plain JavaScript architecture also make the project easy to inspect and modify without a build system.
The highest-value improvement is reliability. The PWA registration file contains literal <script> tags even though it is loaded as an external JavaScript file. That causes a syntax error, so registerSW() is unavailable and the current service worker setup does not work. The service worker also uses a cache fallback without ever adding application files to that cache. Installation instructions should tell users to serve the project through localhost rather than simply opening index.html, since service workers and Web MIDI depend on secure browser contexts. The repository has no automated tests, package manifest, dependency lockfile, or CI workflow. Tests for chord detection, enharmonic notes, progressions, sequencer timing, MIDI note release, and EventBus interactions would be especially valuable because recent fixes disable some release behavior and could leave notes sounding unexpectedly. External libraries are loaded directly from several CDNs, including two different Strudel versions, without integrity checks or a documented offline strategy. The README should also cover the keyboard, Strudel editor, PWA status, browser limitations, and current integration issues already noted in the roadmap. Finally, the MIT license credits a different project’s contributors, so the repository should explain the upstream source and which code was adapted. Overall, Harmony has a strong interactive concept and useful musical features. Better setup, testing, dependency control, and attribution would make it far more dependable.
