トークモード
トークモードは連続的な音声会話ループです。
- 音声を聞き取る
- トランスクリプトをモデルに送信(メインセッション、chat.send)
- レスポンスを待つ
- ElevenLabs で読み上げ(ストリーミング再生)
動作(macOS)
- トークモード有効中は常時表示オーバーレイ。
- 聞き取り中 → 処理中 → 読み上げ中のフェーズ遷移。
- 短い間(無音ウィンドウ)の後、現在のトランスクリプトが送信されます。
- 返信は WebChat に書き込み(タイピングと同じ)。
- 発話中の割り込み(デフォルトはオン): アシスタントの発話中にユーザーが話し始めると、再生を停止し、次のプロンプトに割り込みタイムスタンプを記録します。
返信中の音声ディレクティブ
アシスタントは返信の先頭に単一の JSON 行を付けて音声を制御できます。
{ "voice": "<voice-id>", "once": true }
ルール:
- 空でない最初の行のみ。
- 未知のキーは無視されます。
once: trueは現在の返信にのみ適用。onceなしの場合、その音声がトークモードの新しいデフォルトになります。- JSON 行は TTS 再生前に除去されます。
サポートされるキー:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed、rate(WPM)、stability、similarity、style、speakerBoostseed、normalize、lang、output_format、latency_tieronce
設定(~/.openclaw/openclaw.json)
{
talk: {
voiceId: "elevenlabs_voice_id",
modelId: "eleven_v3",
outputFormat: "mp3_44100_128",
apiKey: "elevenlabs_api_key",
silenceTimeoutMs: 1500,
interruptOnSpeech: true,
},
}
デフォルト:
interruptOnSpeech: truesilenceTimeoutMs: 未設定時、トランスクリプト送信前にプラットフォームデフォルトの無音ウィンドウを使用(macOS と Android は 700 ms、iOS は 900 ms)voiceId:ELEVENLABS_VOICE_ID/SAG_VOICE_IDにフォールバック(API キーが利用可能な場合は ElevenLabs の最初の音声)modelId: 未設定時のデフォルトはeleven_v3apiKey: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_v3のstabilityは0.0、0.5、1.0に検証されます。他のモデルは0..1を受け付けます。latency_tierは設定時に0..4に検証されます。- Android は低レイテンシー AudioTrack ストリーミング用に
pcm_16000、pcm_22050、pcm_24000、pcm_44100出力形式をサポートします。