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))。離すと元に戻ります。