But there’s unfortunately no simple guideline to give in terms of finding issues. It takes an eye for detail and an ear for possible different aural renderings. Editors and indexers are good starting resources for the process, as they should be able to quickly flag problem words during production so they don’t have to be rooted out after the fact. Programs that can analyze books and report on potentially problematic words, although not generally available, are not just a fantasy. Their prevalence will hopefully grow now that EPUB 3 incorporates more facilities to enhance default renderings, as they can greatly reduce the human burden.
The only other requirement when using the SSML attributes that I haven’t touched
on is that you always have to declare the SSML namespace. I’ve omitted the
declaration from the previous examples for clarity, and because the namespace is
typically only specified once on the root html
element as follows:
<html … xmlns:ssml="http://www.w3.org/2001/10/synthesis">
Similar to the alphabet attribute, we could have
equally well attached the namespace declaration to each instance where we used
the attributes:
<span
xmlns:ssml="http://www.w3.org/2001/10/synthesis"
ssml:ph="x-sampa"
…>
But that’s a verbose approach to markup, and generally only makes sense when content is encapsulated and shared across documents, as I just noted, or expected to be extracted into foreign playback environments where the full document context is unavailable.
The question you may still be wondering at this point is what happens if a PLS file contains a pronunciation rule that matches a word that is also defined by an SSML pronunciation, how can you be sure which one wins? You don’t have to worry, however, as the EPUB 3 specification defines a precedence rule that states that the SSML pronunciation must be honored. There’d be no way to override the global PLS definitions, otherwise, which would make SSML largely useless in resolving conflicts.
But to wrap up, a final note is that there is no reason why you couldn’t make all your improvements in SSML. It’s not the ideal way to tackle the problem, because of the text-level recognition and tagging it requires, at least in this author’s opinion, but it may make more sense to internal production to only use a single technology and/or support for PLS may not prove universal (it’s too early to know yet).
You might be thinking the global definition power of PLS lexicons combined with the granular override abilities of SSML might be sufficient to cover all cases, so why a third technology? But you’d be only partly right.
The CSS3 Speech module is not about word pronunciation, however. It includes no phonetic capabilities, but defines how you can use CSS style sheet technology to control such aspects of synthetic speech rendering as the gender of voice to use, the amount of time to pause before and after elements, when to insert aural cues, etc.
The CSS3 Speech module also provides a simpler entry point for some basic voicing
enhancements. The ability to write X-SAMPA or IPA pronunciations requires
specialized knowledge, but the speak-as property
masks the complexity for some common use cases.
You could use this property to mark all acronyms that are to be spelled out
letter-by-letter, for example. If we added a class called ‘spell’ to the abbr elements we want spelled, as in the following
example:
<abbr class="spell">IBM</abbr>
we could then define a CSS class to indicate that each letter should be voiced
individually using the spell-out value:
.spell {
-epub-speak-as: spell-out
}
It’s no longer left to the rendering engine to determine whether the acronym is “wordy” enough to attempt to voice as a word now.
The speak-as property provides the same
functionality for numbers, ensuring they get spoken one digit at a time instead
of as a single number, something engines will not typically do by default.
.digits {
-epub-speak-as: digits
}
Adding this class to the following number would ensure that readers understand you’re referring to the North American emergency line when listening to TTS playback:
<span class="digits">911</span>
The property also allows you to control whether or not to read out punctuation.
Only some punctuation ever gets announced in normal playback, as it’s generally
used for pause effects, but you could require all punctuation to be voiced using
the literal-punctuation value:
.punctuate {
-epub-speak-as: literal-punctuation
}
This setting would be vital for grammar books, for example, where you would want
the entire punctuation for each example to be read out to the student.
Conversely, to turn punctuation off you’d use the no-punctuation value.