任务单 #33660

IME を独自に制御するアプリで読み上げの重複を回避する

开放日期: 2014-04-08 11:57 最后更新: 2014-07-26 19:02

报告人:
属主:
(无)
状态:
关闭
组件:
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
Fixed
文件:

Details

チケット #33646 アプリケーションスリープAPIに関する要望から本トピックを独立させます。

AppModule でNVDAをアプリケーションスリープしている WinAltair や、スリープAPIを使って独自に読み上げを制御しているボイスポッパーなどのアプリケーションで、 IME の読み上げが重複しているとのことです。

例えば NVDA 側に IME の読み上げを止めるオプションの追加を検討しています。 WinAltair がアクティベートしたときに設定プロファイルで IME 読み上げを止めることができたらいいのですが、 そもそもそういう制御がうまくいっていないことがこの問題の原因とも思われるので、 慎重に検討する必要があります。

任务单历史 (3/9 Histories)

2014-04-08 11:57 Updated by: nishimoto
  • New Ticket "IME を独自に制御するアプリで読み上げの重複を回避する" created
2014-06-16 10:36 Updated by: nishimoto
评论

NVDA 2014.2jp で以下のような実験をしてみました。

  • メモ帳 (notepad.exe) を起動する。
  • NVDA メニューを開く。
  • 設定プロファイルで notepad アプリのプロファイルを作る。
  • notepad プロファイルで、キーボード設定「入力文字の読み上げ」チェックなし、日本語設定「半角全角キーが押されたらビープ音を鳴らす」チェック、にする。
  • 設定プロファイルを「通常の設定」に戻す。
  • この状態で、「メモ帳」から Office IME 2010 日本語入力を使うと、プリエディット文字のキーエコーと、「文字変換」「変換停止」を読まなくなる。他のアプリケーションには影響しない。

さらに実現できるとよさそうなもの:

  • 半角英数キーで読み上げもビープもすべて止める
  • 入力モード(半角英数、ひらがなローマ字)の通知を止める
  • 変換キーを押したあと、次候補の選択を行ったときなどの候補の通知を止める
  • 確定した単語の通知を止める

これらに関する新しい設定項目をNVDA側に実装して、特定のアプリケーションを選択したときにトリガーされたプロファイルで「チェックなし」にしてもらうのが、本チケットに関するひとつの対応方法になりそうです。

本当にプロファイルのトリガーで候補ウィンドウの読み上げを制御できるかどうか、実験する必要はあります。

2014-06-16 11:45 Updated by: nishimoto
评论

実験の追加:

  • 前述の notepad プロファイルで、さらに JTalk 音声設定を(たとえば lite から mei に)変更しておく
  • 結果「メモ帳」から Office IME 2010 を使った場合は、候補ウィンドウが開いたあとの読み上げが mei になる。
  • 「メモ帳」以外のアプリケーションではOffice IME 2010 候補ウィンドウが開いたあとの読み上げが lite になる。

「メモ帳」から IME の候補ウィンドウが開いた状態は、「メモ帳」のトリガーが解除されていないことが分かります。

さらに notepad プロファイルで「日本語版の文字入力拡張」をチェックなし、入力メソッド設定「選択した候補を通知」をチェックなしにすると、以下のような状況になります。

  • プリエディット文字:読まない。
  • 最初にスペースキーを押して変換した直後:読まない。
  • さらにスペースキーを押して候補ウィンドウが開いた状況:読まない。
  • Enter を押して確定した状態:mei ではなく lite の声で「候補リスト かわ」のように読み上げる。
  • この状態で「メモ帳」のトリガーは解除されている。Windows のフォーカスはメモ帳のエディットに戻っているが NVDA のフォーカスは候補リストがあった場所から動いておらず、NVDA そのものが無反応になる。Alt キーを2回押すとフォーカスが正常に戻る。

これらのことから、「日本語版の文字入力拡張」が無効の状態では、候補ウィンドウから Enter を押して確定したときに「メモ帳」のトリガーが解除されて、そのままフォーカス処理が不安定になるようです。

「日本語版の文字入力拡張」が有効であれば、入力メソッド設定「選択した候補を通知」チェックあり、チェックなしの違いはほとんどありません。 これは「選択した候補の通知」と重複する処理を「日本語版の文字入力拡張」で行っているためと思います。

プリエディット文字をバックスペースで削除したときに削除した文字が通知される処理は「コンポジションの更新を通知」チェックなしで止めることができます。

プリエディット文字がなくなったときに「クリア」と通知する処理は「日本語版の文字入力拡張」チェックなしで止めることができます。

ここまで追記した設定はすべて、設定プロファイルのトリガーが解除された状態では、自動的に元に戻ることを確認しています。

2014-06-25 00:30 Updated by: nishimoto
评论

ブランチ ti33600 の作業:

[ti33600 7394fe2] work ti33600: announceSelectedCandidate option should enable/disable Japanese input support.
 3 files changed, 3 insertions(+)

To ssh://git@bitbucket.org/nvdajp/nvdajp.git
 * [new branch]      ti33600 -> ti33600

「日本語版の文字入力拡張」がチェック、入力メソッド設定「選択した候補を通知」をチェックなしで、 以下を通知しないようにしました。

  • スペースキーを押して変換を開始した直後の候補説明
  • 候補ウィンドウが開いて次候補や前候補を選択したときの候補説明
  • Enterキーなどで確定したときの確定文字列
  • Microsoft IME の候補コメント

現状は Windows 8.1 64ビットの Microsoft IME だけ確認しています。

この仕様で、IMEを独自に読み上げるアプリケーションを、設定プロファイルのトリガー対象として「選択した候補を通知」をチェックなしにすれば、適切に使えるようになると思います。

入力モードの変更通知をどうするかですが、文字変換、変換停止、ひらがなローマ字、などのモード変更を独自処理で読み上げるアプリケーションがあるのかどうか、情報収集したほうがよいかも知れません。

2014-06-25 11:46 Updated by: nishimoto
评论

ATOK の候補コメント通知を「日本語版の文字入力拡張」と「(入力メソッド)選択した候補を通知」の両方がチェックの場合にのみ行う修正:

To ssh://git@bitbucket.org/nvdajp/nvdajp.git
   7394fe2..a2561b6  ti33600 -> ti33600

ALTAIR for Windows 10.53 が期待通りに制御できるかどうか確認しようとして、以下の問題に気づきました。

ALTAIL がフォアグラウンドのアプリケーションになると NVDA がアプリケーションスリープするので、 この状態で NVDA+N を押してもNVDAメニューを開くことができない。

そのため、設定プロファイルのトリガーを作るときに「現在のアプリケーション」で ALTAIR を選ぶことが(少なくとも簡単には)できない。

2014-06-25 12:08 Updated by: nishimoto
评论

アプリケーションスリープ状態でも NVDA+N で NVDA メニューが開くようにする変更:

diff --git a/source/globalCommands.py b/source/globalCommands.py
index d33dcf7..eda16eb 100755
--- a/source/globalCommands.py
+++ b/source/globalCommands.py
@@ -920,6 +920,7 @@ class GlobalCommands(ScriptableObject):
                gui.showGui()
        # Translators: Input help mode message for show NVDA menu command.
        script_showGui.__doc__=_("Shows the NVDA menu")
+       script_showGui.allowInSleepMode=True

        def script_review_sayAll(self,gesture):
                sayAllHandler.readText(sayAllHandler.CURSOR_REVIEW)

この変更をした実装で、以下を確認しました:

  • Windows 8.1 で NVDA を起動して、ALTAIR for Windows 10.53 (winal) を起動する。ALTAIR がフォアグラウンドになると NVDA はスリープして ALTAIR は SAPI5 でしゃべる。
  • NVDA+N を押して設定プロファイルを開き、トリガーを新規作成(現在のアプリケーション winal)する。
  • winal プロファイルで以下を変更する
    • キーボード設定:入力文字の読み上げ=チェックなし
    • 入力メソッド設定:選択した候補を通知=チェックなし
    • 日本語設定:半角全角キーが押されたらビープ音を鳴らす=チェック
  • プロファイルを通常に戻す
  • この環境で、フォアグラウンドのアプリがメモ帳などの場合は通常の動作
  • フォアグラウンドを ALTAIR にして Microsoft IME や ATOK 2014 にすると、いずれにおいても ALTAIR の日本語入力だけが読み上げされる。
  • 半角全角キーを押したときには NVDA のビープ音が聞こえた後で ALTAIR の通知(変換オン、変換オフ)が読み上げされる。
  • ひらがなローマ字、などのモード変更は ALTAIR には通知機能がなく、NVDA の通知だけが読み上げされる。

以上のことから、アプリケーションスリープ状態で NVDA+N を有効にするようにすれば、本件は解決すると思われます。

同じブランチに push までしておきました。

[ti33600 0389f4e] ti33660: enable NVDA+N in application sleep
 1 file changed, 1 insertion(+)

To ssh://git@bitbucket.org/nvdajp/nvdajp.git
   a2561b6..0389f4e  ti33600 -> ti33600
2014-06-26 12:55 Updated by: nishimoto
评论

日本語テスト版 jpalpha140626

https://dl.dropboxusercontent.com/u/62564469/nvda_jpalpha140626.exe

ブランチ ti33600 をマージしました(まだ jpbeta にはマージしていません)

事前の設定が必要ですが、IME の読み上げ重複の回避は、この方法による対応でよいか、ご検討ください。

念のために変更する項目をもう一度書いておきます:

  • キーボード設定:入力文字の読み上げ=チェックなし
  • 入力メソッド設定:選択した候補を通知=チェックなし
  • 日本語設定:半角全角キーが押されたらビープ音を鳴らす=チェック

またこのバージョンはスリープモードのアプリから NVDA+N でNVDAメニューが開くようになっています。

2014-06-28 17:25 Updated by: nishimoto
  • 处理结果 Update from Accepted to Fixed
评论

jpbeta に ti33600 をマージしました。

クローズする前にドキュメントの更新が必要。

2014-07-26 19:02 Updated by: nishimoto
  • Ticket Close date is changed to 2014-07-26 19:02
  • 状态 Update from 开启 to 关闭
评论

NVDA 日本語版の説明を更新して本件の説明を書いたので、クローズします。

To ssh://git@bitbucket.org/nvdajp/nvdajp.git
   d825bcd..16aad7b  jpbeta -> jpbeta

Attachment File List

No attachments

编辑

Please login to add comment to this ticket » 登录名