チケット #35668

「nvdaController_speakText」直後の「nvdaController_isSpeaking」で0が返る

登録: 2015-10-29 09:15 最終更新: 2015-12-29 18:47

報告者:
(匿名)
担当者:
(未割り当て)
チケットの種類:
状況:
オープン
コンポーネント:
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
直さない
ファイル:
なし

詳細

コントローラークライアントAPI「nvdajp-client-140119a」を使って以下のようなコードを書いたのですが、読み上げ終了を待つ部分の処理が期待通りに同さしていません。

「nvdaController_speakText」直後の「nvdaController_isSpeaking」が0になってしまいます。

5.times do |x| # 繰り返し開始
nvdaController_cancelSpeech(); nvdaController_speakText("こんにちわ。本日は、晴天なり。"); while nvdaController_isSpeaking() do # 読み上げ終了まで待機
sleep(0.05)
end # 読み上げ終了を待つ処理
end # 繰り返し終了

「nvdaController_speakText」と「nvdaController_isSpeaking」の間に、100ms程度のウェイトを入れると正常に動作するようですが、読み上げさせるテキストは可変の予定のため、不必要にウェイトを入れるのは好ましくないと考えています。少なくともPC-TalkerやFocusTalk、SAPI5など、他の音声読み上げのAPI利用においては上記のようなコードでも期待通りに同さしています。

上記について、ウェイト以外の何らかの制御命令で対策可能なのか、ご教示頂ければと考えています。なお、ウェイトを入れるのが最良ということでしたら、それはそれでかまいません。

チケットの履歴 (7 件中 3 件表示)

2015-10-29 09:15 更新者: None
  • 新しいチケット "「nvdaController_speakText」直後の「nvdaController_isSpeaking」で0が返る" が作成されました
2015-10-29 10:39 更新者: nishimoto
コメント

nvdaController_isSpeaking は音声エンジンごとに対応状況や実装が異なるのですが、 念のために NVDA 日本語版のバージョンと、音声エンジンの種類、設定など教えていただけますか?

2015-10-29 20:18 更新者: None
コメント

使用しているNVDA日本語版は2015.2JPです。

細かい設定としては、読み上げのレスポンスを最大になるよう調整しています。

* 点字ディスプレイ系 : 全て無効

* 言語判定系 : 全て無効

* NVDAのシステム言語 : 日本語

音声エンジンですが、いろいろ使ってみましたが、多少違いはあるものの基本的にどれも5回中0~2回ほど発声する状態でした。

* JTalk : 「Mai」、「lite」、「M001」

* SpeachAPI 5 : 「AquesTalk」、「ドキュメントトーカー たかし・太郎・ロボ太郎」、「VoiceText SHO」

* Haruka (nvdajp) : Haruka

* Microsoft speech platform 11 : Haruka

1回以上発音できる時があるということですと、どれくらい必要かはさておいて、ウェイトがあった方がいいのかもしれない… と思いつつあります。

2015-10-30 10:21 更新者: nishimoto
コメント

念のためにこの API の使い方についてコメントします:

まず nvdaController_isSpeaking という API は本家版 NVDA にはないので、 この API そのものがエラーになる場合の考慮をおすすめします。 (NVDA が本家版か日本語版かを判定するような処理はおすすめしません)

それから isSpeaking は音声エンジンによっては常に 0 を返します。 (音声エンジンが「音声なし」、または Vocalizer などNVDA日本語チーム以外のベンダーが提供する音声エンジンの場合) isSpeaking がある時間以上 1 を返さない場合の考慮もおすすめします。 (選択中の音声エンジンの種類を判定するような処理はおすすめしません)

それから NVDA 本家ではオーディオのダッキングを実装しようという動きがあるので、 そのあたりの改善がすすめば、もっと安定して動作する isSpeaking API を 本家に提案できるかも知れません。 引き続き、検討、情報収集させてください。

2015-10-30 20:40 更新者: None
コメント

推奨について了解しました。

本件に関しては、以下のようにウェイトを入れて実行し、それでも0が返るのは仕方ない、ということにします。

{{{ nvdaController_speakText('本日は晴天なり');
do {
sleep(0.2); // 200 ms sleep
} while(nvdaController_isSpeaking()); }}}
2015-11-05 13:41 更新者: nishimoto
  • 解決法なし から 直さない に更新されました
  • マイルストーン2015.4jp (完了済み) から (未割り当て) に更新されました
コメント
2015-12-29 18:47 更新者: nishimoto
コメント

本家に isSpeaking API みたいな要望が出ていたのでコメントを書きました:

https://github.com/nvaccess/nvda/issues/5638

添付ファイルリスト

添付ファイルはありません

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする