Ticket #35668

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

Open Date: 2015-10-29 09:15 Last Update: 2015-12-29 18:47

Reporter:
(Anonymous)
Owner:
(None)
Type:
Status:
Open
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Won't Fix
File:
None

Details

コントローラークライアント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利用においては上記のようなコードでも期待通りに同さしています。

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

Ticket History (3/7 Histories)

2015-10-29 09:15 Updated by: None
  • New Ticket "「nvdaController_speakText」直後の「nvdaController_isSpeaking」で0が返る" created
2015-10-29 10:39 Updated by: nishimoto
Comment

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

2015-10-29 20:18 Updated by: None
Comment

使用している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 Updated by: nishimoto
Comment

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

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

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

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

2015-10-30 20:40 Updated by: None
Comment

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

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

{{{ nvdaController_speakText('本日は晴天なり');
do {
sleep(0.2); // 200 ms sleep
} while(nvdaController_isSpeaking()); }}}
2015-11-05 13:41 Updated by: nishimoto
  • Resolution Update from None to Won't Fix
  • Milestone Update from 2015.4jp (closed) to (None)
Comment
2015-12-29 18:47 Updated by: nishimoto
Comment

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

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

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login