Utiliser la traduction de la parole en parole

La fonctionnalité de traduction de la parole utilise l'IA pour interpréter le langage, ce qui permet aux personnes et aux systèmes qui parlent des langues différentes de communiquer. Votre application peut utiliser cette fonctionnalité pour traiter un flux audio contenant de la parole dans une langue et le traduire en temps réel dans une autre langue.

Contrairement à d'autres fonctionnalités de l'API Live qui prennent en charge les conversations au tour par tour, la traduction de la parole en parole traite en continu les entrées audio et diffuse les sorties suivantes à mesure qu'elles sont disponibles :

  • Transcription : texte reconnu à partir du flux audio d'entrée dans la langue d'origine.
  • Traduction : texte traduit dans la langue cible.
  • Audio synthétisé : flux audio du texte traduit prononcé dans la langue cible avec la voix du locuteur d'origine.

Modèles compatibles

Vous pouvez utiliser la traduction de la parole à la parole avec le modèle suivant :

Version de modèle Niveau de disponibilité
gemini-2.5-flash-s2st-exp-11-2025 Expérimental privé

Exigences concernant l'audio d'entrée

La traduction de la parole en parole n'accepte que les entrées audio. Pour en savoir plus sur les formats audio, les codecs et les spécifications acceptés, comme le taux d'échantillonnage, consultez Formats audio acceptés.

Utiliser la traduction vocale

Pour utiliser la traduction de la parole à la parole, consultez les exemples de code suivants :

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}")

Langues disponibles

Code de langue Langue
aaAfar
abAbkhaze
aceAchénais
achacoli
afAfrikaans
akAkan
alzAlur
a.m.Amharique
uneAragonais
arArabe
asAssamais
avAvaric
awaAwadhi
ayAymara
azAzéri
baBachkir
balBaloutchi
banBalinais
bbcBatak Toba
bciBaoulé
bBiélorusse
bemBemba
berBerbère
bewBetawi
bgBulgare
bgcHaryanvi
bhoBhodjpouri
biBislama
bmBambara
bnBengalî
boTibétain
brBreton
bsBosniaque
btsBatak Simalungun
btxBatak Karo
caCatalan
ceTchétchène
cebCebuano
cggChiga
chChamorro
chkChuuk
cmnChinois mandarin
cnhHakha Chin
coCorse
crCri
crhTatar de Crimée
crsCréole seychellois
csTchèque
cvTchouvache
cyGallois
daDanois
deAllemand
dinDinka
doiDogri
dovDombe
dvDivehi
dyuDioula
dzDzongkha
eeÉwé
elGrec
enAnglais
eoEspéranto
esEspagnol
etEstonien
euBasque
faPersan
ffPeul
fiFinnois
filPhilippin
fjFidjien
foFéroïen
fonFon
frFrançais
fourrureFrioulan
fyFrison occidental
dgIrlandais
gaaGa
gdGaélique
glGalicien
gnGuarani
guGujarati
gvManx
haHaoussa
hawHawaïen
ilHébreu
salutHindi
hilHiligaïnon
hmnHmong
hoHiri motou
hCroate
hrxHunsrik
htCréole haïtien
huHongrois
hyArménien
hzHéréro
ibaIban
idIndonésien
igIgbo
iloIlocano
estIslandais
pour les recevoir.Italien
iuInuktitut
jaJaponais
JamCréole anglais jamaïcain
jvJavanais
kaGéorgien
kacKachin
kekQ'eqchi'
kgKongo
khaKhasi
kiKikuyu
kjKuanyama
kkKazakh
klGroenlandais
kmKhmer central
knKannara
koCoréen
kokKonkani
krKanuri
kriKrio
ksCachemiri
ktuKituba
kuKurde
kvKomi
kwCornish
kyKirghyz
laLatin
lbLuxembourgeois
lgGanda
liLimbourgeois
lijLigure
lmoLombard
lnLingala
loLaotien
ltLituanien
luLuba-katanga
lualuba-lulua
LuoDholuo
lusMizo
lvLetton
madMadurais
maiMaithili
makMakasar
mamMam
mfecréole mauricien
mgMalgache
mhMarshallais
minMinangkabau
mkMacédonien
mlMalayalam
mnMongol
mrMarathi
msMalaisien
mtMaltais
mwrMarwari
myBirman
N/ANauru
nbnorvégien bokmål
ndNdébélé du Nord
ndcNdau
neNépalais
nouveauNewari
ngNdonga
nheNahuatl oriental huastèque
nlNéerlandais
nnNynorsk (norvégien)
nrNdébélé du Sud
nsoPedi
nusNuer
nvNavajo
nyChewa
ocOccitan
ojOjibwa
omOromo
ouOriya
osOssète
paPanjabi
pagPangasinan
pamPampanga
papPapiamento
plPolonais
psPachtô
ptPortugais
quQuechua
rmRomanche
rnRoundi
roRoumain
ruRusse
rwKinyarwanda
saSanskrit
sahYakut
SamSantali
scSarde
scnSicilien
sdSindhî
seSame du Nord
sgSango
shnShan
siCingalais
skSlovaque
slSlovène
smSamoan
snShona
soSomali
sqAlbanais
srSerbe
ssSwati
stSotho du Sud
suSoundanais
svSuédois
swSwahili
szlSilésien
taTamoul
tcyToulou
teTélougou
tetTetum
tgTadjik
thThaï
tiTigrinya
tivTiv
tkTurkmène
tlTagalog
tnTswana
àTonga
tpiTok pisin
trTurc
trpKok Borok
tsTsonga
ttTatar
tumTumbuka
twTwi
tyTahitien
tyvTouvain
udmOudmourte
ugOuïghour
ukUkrainien
urUrdu
uzOuzbek
veVenda
vecVénitien
viVietnamien
waWallon
guerreWaray-waray
woWolof
xhXhosa
yiYiddish
yoYoruba
yuaMaya yucatèque
yueCantonais
zaZhuang
zhChinois
zuZulu

Facturation

Comme il s'agit d'une fonctionnalité expérimentale, l'utilisation de la traduction de la parole en parole ne vous sera pas facturée.

Pour en savoir plus sur les tarifs et la facturation, consultez les tarifs de Vertex AI.