ソースを読み直してわかったが、 MathPlayer が MathML を SSML に変換して NVDA に渡しているらしい。 NVDA は受け取った MathML を speech Command に変換して音声エンジンに渡す。 eSpeak や SAPI5 の場合は NVDA の synthDriver が音声エンジンに対応した SSML を組み立て直して 音声合成を実行している。
アプリケーションがSSMLを出力してNVDAで読ませようとしたら、 それぞれのアプリケーションに対応した処理を NVDA 側に持つ必要がある。
2015.2 で speech.py および espeak に実装された新しい内部コマンドの検討:
いまのところ数式読み上げでしか使われていないと思われる。 新しいコマンドは新しい仕様の音声合成エンジンでしか動かないようだ。
いままで文字説明モードなどの実装でやっていたピッチ変更、 コントローラークライアント拡張仕様の処理などを改善できるかも知れないが、 既存の実装を置き換えるのは慎重に検討すべきだろう。