問題タブ [sfspeechrecognizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
705 参照

swift - `SFSpeechRecognizer` に「ユーザーが話しを止めた」通知を実装する

私はこの問題を解決しようとしています: SFSpeechRecognizer - 発話の終わりを検出する

問題はSFSpeechRecognizer、検出された音声文字列が変更されるたびにコールバックが起動することですが、60 秒間の無音の後にのみ起動されます (その後、isFinalフラグが設定されます)。

推奨される手法は、コールバックが発生するたびに 2 秒のタイマーを開始し、最初にタイマーが既に設定されている場合は無効にすることです。

このテクニックを実装しました。ただし、私のタイマーコールバックでは、ヒットすることはありません。

誰でも理由を教えてもらえますか?

リンク:
- SFSpeechRecognizer - 発話の終わりを検出する

0 投票する
0 に答える
385 参照

ios - 音声認識セッションのクラッシュ

同様の質問がすでに出されていることは知っていますが、提案された解決策は役に立ちませんでした。

私のアプリでは、ユーザーの音声を認識し、音声合成も行う必要があります。問題は、アプリが認識しようとしているときにランダムにクラッシュすることです (特にテキスト読み上げの後ですが、他の場合: 2 回目の認識の試行時など)。

いくつかの明らかな変数 (一部はプライベート) と 2 つの主要な機能を持つ特別なクラス Speecher があります:startRecordkillRecord.

次の関数は、テキスト読み上げを使用しようとする前、または認識セッションをキャンセル/停止する前に呼び出されます。

私がよく得ているのはlldbエラーです。次のようになります。

ここに画像の説明を入力

コード内の問題文字列は のようですがinputNode = audioEngine.inputNode、解決方法がわかりません。私はすでにaudioEngine.inputNode.removeTap(onBus: 0)直前に試しましinputNode = audioEngine.inputNodeたが、役に立ちませんでした。

0 投票する
1 に答える
107 参照

macos - ~30 秒マークでの「SFSpeechRecognizer」「認識タスク」からの不要なコールバック

コールバックからのコールバックのスタンプを調べた場合SFSpeechRecognizer recognitionTask(macOS 上):

...私は観察します:

つまり、最後の発話から約 30 秒後に不要なコールバックが追加されます。

resultnilこの最後のコールバック用です。

30 秒に近いという事実は、最大タイムアウトを表していることを示唆しています。

セッションを手動でシャットダウンしたため (ボタンをクリックして 5 秒前後で)、タイムアウトになるとは考えていません。

シャットダウンに失敗しているプロセスがあるように見えるので、コメントアウトされたコードがたくさんありますが、それを理解できません。

完全なコードはこちらです。

何が問題なのか誰にもわかりますか?

0 投票する
1 に答える
1561 参照

swift - How to make SFSpeechRecognizer available on macOS?

I am trying to use Apple's Speech framework to do speech recognition on macOS 10.15.1. Before macOS 10.15, speech recognition was only available on iOS, but according to the documentation and this talk, should now be available on macOS as well.

However, all my my attempts to use it have resulted in the SFSpeechRecognizer's isAvailable property being set to false. Per that talk and the documentation I've enabled Siri and made sure that my app has the "Privacy - Speech Recognition Usage Description" key set to a string value in Info.plist.

I've also tried enabling code signing (which this question suggests might be necessary), enabling Dictation under Keyboard > Dictation in the System preferences.

Here's some example code, although the specifics probably aren't important; I've tried it using a Storyboard instead of SwiftUI, putting the instantiation of the SFSpeechRecognizer inside and outside the requestAuthorization callback, leaving the locale unspecified, etc. Nothing seems to have any effect:

What's especially odd is that if I run the app and then click the "Try auth" button, the authStatus returned from the callback is always .authorized. However, I've never been presented with a dialog asking me to authorize the app, and the app doesn't show up in the list of authorized apps under System Preferences > Security and Privacy > Privacy > Speech Recogniztion.

Nonetheless, clicking the "Test" button afterwards results in printing not available.

It seems like there's some hole in my understanding of the macOS privacy/permissions system, but I'm not sure how to debug further. I also think it should be possible to get this working, because I've seen other questions on StackOverflow suggesting that people have done so, for example here, here.

EDIT: At the suggestion of a comment, I tried simply ignoring the fact that isAvailable is false by replacing my check for it with code to actually try to transcribe a file, e.g.:

Then it fails, printing: The operation couldn’t be completed. (kAFAssistantErrorDomain error 1700.). So it seems like it really is necessary to check for isAvailable, and my question remains: how to get it to be true?