macOS companion app
音声ウェイク(macOS)
Voice Wake と Push-to-Talk
要件
Voice Wake と push-to-talk には macOS 26 以降が必要です。古い macOS バージョンでは、 Voice 設定ページからコントロールが非表示になり、macOS 26 要件が表示されます。
モード
- ウェイクワードモード(デフォルト): 常時オンの Speech recognizer がトリガートークン(
swabbleTriggerWords)を待機します。一致するとキャプチャを開始し、部分テキスト付きのオーバーレイを表示し、無音後に自動送信します。 - Push-to-talk(右 Option 長押し): 右 Option キーを長押しすると、トリガーなしですぐにキャプチャします。長押し中はオーバーレイが表示され、離すと確定して短い遅延後に転送されるため、テキストを微調整できます。
実行時の動作(ウェイクワード)
- Speech recognizer は
VoiceWakeRuntimeにあります。 - トリガーは、ウェイクワードと次の単語の間に意味のある一時停止(約 0.55 秒の間隔)がある場合にのみ発火します。コマンドが始まる前でも、その一時停止でオーバーレイ/チャイムを開始できます。
- 無音ウィンドウ: 発話が続いている場合は 2.0 秒、トリガーだけが聞こえた場合は 5.0 秒。
- ハード停止: セッションの暴走を防ぐため 120 秒。
- セッション間のデバウンス: 350ms。
- オーバーレイは
VoiceWakeOverlayControllerによって駆動され、確定/揮発の色分けを使います。 - 送信後、recognizer はクリーンに再起動し、次のトリガーを待機します。
ライフサイクルの不変条件
- Voice Wake が有効で権限が付与されている場合、ウェイクワード recognizer はリスニング状態である必要があります(明示的な push-to-talk キャプチャ中を除く)。
- オーバーレイの表示状態(X ボタンによる手動非表示を含む)が、recognizer の再開を妨げてはなりません。
固着したオーバーレイの失敗モード(以前)
以前は、オーバーレイが表示されたまま固着し、それを手動で閉じると、ランタイムの再起動試行がオーバーレイの表示状態によってブロックされ、後続の再起動もスケジュールされないため、Voice Wake が「停止」したように見えることがありました。
強化内容:
- Wake runtime の再起動は、オーバーレイの表示状態によってブロックされなくなりました。
- オーバーレイ非表示の完了により、
VoiceSessionCoordinator経由でVoiceWakeRuntime.refresh(...)がトリガーされるため、手動の X 非表示後も常にリスニングが再開されます。
Push-to-talk の詳細
- ホットキー検出では、右 Option(
keyCode 61+.option)用のグローバル.flagsChangedモニターを使用します。イベントは監視のみ行います(飲み込みません)。 - キャプチャパイプラインは
VoicePushToTalkにあります。Speech を即座に開始し、部分結果をオーバーレイへストリーミングし、離したときにVoiceWakeForwarderを呼び出します。 - push-to-talk 開始時には、競合する音声タップを避けるためにウェイクワードランタイムを一時停止します。離した後に自動的に再起動します。
- 権限: マイク + Speech が必要です。イベントの確認にはアクセシビリティ/入力監視の承認が必要です。
- 外部キーボード: 一部では右 Option が期待どおりに公開されないことがあります。ユーザーから取りこぼしの報告がある場合は、代替ショートカットを提供してください。
ユーザー向け設定
- Voice Wake トグル: ウェイクワードランタイムを有効にします。
- 右 Option を長押しして話す: push-to-talk モニターを有効にします。
- 言語とマイクのピッカー、ライブレベルメーター、トリガーワード表、テスター(ローカルのみ。転送しません)。
- マイクピッカーは、デバイスが切断された場合も最後の選択を保持し、切断ヒントを表示し、戻るまで一時的にシステムデフォルトへフォールバックします。
- サウンド: トリガー検出時と送信時にチャイムを鳴らします。デフォルトは macOS の「Glass」システムサウンドです。各イベントに対して任意の
NSSound読み込み可能ファイル(例: MP3/WAV/AIFF)を選択するか、サウンドなしを選べます。
転送動作
- Voice Wake が有効な場合、文字起こしはアクティブな gateway/agent に転送されます(mac アプリの他の部分で使用されるものと同じローカル/リモートモード)。
- 返信は最後に使用したメインプロバイダー(WhatsApp/Telegram/Discord/WebChat)へ配信されます。配信に失敗した場合、エラーはログに記録され、実行は WebChat/セッションログから引き続き表示できます。
転送ペイロード
VoiceWakeForwarder.prefixedTranscript(_:)は送信前にマシンヒントを付加します。ウェイクワードと push-to-talk のパスで共有されます。
クイック確認
- push-to-talk をオンに切り替え、右 Option を長押しして話し、離します。オーバーレイに部分結果が表示され、その後送信されるはずです。
- 長押し中、メニューバーの耳は拡大されたままである必要があります(
triggerVoiceEars(ttl:nil)を使用)。離した後に元に戻ります。
関連
Was this useful?