Voice Wake&プッシュトゥトーク

モード

  • ウェイクワードモード(デフォルト):常時オンの音声認識がトリガートークン(swabbleTriggerWords)を待機。一致するとキャプチャを開始し、部分テキストと共にオーバーレイを表示、無音後に自動送信。
  • プッシュトゥトーク(右Optionキー長押し):右Optionキーを長押しするとトリガー不要で即座にキャプチャ開始。押している間オーバーレイが表示され、離すとテキストを微調整できるよう短い遅延の後に確定・転送。

ランタイムの動作(ウェイクワード)

  • 音声認識はVoiceWakeRuntime内に存在。
  • ウェイクワードと次の単語の間に意味のあるポーズ(約0.55秒の間隔)がある場合のみトリガー発火。コマンドが始まる前のポーズ中にオーバーレイ/チャイムを開始可能。
  • 無音ウィンドウ:発話中は2.0秒、トリガーのみ聞こえた場合は5.0秒。
  • ハードストップ:暴走セッションを防ぐため120秒。
  • セッション間のデバウンス:350ms。
  • オーバーレイはVoiceWakeOverlayController経由で制御。committed/volatileの色分けあり。
  • 送信後、認識器はクリーンに再起動して次のトリガーを待機。

ライフサイクルの不変条件

  • Voice Wakeが有効でパーミッションが付与されている場合、ウェイクワード認識器はリッスンしているべき(明示的なプッシュトゥトークキャプチャ中を除く)。
  • オーバーレイの表示状態(Xボタンによる手動閉じを含む)が認識器の再開を妨げてはならない。

固着オーバーレイの障害モード(過去)

以前は、オーバーレイが表示されたまま固着して手動で閉じた場合、ランタイムの再起動がオーバーレイの表示状態によってブロックされ、後続の再起動もスケジュールされないため、Voice Wakeが「死んだ」ように見えることがありました。

強化策:

  • ウェイクランタイムの再起動はオーバーレイの表示状態によってブロックされなくなった。
  • オーバーレイの閉じる完了時にVoiceSessionCoordinator経由でVoiceWakeRuntime.refresh(...)がトリガーされるため、手動のX閉じで常にリッスンが再開。

プッシュトゥトークの詳細

  • ホットキー検出は右OptionkeyCode 61 + .option)のグローバル.flagsChangedモニターを使用。イベントの観察のみ(スワローしない)。
  • キャプチャパイプラインはVoicePushToTalk内:即座にSpeechを開始、部分テキストをオーバーレイにストリーム、リリース時にVoiceWakeForwarderを呼び出し。
  • プッシュトゥトーク開始時にウェイクワードランタイムを一時停止して、オーディオタップの競合を回避。リリース後に自動再開。
  • パーミッション:マイク+音声認識が必要。イベントの確認にはアクセシビリティ/入力モニタリングの承認が必要。
  • 外部キーボード:一部は右Optionを期待通りに公開しない場合がある。ミス報告があれば代替ショートカットを提供。

ユーザー向け設定

  • Voice Wakeトグル:ウェイクワードランタイムを有効化。
  • Cmd+Fn長押しで話す:プッシュトゥトークモニターを有効化。macOS 26未満では無効。
  • 言語&マイクピッカー、ライブレベルメーター、トリガーワードテーブル、テスター(ローカル専用、転送なし)。
  • マイクピッカーはデバイス切断時に最後の選択を保持し、切断ヒントを表示、デバイスが戻るまでシステムデフォルトに一時的にフォールバック。
  • サウンド:トリガー検出時と送信時にチャイム。デフォルトはmacOSの「Glass」システムサウンド。各イベントにNSSoundで読み込み可能な任意のファイル(MP3/WAV/AIFFなど)を選択するか、No Soundを選択可能。

転送の動作

  • Voice Wakeが有効な場合、トランスクリプトはアクティブなGateway/エージェントに転送(macアプリの他の部分と同じローカル vs リモートモードを使用)。
  • 応答は最後に使用されたメインプロバイダ(WhatsApp/Telegram/Discord/WebChat)に配信。配信失敗時はログに記録され、実行はWebChat/セッションログで引き続き確認可能。

転送ペイロード

  • VoiceWakeForwarder.prefixedTranscript(_:)が送信前にマシンヒントを先頭に追加。ウェイクワードとプッシュトゥトークの両パスで共有。

クイック確認

  • プッシュトゥトークをオンにし、Cmd+Fnを長押しして話し、離す:オーバーレイに部分テキストが表示された後に送信されるはず。
  • 長押し中、メニューバーの耳が拡大したまま維持(triggerVoiceEars(ttl:nil)を使用)。リリース後に縮小。