Open devinprater opened 5 years ago
I've looked into this. The best approach seems to be to use the hooks the screen reader uses to get what to read out, instead of hooking into the TTS that the AI Service uses. In that case there would be no need for a toggle button to turn it on or off. I should be able to work on this some time soon.
Wouldn’t this need rewriting of the UI though? Or do you mean using the screen reader API’s, like the NVDA controller client? Or are there ways to tell OS’s that a custom control is a menu, and populate that menu? If so, that would be perfect.
On Nov 4, 2019, at 11:45 AM, Barry Rowe notifications@github.com wrote:
I've looked into this. The best approach seems to be to use the hooks the screen reader uses to get what to read out, instead of hooking into the TTS that the AI Service uses. In that case there would be no need for a toggle button to turn it on or off. I should be able to work on this some time soon.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/libretro/RetroArch/issues/9661?email_source=notifications&email_token=ADUMTTXHG3OVULZN5Q4IDL3QSBNS7A5CNFSM4JGNNVEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEDADNRY#issuecomment-549467847, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADUMTTU4NVWAM2VYOMPUQSDQSBNS7ANCNFSM4JGNNVEA.
@devinprater Accessibility APIs are what I mean. They're implemented in the OS, so that screen readers can read what's in the current application. Program authors write to these APIs so the screen reader doesn't have to figure out what's on the screen.
I haven't used these before, so I'll have to figure out what the best options are in terms of cross-platform compatibility.
Edit: The Qt library enables this automatically (usually) if you're using it to make a GUI. This page gives a good description of how it works: https://doc.qt.io/qt-5/accessible.html
I’m not sure there is a way to use API’s cross platform. Microsoft has https://docs.microsoft.com/en-us/previous-versions/windows/desktop/dnacc/new-accessibility-model-for-microsoft-windows-and-cross-platform-development https://docs.microsoft.com/en-us/previous-versions/windows/desktop/dnacc/new-accessibility-model-for-microsoft-windows-and-cross-platform-development But it doesn’t look to be “cross platform” as the title says. MacOS has https://developer.apple.com/accessibility/macos/ https://developer.apple.com/accessibility/macos/
Linux has ATK's git repository https://gitlab.gnome.org/GNOME/atk
iOS has https://developer.apple.com/accessibility/ios/ https://developer.apple.com/accessibility/ios/
Android has https://developer.android.com/guide/topics/ui/accessibility https://developer.android.com/guide/topics/ui/accessibility
One way I can think of is to make a UI using a web app type system, like Electron, although hopefully not using that exact system. Or, maybe the UI Automation is cross platform after all, or can be translated into cross platform code from Windows or something.
On Nov 4, 2019, at 1:03 PM, Barry Rowe notifications@github.com wrote:
@devinprater https://github.com/devinprater Accessibility APIs are what I mean. They're implemented in the OS, so that screen readers can read what's in the current application. Program authors write to these APIs so the screen reader doesn't have to figure out what's on the screen.
I haven't used these before, so I'll have to figure out what the best options are in terms of cross-platform compatibility.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/libretro/RetroArch/issues/9661?email_source=notifications&email_token=ADUMTTQ2F4RNJNAUNYTIDD3QSBWZ7A5CNFSM4JGNNVEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEDALG6Q#issuecomment-549499770, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADUMTTUBM64O6UKVLIHAUSDQSBWZ7ANCNFSM4JGNNVEA.
Every OS has a different API, but I would like to find a solution that can use a single library that is cross-platform and abstracts away the native APIs. Qt for instance will use UI Automation on Windows, macOS Accessibility on macOS, and AT-SPI for linux. The accessibility stuff there is designed for applications made using Qt, which is not what we would do here, we would just bypass and specify exactly what to read out instead.
Ah, this would work well then. Hopefully there is something like this for all platforms Libretro supports… well except for the Switch and Wii, unfortunately those don’t have a screen reader.
On Nov 4, 2019, at 2:35 PM, Barry Rowe notifications@github.com wrote:
Every OS has a different API, but I would like to find a solution that can use a single library that is cross-platform and abstracts away the native APIs. Qt for instance will use UI Automation on Windows, macOS Accessibility on macOS, and AT-SPI for linux. The accessibility stuff there is designed for applications made using Qt, which is not what we would do here, we would just bypass and specify exactly what to read out instead.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/libretro/RetroArch/issues/9661?email_source=notifications&email_token=ADUMTTWE5JPRLLZB64N2W4LQSCBQXA5CNFSM4JGNNVEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEDAT2OI#issuecomment-549535033, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADUMTTRYO5JCOU6DWGJ4EIDQSCBQXANCNFSM4JGNNVEA.
Had to revert to self-voicing, but it should be customizable enough to hook into a screen reader with a little outside work. Waiting on some changes for language support in windows, and refactoring suggestions before merging.
Thanks so much for this. If you need anything tested, I’d be glad to.
On Nov 21, 2019, at 4:12 PM, Barry Rowe notifications@github.com wrote:
9768 https://github.com/libretro/RetroArch/pull/9768
Had to revert to self-voicing, but it should be customizable enough to hook into a screen reader with a little outside work. Waiting on some changes for language support in windows, and refactoring suggestions before merging.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/libretro/RetroArch/issues/9661?email_source=notifications&email_token=ADUMTTV7SE6OVWA7CMVBBR3QU4BVZA5CNFSM4JGNNVEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEE32U5I#issuecomment-557296245, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADUMTTWNYR5PDJDLYOEGANDQU4BVZANCNFSM4JGNNVEA.
Ok, I'll message you on twitter.
First and foremost consider this:
Description
Now that Retroarch can speak in-game text using TTS, this feature should be extended to the GUI. Since we already know the text of the UI, like the main menu, game menu and such: GUI, this can simply be spoken using the TTS, no screenshot needed. I am willing to pay for the implementing of this feature as a bounty.
Of course, this should be a toggle, and could have a key command on Pc, Mac, and Linux, or a gamepad gesture, or exact set of gestures, to enable it, so that blind users can play games using Retroarch.
Expected behavior
RetroArch should speak the item in focus in the RetroArch UI, to help with accessibility by blind users.
Actual behavior
When retroarch runs, a blind user cannot navigate the main menu, to get cores, load cores, or otherwise control the program, except from the menu bar, which doesn't have all functions. Furthermore, the in-game menu isn't accessible either. This is why Retroarch should speak this itself.
Steps to reproduce the bug
Bisect Results
Version/Commit
You can find this information under Information/System Information
Retroarch 8.0
Environment information