Voice Wake
mac アプリの音声ウェイクとプッシュツートークモード、およびルーティングの詳細
モード
- ''ウェイクワードモード''(デフォルト):常にオンの音声認識器がトリガートークン(''swabbleTriggerWords'')を待機します。一致するとキャプチャを開始し、部分テキストを含むオーバーレイを表示し、静音後に自動送信します。
- プッシュツートーク(右 Option ホールド):右 Option キーを押してすぐにキャプチャします——トリガーは不要です。オーバーレイは押している間表示されます。解放すると、テキストを調整できるように短い遅延後に確定して転送します。
ランタイムの動作(ウェイクワード)
- 音声認識器は ''VoiceWakeRuntime'' にあります。
- トリガーは、ウェイクワードと次の単語の間に有意な一時停止がある場合にのみ発生します(約 0.55 秒のギャップ)。オーバーレイ/チャイムは、コマンドが開始される前でも一時停止で開始できます。
- 静音ウィンドウ:音声が流れている場合は 2.0 秒、トリガーのみが聞こえた場合は 5.0 秒。
- ハードストップ:暴走セッションを防ぐために 120 秒。
- セッション間のデバウンス:350 ミリ秒。
- オーバーレイは ''VoiceWakeOverlayController'' を介して駆動され、コミット/揮発性の色付けが行われます。
- 送信後、認識器は次のトリガーをリッスンするためにクリーンに再起動します。
ライフサイクルのバリアント
- 音声ウェイクが有効で権限が付与されている場合、ウェイクワード認識器はリッスンしている必要があります(明示的なプッシュツートークキャプチャ中を除く)。
- オーバーレイの可視性(X ボタンによる手動閉じるを含む)は、認識器の再開を妨げてはなりません。
スティッキーオーバーレイの障害モード(以前)
以前は、オーバーレイが表示されたままになり、手動で閉じた場合、ランタイムの再起動試行がオーバーレイの可視性によってブロックされ、後続の再起動がスケジュールされなかったため、音声ウェイクが「死んだ」ように見えることがありました。
Hardening:
- ウェイクランタイムの再起動は、オーバーレイの可視性によってブロックされなくなりました。
- オーバーレイの閉じる完了は、''VoiceSessionCoordinator'' を介して ''VoiceSessionCoordinator'' をトリガーするため、手動 X 閉じるは常にリッスンを再開します。
プッシュツートークの詳細
- ホットキー検出は、''右 Option''(''.option'' + ''keyCode 61'')のグローバル ''.option'' モニターを使用します。イベントのみを監視します(飲み込みはしません)。
- キャプチャパイプラインは ''VoicePushToTalk'' にあります:音声をすぐに開始し、部分をオーバーレイにストリーミングし、解放時に ''VoiceWakeForwarder'' を呼び出します。
- プッシュツートークが開始されると、オーディオタップの競合を避けるためにウェイクワードランタイムを一時停止します。解放後に自動的に再開します。
- 権限:マイク + 音声認識が必要。イベントを表示するには、アクセシビリティ/入力監視の承認が必要です。
- 外部キーボード:一部は期待通りに右 Option を公開しない場合があります——ユーザーが見逃しを報告した場合、フォールバックショートカットを提供します。
ユーザー向け設定
- 音声ウェイク トグル:ウェイクワードランタイムを有効にします。
- Cmd+Fn を押して話す:プッシュツートークモニターを有効にします。macOS < 26 では無効です。
- 言語とマイクの選択、リアルタイムレベルメーター、トリガーワードテーブル、テスター(ローカルのみ;転送しません)。
- マイク選択は、デバイスが切断された場合に最後の選択を保持し、切断されたヒントを表示し、戻るまで一時的にシステムデフォルトにフォールバックします。
- ''サウンド'':トリガー検出と送信時にチャイムが鳴ります。デフォルトは macOS の「Glass」システムサウンドです。各イベントに任意の ''NSSound'' ロード可能ファイル(MP3/WAV/AIFF など)を選択するか、''サウンドなし''を選択できます。
Forwarding behavior
- 音声ウェイクが有効な場合、転写はアクティブなゲートウェイ/エージェントに転送されます(mac アプリの残りの部分で使用されるのと同じローカルとリモートモード)。
- 返信は最後に使用されたメインプロバイダー(WhatsApp/Telegram/Discord/WebChat)に配信されます。配信に失敗した場合、エラーがログに記録され、実行は WebChat/セッションログを通じて引き続き表示されます。
転送ペイロード
- ''VoiceWakeForwarder.prefixedTranscript(_:)'' は、送信前にマシンヒントを先頭に追加します。ウェイクワードとプッシュツートークパス間で共有されます。
簡単な検証
- プッシュツートークをオンに切り替え、Cmd+Fn を押して話し、解放します:オーバーレイは部分を表示してから送信する必要があります。
- 押している間、メニューバーの耳は拡大されたままになります(''triggerVoiceEars(ttl:nil)'' を使用);解放後に消えます。