Optimize screenreader info information during score navigation

• Aug 13, 2019 - 14:35
Reported version
P1 - High
S5 - Suggestion

A common complaint about the accessibility features in MuseScore is that we are too verbose during navigation of the score. After reading the info about a note on beat 1 of measure 1 staff 1, then navigating to a note on beat 2, there is no reason the screenreader should have to repeat the measure or staff number since they haven't changed. It makes it hard to parse what has changed. This has been pointed out in several accessibility reviews.

I have a fix in https://github.com/musescore/MuseScore/pull/5221, specifically in https://github.com/musescore/MuseScore/pull/5221/commits/f3fc8a18db03dd…. I track current staff & bar within ScoreAccessibility, so before constructing the screenreader info, I can check whether this info has changed, and omit it if not. I also optimize the reporting of the voice in note.cpp and rest.cpp by simply omitting it for measures containing only the single voice - this was the solution agreed upon after discussion on Telegram.

We may wish to also add a command to force a full read of the current status. Right now (in my PR, anyhow) you can make this happen by hitting Esc to lose the selection, then either Alt+Left or Alt+Right. This works because losing the selection means we lose the tracking of current staff and bar, so we read it again on the next navigation command. Better to have a "where am I" command, though, that could potentially also report things like current key and time signature. This too has been requested and makes a lot of sense to me.


Status PR created fixed

Fixed in branch master, commit af1fa43758

_fix #293300: optimize screenreader feedback for notes and rests

Added code to track the staff & bar number when constructing accessibility text.
If we detect that a navigation has not changed either, we skip reading it,
by constructing a separation "optimized" version of the appropriate text.
Also skip reading voice for measures that have only a single voice,
by suppressing the buiding of that string in screenReaderInfo() for both Note and Rest._

Fix version