保存された設定の音声エンジンが初期化できないとき espeak が選択される
本件に関する作業ブランチとテスト版を作りました。
NVDA 日本語テスト版 jpbeta140203 https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140203.exe
config の初期値 auto が指定された場合と、config で指定されたエンジンが初期化できないときに espeak ではなく nvdajp_jtalk が選ばれるという実装になっています。
「日本語音声合成を使うユーザー」だけを想定した仕様になっています。
[ti32986 52fdbe2] changed default (auto) synth driver to nvdajp_jtalk 2 files changed, 7 insertions(+), 5 deletions(-) To ssh://git@bitbucket.org/nvdajp/nvdajp.git * [new branch] ti32986 -> ti32986
以下の通り動作確認しました。
notepad %appdata%\nvda\nvda.ini
を実行して、
[speech] synth = hoge
のように書き換える。
nvda_jpbeta140203.exe を実行すると、エラーの音が出て、そのあと(フォールバックしたエンジンである) jtalk が使用許諾契約のダイアログを読み上げる。
このときログは以下のようになる。
INFO - __main__ (19:16:12): Starting NVDA INFO - core.main (19:16:13): Config dir: C:\Users\nishimotz\AppData\Roaming\nvda INFO - core.main (19:16:13): NVDA version jpbeta140203 INFO - core.main (19:16:13): Using Windows version sys.getwindowsversion(major=6, minor=2, build=9200, platform=2, service_pack='') INFO - core.main (19:16:13): Using Python version 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] INFO - core.main (19:16:13): Using comtypes version 0.6.2 ERROR - synthDriverHandler.setSynth (19:16:13): setSynth Traceback (most recent call last): File "synthDriverHandler.pyo", line 80, in setSynth File "synthDriverHandler.pyo", line 40, in _getSynthDriver ImportError: No module named hoge INFO - synthDrivers.jtalk.mecab.Mecab_initialize (19:16:13): dic: C:\Users\NISHIM~1\AppData\Local\Temp\nslACE3.tmp\app\synthDrivers\jtalk\dic INFO - synthDrivers.jtalk.mecab.Mecab_initialize (19:16:13): mecab:0.996 nvdajp-jtalk-dic (utf-8) 20140116-101914 INFO - synthDrivers.jtalk.jtalkDriver.initialize (19:16:13): loaded C:\Users\NISHIM~1\AppData\Local\Temp\nslACE3.tmp\app\synthDrivers\jtalk\mei\mei_normal.htsvoice INFO - synthDrivers.jtalk.jtalkDriver.initialize (19:16:13): loaded C:\Users\NISHIM~1\AppData\Local\Temp\nslACE3.tmp\app\synthDrivers\jtalk\lite\voice.htsvoice INFO - synthDriverHandler.setSynth (19:16:13): Loaded synthDriver nvdajp_jtalk INFO - core.main (19:16:13): Using wx version 2.8.12.1 (msw-unicode) INFO - braille.initialize (19:16:14): Using liblouis version 2.5.3 INFO - braille.BrailleHandler.setDisplayByName (19:16:14): Loaded braille display driver noBraille, current display has 0 cells. INFO - brailleInput.initialize (19:16:14): Braille input initialized INFO - core.main (19:16:15): NVDA initialized
jpbranch にマージしました。
To ssh://git@bitbucket.org/nvdajp/nvdajp.git e8102fe..52fdbe2 jpbranch -> jpbranch
ポータブル環境でSAPI音声エンジンがインストールされていない場合など、保存された設定の音声エンジンが初期化できない場合があります。
現状ではフォールバック先の音声エンジンは espeak になっていますが、日本語ユーザーには不都合なこともあります。
フォールバックする音声エンジンを espeak ではなく jtalk にすることが可能かどうか調べてみましたが、 synthDriverHandler.py で espeak とハードコーディングされている場所がいくつかあり、これを nvdajp_jtalk に変えればよさそうです。