Card 29 of 38· Domain 4 · Text analysis and speech
Voice Live, and translating text and speech
Real-time voice agents and the interruption event, translation against transliteration, and the config pair that replaces the one card 28 taught you.

Two topics share this card: real-time voice agents, and translation. They are joined by a single question the exam keeps asking in different forms — is this about meaning, or about characters?
Voice Live
Real-time, low-latency, full-duplex voice. Full-duplex means both sides can speak at once, as in a phone call, rather than taking strict turns.
- It runs over a bidirectional WebSocket, with JSON events flowing both ways.
- It is compatible with the Azure OpenAI Realtime API.
- The SDK package is
azure-ai-voicelive.
Configuration: authentication by Microsoft Entra ID or API key. Audio formats are PCM16 — uncompressed, full fidelity, larger — or G.711, which is compressed and used in telephony. You can test it by enabling Voice Mode in the agent playground.
The event to know: to stop playback when the user interrupts, handle input_audio_buffer.speech_started. Without it the agent keeps talking over someone who has started speaking, which is the single most obvious way a voice agent feels wrong.
Extras worth knowing by name: a WebRTC avatar, noise suppression with echo cancellation, and semantic turn detection.
Translation — meaning against characters
| What the requirement asks for | The call |
|---|---|
| Convert a word's meaning — Chinese to English | TextTranslationClient.translate |
| Convert script or characters — Russian into Cyrillic characters | transliterate — no meaning change |
| List what is supported | get_supported_languages |
| Skip auto-detection | Pass from_language |
Transliteration changes the writing system while leaving the word itself alone. Translation changes the word. A requirement that mentions a script or an alphabet is nearly always transliteration, even though translation is the more familiar operation.
Speech translation: two synthesis modes
Event-based synthesis is real-time, and handles one target language only. The voice must match that language. It works through the synthesizing event.
Manual synthesis handles multiple target languages. You iterate the translations dictionary and use a SpeechConfig plus a SpeechSynthesizer for each language.
The deciding factor is the number of target languages. One, in real time: event-based. Several: manual.
The trap
Speech translation languages are configured on SpeechTranslationConfig — speech_recognition_language plus add_target_language — and driven by a TranslationRecognizer.
Not the plain SpeechConfig and SpeechRecognizer pair from card 28. Those are correct for recognition and wrong for translation, which makes them an effective distractor for anyone who learned card 28 well.
One more detail that survives from an older naming era: the Translator endpoint still ends ...cognitiveservices.azure.com. Card 4 told you never to pick a Cognitive Services role for Foundry work. That rule is about roles. The endpoint hostname is a separate thing and genuinely still carries the old name — so do not "correct" it.