SAPI4 ProTALKERの話速設定の影響で音声エンジンが起動できない
SAPI4 ドライバで ProTALKER を使うときの不具合についてご報告があったので、ここに追記しておきます:
本家チケット 2341 に関連していると思われますが、当該チケットにはその後コメントが付いていません:
概要を「ProTALKERの話速設定」から「SAPI4 ProTALKERの話速設定の影響で音声エンジンが起動できない」に変更。
以下のようなことに気づいたのでこのチケットに追記します。
2013.2jp 以前の SAPI4 ドライバーでProTALKERの話速を最高(100)にすると、実際には nvda.ini には101という値が書き込まれます。
[speech] synth = sapi4 [[sapi4]] capPitchChange = 0 sayCapForCapitals = False beepForCapitals = True useSpellingFunctionality = True voice = {904AAB60-5D94-11D0-830A-444553540000} rate = 101 pitch = 25 volume = 100
この設定ファイルの環境を 2013.3jp に更新すると、設定ファイルの値のチェックが厳しくなっている影響で、音声エンジンの初期化に失敗します。
ERROR - synthDriverHandler.setSynth (16:15:05): setSynth Traceback (most recent call last): File "synthDriverHandler.pyo", line 80, in setSynth File "synthDriverHandler.pyo", line 473, in loadSettings File "config\__init__.pyo", line 918, in __getitem__ File "config\__init__.pyo", line 973, in _cacheLeaf File "validate.pyo", line 602, in check File "validate.pyo", line 634, in _check_value File "validate.pyo", line 822, in is_integer VdtValueTooBigError: the value "101" is too big.
さらにこの状態から音声エンジンを SAPI4 に切り替えることもできなくなります。
この問題は以下の手順で解決できます:
もっと簡単な対策を用意して SAPI4 エンジンがちゃんと使える状態にしてあげる必要がありそうに思います。
バージョンごとにバリデーション処理がどう変化しているか、もうすこし調べてみます。
備考:さきほど同じ内容でコメントを書いたのですが、完全削除してタイトルと wiki 記法を修正しました。
更新チェック統計から 2014.1jp に移行していないユーザーが約15パーセントいることがわかっており、 一方で NVDA を旧バージョンから更新すると SAPI4 エンジンがエラーになると指摘されている (実際に最近の本家のバージョンアップで nvda.ini のバリデーションが厳しくなっている)ので、 本件への対応は重要かもしれません。
以下の変更が可能か、検討したいと思います:
このチケットの問題と、SAPI4での「簡単音声設定」での声の高さの変更の不具合への対策 #33821 を行ったテスト版を作りました:
日本語テスト版 jpbeta140522
https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140522.exe
SAPI4 の音声エンジンをお使いのかたにテストしていただいて、 動作報告で問題がなさそう(既存の問題の解決になっていそう)であれば、 2014.2jp に取り入れることは可能です。
5月25日までに何もリアクションがなければ、検証不十分ということで、2014.2jp への採用は見送ります。
問題なさそうなので、本チケットはクローズして、ひきつづき 2014.2jp リリース候補版で最終チェックをしたいと思います。
本家チケット2341として登録されていますが、本家が対応するかどうか分からないので登録します。
http://www.nvda-project.org/ticket/2341
SAPI4 ドライバで ProTALKER を使うときに「簡単音声設定」(NVDA+Ctrl+上下左右の矢印)での速度変更がうまく動かないとのことです。
速度設定および速度範囲を返すAPIの互換性の問題のようです。