music-view
A Flutter app for visually-impaired pianists — renders scores in ultra-high contrast with 2× note size, auto-scrolling to tempo or following the notes you actually play (real-time pitch detection via microphone).
Visually-impaired pianists have no accessible solution for reading sheet music — text too small, no auto-scroll, nothing adapted.
Flutter app with ultra-high-contrast display, horizontal auto-scroll at tempo, live audio-follow via mic FFT to stay synced with actual playing. MusicXML / OpenScore import.
Working prototype, tested with a visual-impairment association.
An app built for one specific need
For a pianist who has lost 70 % of their eyesight, reading a standard score is physically impossible. Existing apps show too much, too small, with insufficient contrast. music-view does the opposite: one staff line at a time, 2× note size, pure black-on-white (or white-on-black), zero decorative elements.
The score auto-scrolls, either at a set tempo or by following the player through the microphone. The goal: keep playing when your hands can't turn pages or adjust a metronome.
Accessibility-first score viewer
- Native MusicXML rendering via a custom ScorePainter (Flutter Canvas) — single treble staff + double treble/bass staff, notes at 2× standard size.
- Auto-scroll (BPM) — the score advances at the piece's tempo, the user never touches the phone while playing.
- Audio-follow via mic — real-time capture, FFT / pitch detection, match played notes vs expected notes. The score advances bar-by-bar when the correct sequence is detected.
- Library — 10 pre-loaded classical pieces (Beethoven, Debussy, Satie, Bach…) + search & download from public-domain APIs (IMSLP, OpenScore).
- Calibration — dedicated screen that fits zoom, contrast and default tempo to each user's specific needs.
Constraint as design driver
- Notes and musical symbols at a minimum of 2× standard size.
- Configurable high contrast (strict black-on-white or white-on-black mode).
- Large touch targets for every interaction — no tap target below 48 px.
- Zero visual clutter: display only what's needed to play.
- Full support for system accessibility settings (dynamic type, increased contrast, reduce motion).