Meeting minutes
Agenda Review, Membership & Announcements
Special Presentation
*general introductions*
Other Business.
Special Presentation
Calendar entry - links to spec, and video: https://
*Dan runs the video and shows the page, inspecting the source to show how the SSML was JSONified. The NVDA plugin is doing all the voicing, and was inspired by a talk and conversation at CSUN*
*Group thanks Dan for the demo*
janina: This is compelling. The user shouldn't have to delve into the content character-by-character.
<dan-tripp> dan-tripp/
dan-tripp: Talking more about how I did this. It's a bit of a hack! The repo above, and README explains how I did it.
dan-tripp: There are three techniques, each with pros and cons.
… I ran some JS on the page and encodes all the SSML data on the page as Unicode zero-width characters, and adds them to the text content. They don't get announced by any screen readers I tested, but they are accessible via the NVDA plugin APIs.
… an NVDA plugin can't get to the DOM, nor these attributes. But it can get this content.
… This adds some junk to the page, which is bad - particularly for Braille output. It also messes up character-by-character navigation a bit, and the clipboard.
PaulG: The page-wide override technique is a bit of a hack as you say, but if we could get access to the accessibility tree this could mitigate those problems, as you wouldn't need the hack. Is that right?
dan-tripp: yes
dan-tripp: There's a hope that this may happen based on NVDA plugin threads I've been reading and Neil Soifer's work on math. The biggest problem is a <span> as this doesn't cause accessibility info to come through as it's not represented in the accTree at all; just a bunch of text.
PaulG: Let's say we get to that future - we're trying to get to the point, as a TF, where we have that info in the accTree. Based on your experience, do you have any recommendations for us in terms of how we should proceed?
dan-tripp: I think I'd be getting out of my element; it might be the plugin I made shows what _not_ to do; there are a lot of hoops to jump through. Anything that accTree can do to remove those hoops is a good thing.
PaulG: I think what you said about generic <span>s not being interesting enough for the accTree was a lightbulb moment for me - maybe we need more collab. with the folks specifying this.
… If we can get parity with readaloud tools, but not AT, maybe we should start at the other end. The work that you were inspired by - Mark's presentation - that started with the markup first - how to shove that data into the markup.
… Knowing that we got stuck, maybe we should start at the other end.
janina: I also was flagged by that comment that a span isn't interesting. I guess on a video display it's not interesting, but from our perspective maybe it is.
PaulG: We normally think of interactive roles as being interesting to the accTree. If we need a role, then we need to talk to ARIA. If we need that role to be present with some sort of structure/organization, we need to talk to the API folks.
… The curriculum folks have done a fantastic job of outlining our use cases. If we can get the other end - to receive this info - then we have many options for markup. We pared it down to 2 last time, and neither was picked. The technology is still elusive to us as to how to get this into AT. We talked about CSS Speech, PLS, SSML, but we aren't
going to play favorites this time.
… We intend to carve up the use cases and attack them individually, and hopefully build on that and solve the use cases, building as we go.
… A lot of the folks we talked to got tripped up on pause/break - a lot of implementers said it would be difficult. Did you look at pause/break in this?
dan-tripp: There are large parts of SSML I didn't look at, and this was one of them.
PaulG: Where that appears may be an empty span, or on an element, prefixing or suffixing. It seemed like that was something that fit way better with CSS Speech.
… CSS Speech also tried to solve _all_ these problems. So we were thinking of starting with just that part - pause/break - of CSS Speech.
… When we talked to people like James Craig, the idea of maps came up for pronunciation (more JSON than PLS) but maybe the way is to attack each of these problems separately, and as best we can.
dan-tripp: Can confirm that the main problem is that access to the accTree is the biggest bottleneck. My plugin is standing on the shoulders of giants, but now that we are here, that accessibility API gap is the one I'm stuck about, and necessitated all these hacks.
… I read all the struggles that NVDA plugin devs are having and it seems things are not practical because of the (lack of) OS API in this area. If you build it they will come.
dan-tripp: Re pause/break, I think that would be pretty straightforward to add support for in my NVDA plugin. Not a drastic departure from the other stuff. Can picture it on a technical level. I can put it on my TODO list!
Mark: With respect to CSS Speech on VoiceOver - what's the state of it? The support on mobile seemed to disappear.
tink: Yes, it did seem to disappear; not sure what the cause was.
*discussion about plugins for NVDA, Orca, possibly JAWS*
dan-tripp: I could look into the JAWS aspect here.
janina: If we're looking at exposing more via the accTree, what are the APIs we are talking about? ATK, IAccessible2, ...
… if we build that kind of conversation, we may be hit with scope creep. There may be other people who would like to see these interfaces enhanced. They're 20 years old.
PaulG: The tech doesn't have to change, but the requirements for society may change. We thought we'd nailed it when we found browsers use SSML, and smart speakers do, and we wanted to bring SSML to the browser as a first-class object, but implementers did not want to take this approach. So we need to figure out what the path is for us to adoption.
janina: I want to make sure non screenreader people also read the accTree?
PaulG: Read aloud tools don't have access to the accTree - just markup.
<PaulG> matatk: we're rebooting the task force, we're updaing the documents, focusing on use cases over technology. We hope this will make more sense to implementers. We hope to be done this month with that first pass and a list of priority use cases.
<PaulG> ... we'd love to send you the rough draft for your review if you're willing.
dan-tripp: I'd like to talk about what I think is most useful about the plugin...
… the one technique that I called 'page-wide override' is the best, but it has one limitation, which is max number of overrides on the page for a given text string - and that's 1. E.g. you can, on a single page, get 3' announced as '3 prime' or '3 feet' but only one.
… If you have small pages, then the plugin will work, but is it usable in a real-world situation, when this is the technique that you choose? I would love to have this tested.
… This gets around the accTree limitation, but results in a bunch of junk at the end of the page in the footer.
PaulG: You could put JSON data in a<template> and it won't render but would be available to read aloud tools - but that limitation does sound like it could be troubling. You might want both pronunciations side-by-side.
… It's often that you might want to set the heuristic for the whole page, but it's also often you may want them to be different.
PaulG: So that approach emphasizes that improving the accTree would be useful. As beautiful as the hack is, I'm trying to think of a future in which the info is in the accTree, so all the UA/AT need to do is map that info on the user's system.
PaulG: Would you be able to elaborate on why this is a limitation?
dan-tripp: The plugin installs a speech filter, which is a hook. The plugin gets to see what the speech is, and modify it, if it wants. Roughly speaking, it comes in as a string, which would be 3' and it goes out as either a string or a sequence of commands (that's where pause/break would come in, but will gloss over that for now, as it's
complicated).
… When I'm navigating about the page, the speech filter is getting a string - not the data-ssml attribute or other info, but how does it know that this string corresponds to a part of the page that had associated SSML info?
… This is what the zero-width characters add; the filter can discern this.
… But if the page-wide override technique is used instead, then there is only one map, for the page as a whole.
PaulG: So you'd need to connect it to other data, but this isn't possible now because it doesn't have access to other data.
dan-tripp: There's a faint hope that NVDA may be able to give us (plugin authors) a connection to the DOM, but not sure yet.
PaulG: thank you Dan, and everyone! Pleasure to host this; thank you for the inspiration to bring us back together. Thanks to everyone for joining!
… Big thank you again to Mark for his inspiration of this group, and Dan, and for the data-ssml approach.