メインコンテンツへスキップ

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

要件

Voice Wake とプッシュトゥトークには macOS 26 以降が必要です。古い macOS では Voice 設定ページからコントロールが非表示になり、代わりに macOS 26 要件が表示されます。

モード

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

実行時の動作(ウェイクワード)

  • 認識器は VoiceWakeRuntime に存在します。
  • トリガーは、ウェイクワードと次の単語の間に意味のあるポーズがある場合のみ発火します(triggerPauseWindow = 0.55s)。コマンドが始まる前でも、そのポーズでオーバーレイ/チャイムを開始できます。
  • 無音ウィンドウ: 発話が続いている場合は 2.0s(silenceWindow)、トリガーだけが聞こえた場合は 5.0s(triggerOnlySilenceWindow)。
  • ハード停止: 暴走セッションを防ぐため 120s(captureHardStop)。
  • セッション間のデバウンス: 送信後 350ms(debounceAfterSend)。
  • オーバーレイは VoiceWakeOverlayController 経由で駆動され、確定/揮発テキストを色分けします。
  • 送信後、認識器はきれいに再起動し、次のトリガーを待機します。

ライフサイクル不変条件

  • Voice Wake が有効で権限が付与されている場合、アクティブなプッシュトゥトークキャプチャ中を除き、ウェイクワード認識器は待機し続けます。
  • X ボタンによる手動の閉じる操作を含め、オーバーレイの終了では常に認識器が再開されます。VoiceSessionCoordinator.overlayDidDismiss はすべての終了パスで VoiceWakeRuntime.refresh(state:) を呼び出します。セッション/トークンモデルについては Voice オーバーレイ を参照してください。

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

  • ホットキー検出には、右 Option(keyCode 61 + .option)用のグローバル .flagsChanged モニターを使用します。イベントを監視するだけで、飲み込むことはありません。
  • キャプチャは VoicePushToTalk に存在します。Speech を即座に開始し、部分結果をオーバーレイにストリーミングし、離したときに VoiceWakeForwarder を呼び出します。
  • プッシュトゥトークを開始すると、音声タップの競合を避けるためウェイクワードランタイムを一時停止します。離した後は自動的に再起動します。
  • 権限: マイク + Speech が必要です。キーイベントの受信にはアクセシビリティ/入力監視の承認が必要です。
  • 外部キーボード: 一部は右 Option を期待どおりに公開しません。ユーザーから取りこぼしの報告がある場合は、代替ショートカットを提供してください。

ユーザー向け設定

  • Voice Wake トグル: ウェイクワードランタイムを有効にします。
  • 右 Option を長押しして話す: プッシュトゥトークモニターを有効にします。
  • 言語とマイクのピッカー、ライブレベルメーター、トリガーワードテーブル、テスター(ローカル限定、転送しない)。
  • マイクピッカーは、デバイスが切断された場合でも最後の選択を保持し、切断ヒントを表示し、復帰するまで一時的にシステムデフォルトへフォールバックします。
  • サウンド: トリガー検出時と送信時にチャイムを鳴らします。デフォルトは macOS の「Glass」システムサウンドです。イベントごとに任意の NSSound 読み込み可能ファイル(例: MP3/WAV/AIFF)を選ぶか、サウンドなしを選択します。

転送動作

  • 転送時、VoiceWakeForwarder.selectedSessionOptions は、設定されている場合はアクティブな WebChat セッションキーを選び、そうでない場合は Gateway のメインセッションキーを選びます。
  • sessions.list 経由でそのセッションを検索し、セッションの配信コンテキストから配信チャネルとターゲットを導出します(最後のチャネル/ターゲット、次に解析済みセッションキーへフォールバック)。何も解決できない場合は WebChat をデフォルトにします。
  • 配信に失敗した場合、エラーはログに記録され(voicewake.forward カテゴリ)、実行は WebChat/セッションログから引き続き確認できます。

転送ペイロード

  • VoiceWakeForwarder.prefixedTranscript(_:) は、トランスクリプトの前にマシンヒント行(解決済みホスト名、フォールバックは「this Mac」)を付加します。これはウェイクワードとプッシュトゥトークのパスで共有されます。

クイック確認

  • プッシュトゥトークをオンにし、右 Option を押し続けて話し、離します。オーバーレイに部分結果が表示され、その後送信されるはずです。
  • 押している間、メニューバーの耳は拡大されたままになるはずです(triggerVoiceEars(ttl: nil))。離すと元に戻ります。

関連