A political history of Windows accessibility standards

I see around the Internet articles about accessibility APIs and standards like MSAA and IAccessible2, and I don’t think they reflect the history of the technology as much as the politics of the technology. This is a quick note of my memory and take on it from my experience working in screenreaders and AT.

Microsoft comes up with the first accessibility API in the late 90s, MSAA. It’s fine for buttons and textboxes and checkboxes, but richer user interfaces are too much for it – the document area in Word, or web pages.

So Microsoft comes up with UI Automation (UIA), which is a richer accessibility API that addresses the shortcomings of MSAA. This was in 2005.

But no-one picks it up properly: within Microsoft, Office doesn’t, I assume because of the usual Office versus Windows internal politics. Internet Explorer doesn’t, because Microsoft has stopped developing Internet Explorer. And outside Microsoft, all the screenreader guys have already written their code to “slurp” the contents of Internet Explorer and Office, so they don’t care that UIA doesn’t become the new standard. (And if UIA fails, so much more value for their products, which cost lots of money and so can support developers to write custom code for each and every program that fails to support accessibility standards…)

Outside Microsoft UIA adoption is even worse: Sun and IBM actually go to the trouble of creating a competing accessibility API, IAccessible2, and foist that on Java and OpenOffice to aid their competition with Microsoft and prevent Microsoft owning the accessibility API on Windows like Microsoft owns the document format standard (Word) and the web page standard (IE). (Disabled users have a history of being used to further other agendas, whether they know it or not…) Of course, nerds rally round and also foist it on Firefox, then the only Internet Explorer alternative, because hey everyone hates Micro$oft, right?

But, it’s important to understand, at this point in history – mid 00s – things are kind of OK. JAWS and NVDA and other screenreaders write special code (accessing some kind of application-specific API like the Word DOM) to talk to really really important applications, like Internet Explorer and Office, and use the MSAA accessibility API to talk to everything else. We all argue about the price of screenreaders and whether videos should autoplay but everything is stable. If you want to use more applications with your screenreader you pay more for a screenreader with more special code – JAWS is the standard, of course.

Then it all changes. The web and mobile explodes, by which we mean HTML5 and Chrome and iOS breaking the Internet Explorer/Windows dominance, and websites becoming applications in their own right like Google Docs or Facebook. Internet Explorer is dead, the mainstream declares, which means the sophisticated support screenreaders have developed to talk to its application-specific APIs is all useless: at the same time the websites are getting more and more complex. MSAA isn’t going to cut it, and there is no application-specific API for Chrome, the new dominant browser (there is a chrome.automation in development – how nice!) And here we are in 2018, and it’s much harder to use a web app than a desktop application. (Of course, you’ve probably jumped ship to iOS and an iPad with VoiceOver, or you are using a restricted set of desktop applications…)

Hey, maybe UI Automation’s time has come! Everyone knows VoiceOver is super-accessible and great and built into macOS, and so Microsoft needs a better AT story round Office and Windows, so the newly-invigorated Microsoft builds UIA into Office and Edge and here we go! At least until Edge is killed off too…

(The usual caveats and apologies about focusing mainly on blind people apply: showing my history in that area.)

BBC iPlayer Radio 10

After a good few weeks I have the BBC iPlayer Radio application working again! You should find that the previous version 9 force-updates to the new version 10 when you start it. If not you can use this link for the installer: BBC iPlayer Radio MSI Installer

As usual, it was broken by changes to the BBC system. I’ve had help from some kind BBC staff and I’ve got it working again: it now downloads without needed to convert as well, so it’s a little faster in operation. I’ve also improved the metadata in the files saved to disk for those that use them directly. “Version 10” indicates that I’m following the modern convention of updating the version number by a whole point when you do a release – like Google Chrome – not that there is anything very special and new. Sorry! Smile.

BBC iPlayer Radio working again

Changes at the BBC end broke the BBC iPlayer Radio program for a couple of weeks. The BBC were kind enough to help when I got round to asking, and it should all now be working again.

However, you now get thirty days of radio programmes, not just seven days, so my program takes a while to process all the programmes and display them. Be patient and it should get there.

Thanks to everyone who alerted me to the problem, and the BBC staff for helping out!

BBC iPlayer Radio 9.4

A small change the BBC iPlayer Radio program. It downloads BBC programmes and then converts them to MP3 to play them. Previously it’s used a moderate quality (bitrate) but some users got in touch and pointed out that many radio programmes would benefit from a better quality, especially Radio 3. So BBC iPlayer Radio now uses 192kbps MP3 files.

BBC iPlayer TV 8.0.0

If you’ve tried to use the BBC iPlayer TV 7 program recently you’ll know that it is completely broken. A few months ago all the channels went except for Audio Described, and more recently that disappeared too.

Over the years (fifteen, I think, though that may be Radio) I’ve taken many approaches to delivering BBC TV programmes to blind users, from RealPlayer days to now. In version 7 I received some help from the BBC: a nice, fast way to get programme listings. So I put that into the software, and all was well.

You would think I would learn! This handy mechanism disappeared this year, I think without warning, and the channel listings with it. However, Audio Described lasted a bit longer because it didn’t use the approved BBC mechanism, and on examination it only took a tweak to make it work again. I’ve therefore done the work to make the other channels use the Audio Described mechanism, so we have a new BBC iPlayer TV 8, and you once again have Audio Described, channels including One, Two, Four and News, and a new Signed channel listing too. The listings will all take longer to load, but that’s just how it has to work now.

Generally every couple of years there is a burst of enthusiasm at the BBC and someone will reach out to me with great plans and proposals: a year or two later they disappear with their technical help. Individuals have been kind and supportive, but the BBC faces great commercial and political pressure, so I can’t blame them. Anyway, for the geeks: we’re back to screen-scraping, which is slow but I can patch it up when the website changes and doesn’t rely on flaky BBC cooperation.

Finally, I observe that we now have more hoops to jump through before programmes play – like a BBC logon. You should only have to get this set up and working once, and it will work smoothly after that. But you might well need sighted help to get you through these steps: I have fitfully automate these steps, but it was just too much for me to keep up with changes, so I’m afraid you’re on your own. More reliable, though, which is nice.

BBC iPlayer Radio 9.3.5

A new version of the BBC iPlayer Radio program. This should, I hope, solve any problems you have been experiencing with “skipping” during programmes.

A quick explanation: the BBC provides their radio programmes as AAC files. These play on Windows 8 and later, in theory. But I was having lots of reports of programmes skipping. I thought this might have been the code that downloads the AAC files, but I discovered that the AAC files skipped in Windows Media Player as well as in my program (which uses Windows Media Player internally), and my program successfully downloaded exactly the same file each time. Finally, converting the AAC file to another file type fixed the program just fine.

BBC iPlayer Radio therefore has a “conversion” step after downloading a programme where it is converted into a format that will play without skipping.

New text-to-speech voices in Windows 10 Creators Update

This update to Windows 10 has arrived, and it has more text-to-speech voices.

First, these are again Windows Mobile voices, not SAPI5, so your screenreader or other application may not be able to see or use them.

Second, there appear to be no additional languages, but there are reported to be “more than ten” new voices (e.g. male voices where before there were only female). I’ve identified two new accents or language variants that are new: Australian English and Canadian English.

I believe the full list of Windows Mobile voices as they stand now for Windows 10 Creators Update in 2017 is given in this Microsoft Support article: TTS voices.

New text-to-speech options in Amazon Kindle App

eBooks have always been a problem for blind screenreader users. Legal eBooks are kept heavily protected to stop you copying or sharing them, which means it’s hard for assistive technology to get into them and read them back. Governments have been lobbied to clamp down on file-sharing sites where you can get eBooks that read easily. And anything complex in layout, like a textbook, usually has shoddy text-to-speech support.

There are ways to do it, like using iBooks on iPad or getting books from Bookshare and other organisations. But that’s not every book, and that means an additional process that sighted users don’t have to follow.

Good news, then, that Amazon has updated its Kindle Apps. This lets you get text-to-speech to read out loads more books, and you can still change the content (colour, font size) to make it easier to read if you have some sight. This includes Amazon Kindle for Windows PC.

All taken from this great write-up at the CALL Scotland blog, which I recommend you go read: Giving your Kindle App a voice.

New Text-to-Speech voices in Windows 10 Anniversary Update

Windows has always come with free text-to-speech voices. Windows 10 Anniversary Update, shipped August 2016, comes with new voices too. Hooray!

But there’s a catch: these are all Windows Mobile voices, not SAPI5 voices. So desktop Windows applications that use SAPI5 cannot use them: Universal Windows Apps (Windows Store apps, or Metro apps) that you get from the Windows Store can use them, and MSDN suggests that developers of desktop Windows applications (e.g. screenreaders) can now use them, but they need to write some code – they can’t use SAPI5. See my previous blog post explaining the difference between SAPI5 and Windows Mobile voices.

In simple English: Windows may have these voices, but it does not mean your Windows screenreader will be able to use them. They won’t show up. Contact the developer.

One application that CAN use them is Windows Narrator! Narrator can use both traditional SAPI5 voices and also the new Windows Mobile voices. So there is now (for example) a free Arabic screenreader!

On to the list. Windows 10 Anniversary Update provides the following new voices according to the MSDN Accessiblity blog and I’ve tested a few out:

  • Arabic (Egypt)
  • Catalan (Spain)
  • Danish (Denmark)
  • Dutch (Belgium)
  • Dutch (Netherlands)
  • Finnish (Finland)
  • French (Canada)
  • Norwegian (Norway)
  • Portuguese (Brazil)
  • Portuguese (Portugal)
  • Spanish (Mexico)
  • Swedish (Sweden)
  • Turkish (Turkey)

You can access these from Start > Settings > Time & Language > Region & Language > Language section. This lets you add more languages to Windows and shows the languages you already have installed.
Click on Add to add a new language to Windows and add the language for the voice you want to use.
Click on any installed voice and an Options button appears. Clicking this displays an Options button, which lets you download the Voice if you haven’t already.

Finally, for completeness here are the Windows 8 and 10 SAPI5 voices you can get through Control Panel > Clock, Language and Region > Language, and listed on MSDN:

  • English (US) David
  • English (UK) Hazel
  • English (US) Zira
  • English (India) Heera
  • Korean Heami
  • Spanish (Spain) Helena
  • Spanish (Mexico) Sabina
  • French Hortense
  • German Hedda
  • Japanese Haruka
  • Chinese (simplified) Hanhan and Huihui
  • Chinese (traditional) Tracy
  • Italian Elsa
  • Polish Paulina
  • Portuguese (Brazil) Maria
  • Russian Irina

WebbIE Web Browser 4.5.2

I’ve updated the WebbIE Web Browser. No new features, but significant plumbing improvements I hope. Non-technical readers can stop here!

One of the big problems that WebbIE has is when to update the text view it generates for each web page. Back when WebbIE started off in 2001 this was pretty easy, though HTML frames were a bit tricky: you waited until a page loaded, parsed it, and the user was good to go until the next web page transition.

You don’t see HTML frames much nowadays in 2016, but many more web pages dynamically load and amend their content using JavaScript and talking to servers in the background but without loading a new page. Worse, much of this is either useless junk (loading advertisements) or a distraction for the user (an auto-updating chat sidebar when the user is trying to fill in a form).

WebbIE therefore tries to update only when (1) it knows there is a new page transition or (2) the user does something that plausibly would result in a page transition, like clicking a button. In the second case WebbIE simply waits a bit, then triggers a refresh if there has not been a page transition. So really the problem is “have we had a new page transition?”

WebbIE uses Internet Explorer through COM, so how do we detect Internet Explorer doing a page transition? Here are some things I’ve used:

  • Watching the status bar text to see if it says “Done”. This was surprisingly effective! Would need to internationalise the phrase to check for non-English users.
  • Using the DocumentComplete event fired by Internet Explorer. This isn’t trivial, because it fires for a page, saying it is done (.ReadyState is COMPLETE), but ALSO fires for any FRAME elements BEFORE the actual page (FRAMESET), and ALSO then fires for any later IFRAMEs loaded by the page – and until the page is finished you can’t know how many IFRAMEs will be loaded. I do use this as a fallback for the JavaScript onload event, though.
  • Hooking the onload JavaScript event. This is what we’re doing in WebbIE now. Essentially it’s outsourcing the problem of knowing when the page is loaded to the agent with the best chance of knowing – the web browser itself.

And here are some to try out in the future!

  • WAI-ARIA events – good for later versions of Internet Explorer, so a plausible approach in the future as more Windows machines get updated.
  • UIA events – the accessibility interface is getting some more tender loving care from Microsoft in the last few years, probably trying to catch up with the perception that Apple is better on accessibility.