surge-synthesizer / surge

Synthesizer plug-in (previously released as Vember Audio Surge)
https://surge-synthesizer.github.io/
GNU General Public License v3.0
3.1k stars 395 forks source link

Accessibility items which didn't make Surge XT 1.0 #5714

Closed baconpaul closed 2 years ago

baconpaul commented 2 years ago

1.1 Beta Problems

Outside of 1.1 most likely

mkruselj commented 2 years ago

(moved)

pitermach commented 2 years ago

This will probably be long but I figured I'll write my thoughts down before I forget something. ☺️ Here's some more thoughts after using Surge more as well as some Twitter conversations (reception of XT 1.0 has been very positive so far!)

Regarding Step Sequencer, I think I like the triggers being next to the steps in a way because it's easier to set them up in the moment as you program a sequence. However, if you go with the screen reader cursor they show up before the steps. I think we should get feedback from more people which workflow they prefer and then make the 2 match.

For patch browser, type ahead and also the category auto complete when saving the patch, the main issue is the list items don't speak their text. They can be navigated to and arrowed through, but all screen readers say is "row 1, row 2..." and so on.

Specifically for the patch browser, while you can arrow through the category tree and patch list, you can't load a patch either by pressing enter or doing a press action with a screen reader, both should probably work.

Regarding CTRL+Tabbing through groups, in the previous issue we also discussed having dedicated hotkeys to jump to specific groups (I think we settled on CTRL+Shift+Letters as good candidates), I think both features are worth doing.

I was also thinking it might be useful to speak some announcements for some actions as a result from hotkeys being pressed. The main one being telling you when a patch was added or removed from favorites when you hit Alt+F because I got confused a few times when going through all the patches and batch marking as favorites. Speaking the patch name when you switch with Right/Left might also be useful.

Pressing space/enter should cycle the state of toggles and press buttons (like the oscillator type), this is for consistency with how these controls work in the OS. Some buttons actually already respond to enter (like the Close button in the modulation list or the OK and Cancel buttons in alerts.

A few points in menus:

baconpaul commented 2 years ago

All super useful.

Some things (like intersperse triggers) is easy. Other things may be harder.

I'm glad it is usable in 1.0 and am super excited to hone it for 1.1 :)

baconpaul commented 2 years ago

Oh also where on twitter does the convo happen out of curiosity?

pitermach commented 2 years ago

https://twitter.com/OnjMusic/status/1484097351157436416

mkruselj commented 2 years ago

(moved)

pitermach commented 2 years ago
baconpaul commented 2 years ago

Accessibility bug with screen readers and type-in fields, editing is difficult because the announced character is always off by one, so you end up deleting the wrong character or inserting something in the wrong place.

From discord user bcross (windows, nvda)

pitermach commented 2 years ago

Just did some more experimenting on this:

This effects both deleting and cursor movement. If you go to the beginning of a line, then press the right arrow you should hear the screen reader speak the second character, but it repeats the first instead.

I also found a second issue on Windows though this one only seems to effect NVDA, if you make a selection by holding down shift and moving through the text, NVDA always repeats the entire selection, rather than saying just the part that was selected/unselected.

baconpaul commented 2 years ago

OK I'll report this over on the juce forums and see if there's a fix we can get put in place from the team (or if the fix is there; i'm a few points behind still and plan to pull to 6.1.5 in this cycle).

baconpaul commented 2 years ago
pitermach commented 2 years ago

Just noticed another thing, there's currently no way to accessibly edit the "adaptive" shape of the alias oscillator. Manual mentions there should be an Edit button when it's selected, but I don't see one with VO. ✔️

baconpaul commented 2 years ago

oh yeah that's not exposed! Good catch.

ironcross32 commented 2 years ago
baconpaul commented 2 years ago

From discord

Re the oscillator type not being spoken when you arrow to change it, perhaps if you change its reported control type from a button to a combo box the screen readers would pick up on the value changing. You generally can't arrow up and down on buttons to modify something so maybe they're not even monitoring them for event changes.

baconpaul commented 2 years ago

If I apply this diff

 case tag_settingsmenu:
    {
        auto h = frame->getAccessibilityHandler();
        if (h)
        {
            std::cout << "GOT HAND" << std::endl;
            h->postAnnouncement("Ouch you poked me",
                                juce::AccessibilityHandler::AnnouncementPriority::high);
        }
        else
        {
            juce::Point<int> menuPoint;
            useDevMenu = false;
            showSettingsMenu(menuPoint, control);
        }
    }

then clicking the menu button with the mac screen reader no longer pops up the main menu but instead says "Ouch you poked me" which is of course not useful but implies that there's a useful thing to be done And now I can solve a lot of problems. I make a std::string member of SGE called "announceNextIdle" and voila

baconpaul commented 2 years ago

@pitermach says:

If it works for this it might be a good way to make the type ahead speak while you're typing as well. So like you stop typing for a moment and it could say something like "3 results, init saw" so that'd tell you what patch would load to press enter but also that you have other results to look at That's more or less how auto complete type things are made accessible usually from a design point of view at least

baconpaul commented 2 years ago

Just remembering this diff

 void MenuCenteredBoldLabel::addToMenu(juce::PopupMenu &m, const std::string label)
 {
-    m.addCustomItem(-1, std::make_unique<MenuCenteredBoldLabel>(label));
+    m.addCustomItem(-1, std::make_unique<MenuCenteredBoldLabel>(label), nullptr, label);
 }
pitermach commented 2 years ago

Just realized that the on-screen Macro controls aren't exposed as sliders. If you focus one of them in the modulators section and press up/down they adjust, but you have no way to see their value. While up/down work, home/end/delete don't.

pitermach commented 2 years ago

I just saw the keyboard shortcut editor mentioned in the nightly changes and took a look at it. Here's a couple of things I noticed:

Either way this is a really handy feature and the fact this list speaks more makes me happy in terms of things like the patch browser down the road. ☺️

baconpaul commented 2 years ago

Yes sorry I mentioned on discord thst I merged this half done before a mini vacation. While I could tab through it I haven’t done accessibility revie (or keybind reset) yet both of which are needed before #5912 is closed

pitermach commented 2 years ago

Ah right, I've been a bit busy and didn't look at the Discord in a while and missed that part, sorry. Hope you enjoyed your vacation

baconpaul commented 2 years ago

No worries! Just making sure you knew I agreed it wasn’t done :)

pitermach commented 2 years ago

Just found another small bug. THe radio button for the active FX slot isn't reported as "selected". All slots are always reported as not checked.

baconpaul commented 2 years ago

With the windows workaround for speaking and the full resolution moved to #6408 I'm going to close this.