トークモード

トークモードは連続的な音声会話ループです。

  1. 音声を聞き取る
  2. トランスクリプトをモデルに送信(メインセッション、chat.send)
  3. レスポンスを待つ
  4. ElevenLabs で読み上げ(ストリーミング再生)

動作(macOS)

  • トークモード有効中は常時表示オーバーレイ
  • 聞き取り中 → 処理中 → 読み上げ中のフェーズ遷移。
  • 短い間(無音ウィンドウ)の後、現在のトランスクリプトが送信されます。
  • 返信は WebChat に書き込み(タイピングと同じ)。
  • 発話中の割り込み(デフォルトはオン): アシスタントの発話中にユーザーが話し始めると、再生を停止し、次のプロンプトに割り込みタイムスタンプを記録します。

返信中の音声ディレクティブ

アシスタントは返信の先頭に単一の JSON 行を付けて音声を制御できます。

{ "voice": "<voice-id>", "once": true }

ルール:

  • 空でない最初の行のみ。
  • 未知のキーは無視されます。
  • once: true は現在の返信にのみ適用。
  • once なしの場合、その音声がトークモードの新しいデフォルトになります。
  • JSON 行は TTS 再生前に除去されます。

サポートされるキー:

  • voice / voice_id / voiceId
  • model / model_id / modelId
  • speedrate(WPM)、stabilitysimilaritystylespeakerBoost
  • seednormalizelangoutput_formatlatency_tier
  • once

設定(~/.openclaw/openclaw.json

{
  talk: {
    voiceId: "elevenlabs_voice_id",
    modelId: "eleven_v3",
    outputFormat: "mp3_44100_128",
    apiKey: "elevenlabs_api_key",
    silenceTimeoutMs: 1500,
    interruptOnSpeech: true,
  },
}

デフォルト:

  • interruptOnSpeech: true
  • silenceTimeoutMs: 未設定時、トランスクリプト送信前にプラットフォームデフォルトの無音ウィンドウを使用(macOS と Android は 700 ms、iOS は 900 ms
  • voiceId: ELEVENLABS_VOICE_ID / SAG_VOICE_ID にフォールバック(API キーが利用可能な場合は ElevenLabs の最初の音声)
  • modelId: 未設定時のデフォルトは eleven_v3
  • apiKey: ELEVENLABS_API_KEY にフォールバック(利用可能な場合は Gateway シェルプロファイル)
  • outputFormat: macOS/iOS では pcm_44100、Android では pcm_24000 がデフォルト(mp3_* を設定すると MP3 ストリーミングを強制)

macOS UI

  • メニューバーのトグル: Talk
  • 設定タブ: Talk Mode グループ(音声 ID + 割り込みトグル)
  • オーバーレイ:
    • 聞き取り中: マイクレベルに合わせてクラウドがパルス
    • 処理中: 沈み込むアニメーション
    • 読み上げ中: 放射状リング
    • クラウドをクリック: 読み上げ停止
    • X をクリック: トークモード終了

補足

  • 音声認識 + マイクのパーミッションが必要です。
  • セッションキー main に対して chat.send を使用します。
  • TTS は ElevenLabs ストリーミング API を使用し、ELEVENLABS_API_KEY と macOS/iOS/Android でのインクリメンタル再生で低レイテンシーを実現します。
  • eleven_v3stability0.00.51.0 に検証されます。他のモデルは 0..1 を受け付けます。
  • latency_tier は設定時に 0..4 に検証されます。
  • Android は低レイテンシー AudioTrack ストリーミング用に pcm_16000pcm_22050pcm_24000pcm_44100 出力形式をサポートします。