2011-12-15 9 views
1

私はNSSpeechSynthesizerを使用してテキストをユーザに読んで、テキストフィールド(NSTextView)にある単語をハイライト表示するOS Xアプリケーションを作成しています。これは、NSSpeechSynthesizerDelegateプロトコルのspeechSynthesizer:willSpeakWord:ofString:メソッドを実装することによって行われます。このメソッドは、私がNSTextViewのsetSelectedRangeメソッドに転送することを話している単語の範囲(NSRange)を提供します。NSSpeechSynthesizerのバグはありますか?

stopSpeakingメソッドで読み取りを停止するまではすべて正常です。この後に再度読み込むように設定すると、speechSynthesizer:willSpeakWord:ofString:によって提供される範囲は同期していないようです。 speechSynthesizer:willSpeakWord:ofString:を数秒間呼び出すことを躊躇しているようであり、最終的にはその範囲が演説にいくぶん遅れているようです。

私はここで見つけることができ、問題を説明する簡単なアプリケーション、書かれている:私は誰かがこのコードを見て(それは本当に簡単である)のいずれか、これは確かにあると思われることを確認することを願ってい http://dl.dropbox.com/u/12516679/SpeechTest.zip

をバグ、または(うまくいけば)私が間違っていることを教えてください。

- UPDATE -

それは問題は英語以外の声で発生することが判明しました。私はもともとデンマークの声であるIdaを使っていました。私は今多くの異なった声でそれをテストしました、そして、私はそれがすべての英語の声でうまく動作することを確認することができます。しかし、それはデンマーク、スウェーデン、ノルウェー、オランダと同期していませんでした。おそらく他の言語にも影響しますが、これまでにテストしたものです。

+1

あなたのスピーチアプリケーションは、少なくとも自分のコンピュータで正常に動作しているようです。あなたの問題をもう少し詳しく説明できますか?私の視点からは、たとえ "stopSpeaking"メソッドを呼び出していても、すべてが正常に動作しているので、再生を押してください。同期が正常に動作しているようです。 –

+0

私のためにもうまくいっています... OS Xのどのバージョンですか? – spudwaffle

+0

まあ、それは良いニュースだと思います。おそらく私にも希望があります:)私の問題は、読書が止められてから再び演奏を押すと、シンセサイザーがすぐに話し始めることです。しかし、 "speechSynthesizer:willSpeakWord:ofString:"への最初の呼び出しが遅くなり、強調表示が同期しなくなります。 NSLogを使って印刷する範囲も間違っています。 ライオンを実行している新しい15インチのMBPがあります。私たちは同僚の新しいiMac(ライオンを走らせている)でアプリケーションをテストしたところ、同じ問題があります。 – pajevic

答えて

0

[OK]をクリックして問題の原因と回避策を見つけました。それは言語とは関係ありませんが、OS X Lionのほとんどの英語以外の音声はNuance音声(Nuance Communications製)です。私は英語のニュアンスの声でテストしてこれを確認しましたが、実際には同じ問題があります。 Nuanceが提供する音声のために、apiに何か問題があるように見えます。 読み取りを停止した後に新しいNSSpeechSynthesizerオブジェクトをインスタンス化することによって、問題の回避策を作成しました。それはきれいではありませんが、それは動作します:)

1

これはバグですが、それはマウンテンライオンのためのニュアンスの声の更新で解決されています。

+0

はい、それは本当です。私はちょうど1年前にAppleにバグレポートを提出し、数週間後にMountain Lionで修正されるという返事を得ました。しかし、私は1)マウンテンライオンの前にアプリケーションをリリースし、2)ライオンと共に作業する必要があったため、回避策が必要でした。 – pajevic

関連する問題