Nodes and media
Praatmodus
Talk-modus heeft twee runtime-vormen:
- Native macOS/iOS/Android Talk gebruikt lokale spraakherkenning, Gateway-chat en
talk.speakTTS. Nodes adverteren detalk-capability en declareren detalk.*-commando's die ze ondersteunen. - Browser-Talk gebruikt
talk.client.createvoor client-eigenwebrtc- enprovider-websocket-sessies, oftalk.session.createvoor Gateway-eigengateway-relay-sessies.managed-roomis gereserveerd voor Gateway-overdracht en walkie-talkie-ruimtes. - Clients voor alleen transcriptie gebruiken
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), daarnatalk.session.appendAudio,talk.session.cancelTurnentalk.session.closewanneer ze ondertitels of dicteren nodig hebben zonder gesproken assistentantwoord.
Native Talk is een doorlopende spraakgesprekslus:
- Luisteren naar spraak
- Transcript naar het model sturen via de actieve sessie
- Wachten op het antwoord
- Het uitspreken via de geconfigureerde Talk-provider (
talk.speak)
Realtime Talk in de browser stuurt provider-toolaanroepen door via talk.client.toolCall; browserclients roepen chat.send niet rechtstreeks aan voor realtime-consults.
Talk voor alleen transcriptie emit dezelfde gemeenschappelijke Talk-eventenvelop als realtime- en STT/TTS-sessies, maar gebruikt mode: "transcription" en brain: "none". Het is bedoeld voor ondertitels, dicteren en alleen-observerende spraakopname; eenmalig geüploade spraaknotities gebruiken nog steeds het media/audio-pad.
Gedrag (macOS)
- Altijd-actieve overlay terwijl Talk-modus is ingeschakeld.
- Luisteren → Denken → Spreken faseovergangen.
- Bij een korte pauze (stiltevenster) wordt het huidige transcript verzonden.
- Antwoorden worden naar WebChat geschreven (hetzelfde als typen).
- Onderbreken bij spraak (standaard aan): als de gebruiker begint te praten terwijl de assistent spreekt, stoppen we het afspelen en noteren we de onderbrekingstijdstempel voor de volgende prompt.
Spraakdirectieven in antwoorden
De assistent mag zijn antwoord vooraf laten gaan door een enkele JSON-regel om de stem te regelen:
{ "voice": "<voice-id>", "once": true }
Regels:
- Alleen de eerste niet-lege regel.
- Onbekende sleutels worden genegeerd.
once: truegeldt alleen voor het huidige antwoord.- Zonder
oncewordt de stem de nieuwe standaard voor Talk-modus. - De JSON-regel wordt verwijderd vóór TTS-afspelen.
Ondersteunde sleutels:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Configuratie (~/.openclaw/openclaw.json)
{
talk: {
provider: "elevenlabs",
providers: {
elevenlabs: {
voiceId: "elevenlabs_voice_id",
modelId: "eleven_v3",
outputFormat: "mp3_44100_128",
apiKey: "elevenlabs_api_key",
},
mlx: {
modelId: "mlx-community/Soprano-80M-bf16",
},
system: {},
},
speechLocale: "ru-RU",
silenceTimeoutMs: 1500,
interruptOnSpeech: true,
realtime: {
provider: "openai",
providers: {
openai: {
apiKey: "openai_api_key",
model: "gpt-realtime",
voice: "alloy",
},
},
mode: "realtime",
transport: "webrtc",
brain: "agent-consult",
},
},
}
Standaarden:
interruptOnSpeech: truesilenceTimeoutMs: wanneer niet ingesteld, behoudt Talk het standaard pauzevenster van het platform voordat het transcript wordt verzonden (700 ms on macOS and Android, 900 ms on iOS)provider: selecteert de actieve Talk-provider. Gebruikelevenlabs,mlxofsystemvoor de macOS-lokale afspeelpaden.providers.<provider>.voiceId: valt terug opELEVENLABS_VOICE_ID/SAG_VOICE_IDvoor ElevenLabs (of de eerste ElevenLabs-stem wanneer een API-sleutel beschikbaar is).providers.elevenlabs.modelId: standaardeleven_v3wanneer niet ingesteld.providers.mlx.modelId: standaardmlx-community/Soprano-80M-bf16wanneer niet ingesteld.providers.elevenlabs.apiKey: valt terug opELEVENLABS_API_KEY(of het Gateway-shellprofiel als dat beschikbaar is).realtime.provider: selecteert de actieve realtime spraakprovider voor browser/server. Gebruikopenaivoor WebRTC,googlevoor provider-WebSocket, of een bridge-only provider via Gateway-relay.realtime.providers.<provider>slaat provider-eigen realtime-configuratie op. De browser ontvangt alleen tijdelijke of beperkte sessiereferenties, nooit een standaard API-sleutel.realtime.brain:agent-consultrouteert realtime-toolaanroepen via Gateway-beleid;direct-toolsis compatibiliteitsgedrag alleen voor de eigenaar;noneis voor transcriptie of externe orkestratie.talk.catalogtoont de geldige modi, transports, brain-strategieën, realtime-audioformaten en capability-vlaggen van elke provider, zodat first-party Talk-clients niet-ondersteunde combinaties kunnen vermijden.- Streaming-transcriptieproviders worden ontdekt via
talk.catalog.transcription. De huidige Gateway-relay gebruikt de configuratie van de Voice Call-streamingprovider totdat het dedicated configuratieoppervlak voor Talk-transcriptie wordt toegevoegd. speechLocale: optionele BCP 47-locale-id voor on-device Talk-spraakherkenning op iOS/macOS. Laat niet ingesteld om de apparaatstandaard te gebruiken.outputFormat: standaardpcm_44100op macOS/iOS enpcm_24000op Android (stelmp3_*in om MP3-streaming af te dwingen)
macOS-UI
- Menubalkschakelaar: Talk
- Configuratietabblad: groep Talk-modus (spraak-id + onderbrekingsschakelaar)
- Overlay:
- Luisteren: wolk pulseert met microfoonniveau
- Denken: zinkende animatie
- Spreken: uitstralende ringen
- Klik op wolk: stoppen met spreken
- Klik op X: Talk-modus afsluiten
Android-UI
- Schakelaar op tabblad Spraak: Talk
- Handmatige Microfoon en Talk zijn runtime-opnamemodi die elkaar uitsluiten.
- Handmatige microfoon stopt wanneer de app de voorgrond verlaat of de gebruiker het tabblad Spraak verlaat.
- Talk-modus blijft draaien totdat deze wordt uitgeschakeld of de Android-Node de verbinding verbreekt, en gebruikt het foreground-service-type voor de microfoon van Android terwijl deze actief is.
Notities
- Vereist machtigingen voor Spraak + Microfoon.
- Native Talk gebruikt de actieve Gateway-sessie en valt alleen terug op geschiedenis-polling wanneer antwoord-events niet beschikbaar zijn.
- Browser-realtime Talk gebruikt
talk.client.toolCallvooropenclaw_agent_consultin plaats vanchat.sendbloot te stellen aan provider-eigen browsersessies. - Talk voor alleen transcriptie gebruikt
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnentalk.session.close; clients abonneren zich optalk.eventvoor gedeeltelijke/definitieve transcriptupdates. - De Gateway lost Talk-afspelen op via
talk.speakmet de actieve Talk-provider. Android valt alleen terug op lokale systeem-TTS wanneer die RPC niet beschikbaar is. - macOS-lokaal MLX-afspelen gebruikt de gebundelde
openclaw-mlx-tts-helper wanneer aanwezig, of een uitvoerbaar bestand opPATH. StelOPENCLAW_MLX_TTS_BINin om tijdens ontwikkeling naar een aangepaste helper-binary te verwijzen. stabilityvooreleven_v3wordt gevalideerd op0.0,0.5of1.0; andere modellen accepteren0..1.latency_tierwordt gevalideerd op0..4wanneer ingesteld.- Android ondersteunt de uitvoerformaten
pcm_16000,pcm_22050,pcm_24000enpcm_44100voor low-latency AudioTrack-streaming.