音声ウェイク & プッシュトゥトーク
モード
- ウェイクワードモード(デフォルト):常時オンの音声認識がトリガートークン(
swabbleTriggerWords)を待機します。一致するとキャプチャを開始し、部分テキスト付きのオーバーレイを表示し、無音後に自動送信します。 一致するとキャプチャが開始され、部分的なテキストでオーバーレイが表示され、沈黙後に自動送信されます。 一致するとキャプチャが開始され、部分的なテキストでオーバーレイが表示され、沈黙後に自動送信されます。 - プッシュトゥトーク(右オプションホールド): 右のOptionキーを押すとすぐにキャプチャできます。トリガーは必要ありません。 オーバーレイは、保留中に表示されます。リリースは、短い遅延の後に確定および転送されるので、テキストを調整できます。 オーバーレイは、保留中に表示されます。リリースは、短い遅延の後に確定および転送されるので、テキストを調整できます。
ランタイム動作(ウェイクワード)
- 音声認識は
VoiceWakeRuntimeに常駐します。 - トリガーはwake単語と次の単語(〜0.55秒間隔)の間に意味のある一時停止がある場合にのみ発生します。 オーバーレイ/チャイムは、コマンドが開始される前でもポーズで開始できます。 オーバーレイ/チャイムは、コマンドが開始される前でもポーズで開始できます。
- 無音ウィンドウ:発話が継続している場合は 2.0 秒、トリガーのみが聞こえた場合は 5.0 秒です。
- ハードストップ:暴走セッションを防ぐため 120 秒。
- セッション間のデバウンス:350 ms。
- オーバーレイは、確定/揮発の色分けを用いて
VoiceWakeOverlayController経由で駆動されます。 - 送信後、認識器は次のトリガーを待つためにクリーンに再起動します。
ライフサイクル不変条件
- 音声ウェイクが有効で権限が付与されている場合、ウェイクワード認識は(明示的なプッシュトゥトークのキャプチャ中を除き)常に待機している必要があります。
- オーバーレイの表示状態(X ボタンによる手動の閉鎖を含む)は、認識の再開を妨げてはなりません。
固着オーバーレイの障害モード(以前)
以前は、オーバーレイが表示されたまま固着し、手動で閉じた場合、ランタイムの再起動試行がオーバーレイの可視性によってブロックされ、その後の再起動がスケジュールされないため、音声ウェイクが「停止した」ように見えることがありました。 強化対応:- ウェイクランタイムの再起動は、オーバーレイの可視性によってブロックされなくなりました。
- オーバーレイの閉鎖完了は
VoiceSessionCoordinator経由でVoiceWakeRuntime.refresh(...)をトリガーするため、X による手動閉鎖でも必ずリスニングが再開されます。
プッシュツートークの詳細
- ホットキー検出は、右 Option(
keyCode 61+.option)に対するグローバルな.flagsChangedモニターを使用します。イベントは監視のみで、消費(スワロー)はしません。 私たちは、イベント(飲み込まない)だけを観察します。 私たちは、イベント(飲み込まない)だけを観察します。 - キャプチャパイプラインは
VoicePushToTalkにあり、音声認識を即時開始し、部分結果をオーバーレイへストリーミングし、リリース時にVoiceWakeForwarderを呼び出します。 - プッシュトゥトーク開始時は、音声タップの競合を避けるためウェイクワードランタイムを一時停止します。リリース後に自動で再開します。
- 権限:マイク + 音声認識が必要です。イベントの検知にはアクセシビリティ/入力監視の承認が必要です。
- 外付けキーボード:右 Option が期待どおりに露出しない場合があります—取りこぼしの報告がある場合は代替ショートカットを提示してください。
ユーザー向け設定
- 音声ウェイク トグル:ウェイクワードランタイムを有効化します。
- Cmd+Fnを長押し: プッシュトゥトークモニタを有効にします。 macOS 26以降では無効になっています。
- 言語およびマイクのピッカー、ライブレベルメーター、トリガーワード表、テスター(ローカルのみ;転送しません)。
- マイクピッカーは、デバイスが切断されても最後の選択を保持し、切断のヒントを表示し、復帰するまで一時的にシステムデフォルトへフォールバックします。
- サウンド:トリガー検出時および送信時のチャイム。デフォルトは macOS の「Glass」システムサウンドです。各イベントごとに、任意の
NSSoundでロード可能なファイル(例:MP3/WAV/AIFF)を選択するか、サウンドなし を選べます。 イベントごとに任意のNSSound-loadable ファイル (例: MP3/WAV/AIFF) を選択するか、No Sound を選択します。 イベントごとに任意のNSSound-loadable ファイル (例: MP3/WAV/AIFF) を選択するか、No Sound を選択します。
転送動作
- 音声ウェイクが有効な場合、文字起こしはアクティブなゲートウェイ/エージェント(mac アプリ全体で使用されるローカル/リモートの同一モード)に転送されます。
- 返信は 最後に使用したメインプロバイダー(WhatsApp/Telegram/Discord/WebChat)に配信されます。配信に失敗した場合、エラーはログに記録され、実行は WebChat/セッションログから引き続き確認できます。 配信に失敗した場合、エラーは記録され、実行は WebChat/セッション ログ経由で表示されます。
転送ペイロード
- 送信前に
VoiceWakeForwarder.prefixedTranscript(_:)がマシンヒントを前置します。ウェイクワードとプッシュトゥトークの両パスで共有されます。 ウェイクワードとプッシュトゥトークのパス間で共有されました。 ウェイクワードとプッシュトゥトークのパス間で共有されました。
クイック検証
- プッシュトゥトークをオンにし、Cmd+Fn を押し続けて話し、離します:オーバーレイに部分結果が表示され、その後送信されるはずです。
- 押下中、メニューバーの耳は拡大されたまま(
triggerVoiceEars(ttl:nil)を使用)で、リリース後に元に戻ります。