A funcionalidade de tradução de voz para voz usa IA para interpretar a linguagem, o que permite conversas entre indivíduos e sistemas que falam idiomas diferentes. A sua aplicação pode usar esta funcionalidade para processar uma stream de áudio que contenha voz num idioma e traduzi-la para outro idioma em tempo real.
Ao contrário de outras funcionalidades da API Live que suportam conversas baseadas em turnos, a tradução de voz para voz processa continuamente a entrada de áudio e transmite os seguintes resultados à medida que ficam disponíveis:
- Transcrição: o texto reconhecido a partir do fluxo de áudio de entrada no idioma original.
- Tradução: o texto traduzido no idioma de destino.
- Áudio sintetizado: uma stream de áudio do texto traduzido falado no idioma de destino que corresponde à voz do orador original.
Modelos suportados
Pode usar a tradução de voz para voz com o seguinte modelo:
| Versão do modelo | Nível de disponibilidade |
|---|---|
gemini-2.5-flash-s2st-exp-11-2025 |
Experimental privado |
Requisitos de áudio de entrada
A tradução de voz para voz só suporta entrada de áudio. Para obter informações sobre os formatos de áudio, os codecs e as especificações suportados, como a taxa de amostragem, consulte o artigo Formatos de áudio suportados.
Use a tradução de voz para voz
Para usar a tradução de voz para voz, consulte os seguintes exemplos de código:
Python
# Set language_code to your desired language, in this case, Mandarin Chinese. speech_config = SpeechConfig(language_code="cmn") config = LiveConnectConfig( response_modalities=["AUDIO"], speech_config=speech_config, input_audio_transcription=input_transcription, output_audio_transcription=output_transcription, ) audio_file = Part.from_uri(file_uri=audio_url, mime_type="audio/mpeg") contents = [audio_file] response = client.models.generate_content(model=MODEL_ID, contents=contents) display(Markdown(response.text))
Python
import asyncio # Set model generation_config CONFIG = { "response_modalities": ["AUDIO"], "speech_config": { "language_code": "cmn", }, } headers = { "Content-Type": "application/json", "Authorization": f"Bearer {bearer_token[0]}", } # Connect to the server async with connect(SERVICE_URL, additional_headers=headers) as ws: # Setup the session await ws.send( json.dumps( { "setup": { "model": MODEL, "generation_config": CONFIG, "input_audio_transcription": {}, "output_audio_transcription": {}, "enable_speech_to_speech_translation": True, } } ) ) # Receive setup response raw_response = await ws.recv(decode=False) setup_response = json.loads(raw_response.decode("ascii")) print(setup_response) msg = { "realtime_input": { "audio": { "mime_type": "audio/pcm", "data": base64.b64encode(wav_data).decode('utf-8'), } } } await ws.send(json.dumps(msg)) overall_responses = [] timeout_seconds = 10 # Set timeout to 3 seconds # Receive chucks of server response with a timeout try: while True: try: raw_response = await asyncio.wait_for(ws.recv(decode=False), timeout_seconds) response = json.loads(raw_response.decode()) server_content = response.pop("serverContent", None) if server_content is None: break # Input Transcription. input_transcription = server_content.pop("inputTranscription", None) if input_transcription is not None: raw_text = input_transcription.pop("text", None) if raw_text is not None: display(Markdown(f"**Input >** {raw_text}")) # Output Transcription. output_transcription = server_content.pop("outputTranscription", None) if output_transcription is not None: raw_text = output_transcription.pop("text", None) if raw_text is not None: display(Markdown(f"**Response >** {raw_text}")) model_turn = server_content.pop("modelTurn", None) if model_turn is not None: parts = model_turn.pop("parts", None) if parts is not None: for part in parts: pcm_data = base64.b64decode(part["inlineData"]["data"]) overall_responses.append(np.frombuffer(pcm_data, dtype=np.int16)) # End of turn # turn_complete = server_content.pop("turnComplete", None) # if turn_complete: # break except asyncio.TimeoutError: print(f"Timeout: No response received from the websocket within {timeout_seconds} seconds.") if overall_responses: display(Audio(np.concatenate(overall_responses), rate=24000, autoplay=True)) break # Exit the loop on timeout except websockets.exceptions.ConnectionClosed as e: print(f"Connection closed by exception, code: {e.code}, reason: {e.reason}") if overall_responses: display(Audio(np.concatenate(overall_responses), rate=24000, autoplay=True)) break # Exit the loop on connection closed except Exception as e: print(f"An unexpected error occurred: {e}") if overall_responses: display(Audio(np.concatenate(overall_responses), rate=24000, autoplay=True)) break # Exit the loop on other exceptions finally: try: await ws.close(code=1000, reason="Normal closure") #example close except websockets.exceptions.ConnectionClosed as e: print(f"Connection closed by exception, code: {e.code}, reason: {e.reason}") except Exception as e: print(f"An unexpected error occurred: {e}")
Idiomas suportados
| Código de idioma | Idioma |
|---|---|
| aa | Afar |
| ab | Abcaze |
| ace | Achinês |
| ach | Acoli |
| af | Afrikaans |
| ak | Akan |
| alz | Alur |
| da manhã | Amárico |
| an | Aragonês |
| ar | Árabe |
| como | Assamês |
| av | Avar |
| awa | Awadhi |
| ay | Aimará |
| az | Azeri |
| ba | Bashkir |
| bal | Balúchi |
| banir | Balinês |
| bbc | Bataque toba |
| bci | Baoulé |
| be | Bielorrusso |
| bem | Bemba |
| ber | Berbere |
| bew | Betawi |
| bg | Búlgaro |
| bgc | Haryanvi |
| bho | Bhojpuri |
| bi | Bislama |
| bm | Bambara |
| bn | Bengali |
| bo | Tibetano |
| br | Bretão |
| bs | Bósnio |
| bts | Bataque simalungun |
| btx | Bataque karo |
| ca | Catalão |
| ce | Checheno |
| ceb | Cebuano |
| cgg | Chiga |
| ch | Chamorro |
| chk | Chuquês |
| cmn | Chinês mandarim |
| cnh | Hakha chin |
| co | Corso |
| cr | Cree |
| crh | Tártaro da Crimeia |
| crs | Francês crioulo das Seicheles |
| cs | Chéquia |
| cv | Chuvache |
| cy | Galês |
| da | Dinamarquês |
| de | Alemão |
| din | Dinca |
| doi | Dogri |
| dov | Dombe |
| dv | Divehi |
| dyu | Diúla |
| dz | Dzongkha |
| ee | Ewe |
| el | Grego |
| pt-PT | Inglês |
| eo | Esperanto |
| es | Espanhol |
| et | Estónio |
| eu | Basco |
| fa | Farsi |
| ff | Fula |
| fi | Finlandês |
| fil | Filipino |
| fj | Fijiano |
| fo | Faroé |
| fon | Fon |
| fr | Francês |
| pelo | Friuliano |
| fy | Frísico ocidental |
| ga | Irlandês |
| gaa | Ga |
| gd | Gaélico |
| gl | Galego |
| gn | Guarani |
| gu | Gujarati |
| gv | Manquês |
| ha | Haúça |
| haw | Havaiano |
| ele | Hebraico |
| hi | Hindi |
| hil | Hiligaynon |
| hmn | Hmong |
| ho | Hiri motu |
| hr | Croata |
| hrx | Hunsrik |
| ht | Haitiano, crioulo haitiano |
| hu | Húngaro |
| hy | Arménio |
| hz | Herero |
| iba | Iban |
| id | Indonésio |
| ig | Igbo |
| ilo | Ilocano |
| é | Islandês |
| it | Italiano |
| iu | Inuktitut |
| ja | Japonês |
| jam | Inglês crioulo jamaicano |
| jv | Javanês |
| ka | Georgiana |
| kac | Kachin |
| kek | Kekchi |
| kg | Conguês |
| kha | Khasi |
| ki | Kikuyu |
| kj | Cuanhama |
| kk | Cazaque |
| kl | Groenlandês |
| km | Khmer central |
| kn | Canará |
| ko | Coreano |
| kok | Concani |
| kr | Kanuri |
| kri | Krio |
| ks | Caxemirense |
| ktu | Kituba |
| ku | Curdo |
| kv | Komi |
| kw | Córnico |
| ky | Quirguize |
| la | Latim |
| lb | Luxemburguês |
| lg | Ganda |
| li | Limburguês |
| lij | Liguriano |
| lmo | Lombardo |
| ln | Lingala |
| lo | Laosiano |
| lt | Lituânia |
| lu | Luba-katanga |
| lua | Luba-Lulua |
| luo | Dholuo |
| lus | Mizo |
| lv | Letão |
| louco | Madurês |
| mai | Maitíli |
| mak | Makasar |
| mam | Mam |
| mfe | Crioulo das Ilhas Maurícias |
| mg | Malgaxe |
| mh | Marshalês |
| min | Minangkabau |
| mk | Macedónio |
| ml | Malaiala |
| mn | Mongol |
| mr | Marati |
| ms | Malaio |
| mt | Maltês |
| mwr | Marwari |
| my | Birmanês |
| N/A | Nauru |
| nb | bokmål norueguês |
| nd | Ndebele do norte |
| ndc | Xindau |
| ne | Nepalês |
| novo | Newari |
| ng | Ndonga |
| nhe | Náuatle da Huasteca Oriental |
| nl | Neerlandês |
| nn | Norueguês (Nynorsk) |
| nr | Ndebele do sul |
| nso | Pedi |
| nus | Nuer |
| nv | Navajo |
| ny | Cinianja |
| oc | Occitânico |
| oj | Ojíbua |
| om | Oromo |
| ou | Oriya |
| os | Osseta |
| pa | Punjabi |
| pag | Pangasinês |
| pam | Pampanga |
| pap | Papiamento |
| pl | Polaco |
| ps | Pastó |
| pt | Português |
| qu | Quíchua |
| rm | Romanche |
| rn | Rundi |
| ro | Romeno |
| ru | Russo |
| rw | Kinyarwanda |
| sa | Sânscrito |
| sah | Iacuto |
| sáb | Santali |
| sc | Sardo |
| scn | Siciliano |
| sd | Sindi |
| se | Sami do Norte |
| sg | Sango |
| shn | Shan |
| si | Cingalês |
| sk | Eslovaco |
| sl | Esloveno |
| sm | Samoano |
| sn | Shona |
| so | Somália |
| sq | Albanês |
| sr | Sérvio |
| ss | Suazi |
| st | Sesoto |
| su | Sundanês |
| sv | Sueco |
| sw | Suaíli |
| szl | Silesiano |
| ta | Tamil |
| tcy | Tulu |
| te | Telugu |
| tet | Tétum |
| tg | Tajique |
| th | Tailandês |
| ti | Tigrínia |
| tiv | Tive |
| tk | Turcomenistão |
| tl | Tagalo |
| tn | Tsuana |
| a | Tonga |
| tpi | Tok pisin |
| tr | Turco |
| trp | Kok borok |
| ts | Tsonga |
| tt | Tártaro |
| tum | Tumbuka |
| tw | Twi |
| ty | Taitiano |
| tyv | Tuviniano |
| udm | Udmurte |
| ug | Uigure |
| uk | Ucraniano |
| ur | Urdu |
| uz | Usbeque |
| ve | Venda |
| vec | Veneziano |
| vi | Vietnamita |
| wa | Valão |
| guerra | Waray |
| wo | Jalofo |
| xh | Xhosa |
| yi | Iídiche |
| yo | Iorubá |
| yua | Iucateque maia |
| yue | Cantonês |
| za | Zhuang |
| zh | Chinês |
| zu | Zulu |
Faturação
Como funcionalidade experimental, não lhe é cobrado qualquer valor pela utilização da tradução de voz para voz.
Para mais informações sobre preços e faturação, consulte a secção Preços do Vertex AI.