sekaiproject / ponscripter-fork

Fork of the Ponscripter visual novel engine to take advantage of SDL2 and improve Steam integration
GNU General Public License v2.0
74 stars 28 forks source link

Screen reader support #79

Open DanielOaks opened 10 years ago

DanielOaks commented 10 years ago

Hopefully we can add okay screen-reader support sometime down the line (for people who are visually impared, for instance). Schwarzstorch has seemed to do it in this thread, and if we can get his code or just do it ourselves, it would be nice to be able to add that feature.

This isn't a definite or a priority issue, but it's a nice-to-have, if we can include it without too much hassle.

edit: Found Schwarzstorch's branch and his changes here. It's good, but I think I can take the same approach, clean it up a bit, and have something that's a little nicer for the screen readers.

Work going on in the screen-readers branch.

DanielOaks commented 9 years ago

Got an updated source archive from Schwarzstorch that significantly improves the support. Merging it with my own sentence-processing code produces a very decent and clean text output, along with buttons and such actually being accessible! This uses an XML document to find the accessibility text, basing it off sprite names and such, which does work very well and allows people to add accessibility when the original script does not support it (and to add full accessibility support while not modifying the script at all).

There are a few things to continue with, such as producing output for history and the save/load screens, but a decent amount of vocalisation is done thanks to @Schwarzstorch !

I'm currently going through and hooking it up to OS X's VoiceOver system. The main problem at this point is detecting whether or not a screen-reader is active, but there are a few hacks to let us detect that.

Once I'm fairly happy with that, I'll go dev in some VMs to add Linux/Windows screen-reader support.

DanielOaks commented 9 years ago

Got another updated source archive from @Schwarzstorch , which is integrated into the project now (except for the actual Tolk library which makes it all workable on Windows).

The problem with linking to the Tolk library is that that's an LGPLv3 project, and this is GPLv2-or-later project (with a dependency on the LGPLv2-only SMPEG library).

License talk is really, /really/ boring but I don't want to change the license like that, since it would mess with SMPEG as well as cut the other *Nscripter projects from taking code from us (unless we say that it only becomes GPLv3 when we make an accessibility build on Windows, which is irritating and annoying).

So... I'll keep having more of a look. It seems the other project linked on the Tolk page is also GPLv3.

It might make more sense for us to bind directly to the SAPI library? Or if there is actually another unencumbered (or GPLv2-or-later encumbered) library, we could use that directly.

edit: I should be mostly linked to the Windows SAPI now, not setup in the build system yet but from the tutorial it looks mostly correct. I'll experiment with this when I have time.

ghost commented 9 years ago

OMG. It seems we need a new interface for screenreaders.

DanielOaks commented 9 years ago

Yeah, not much we can do unfortunately. I'll try to fire up my Windows VM and get the SAPI code working on there over the next few days, then see how Linux wants us to do it.

ghost commented 9 years ago

You know, before I started using Tolk, I wrote (reinvented the wheel) an interface for NVDA and Jaws (that worked). I'm thinking to make something similar to Tolk (fortunately, all those screen readers are using pretty much the same algorithm).

DanielOaks commented 9 years ago

Fair enough. I've been thinking of something similar (though if I were writing one, I'd go either MIT/BSD/public domain licensing, rather than GPL). Been meaning to add this sorta simple functionality to a few different projects, just always been stopped by the cross-platform stuff, and licensing issues with existing libraries.

ghost commented 9 years ago

Here you go. I've tested it on jaws, nvda, system access, supernova, zoomtext, window eyes and sapi (all lastest versions, except for jaws (v.15)). Sapi is working on XP 32 and 8.1 64. No idea how to test braille... brltty doesn't seem to work properly on windows or just nvda isn't working with it properly. I think, we can do nothing about their sdks and libs; if they allows us to distribute their stuff with our apps, then we're good to go. Another problem is to find those sdks, libs and docs.

DanielOaks commented 9 years ago

Awesome, thanks!

I'll be having a look through and seeing how to integrate this nicely. Thanks a bunch for the code, though.

Just curious, what license are you putting this code under? And is it alright if I made a git repo for it, or do you want to create that yourself?

ghost commented 9 years ago

I don't really care about type of the license. Do what you think is better for you (git, licensing, whatever).

I've managed to make brltty to work with nvda, but the output was like - here's a bunch of text and do whatever you want with it. It's not like we should throw text at people and hope for the best...

ghost commented 8 years ago

Updated some things. Not sure on, should I pull the request or not. Take a look, let me know what you think.