Utilizzo della traduzione vocale

La funzionalità di traduzione vocale utilizza l'AI per interpretare la lingua, consentendo conversazioni tra persone e sistemi che parlano lingue diverse. La tua applicazione può utilizzare questa funzionalità per elaborare un flusso audio contenente un discorso in una lingua e tradurlo in un'altra lingua in tempo reale.

A differenza di altre funzionalità dell'API Live che supportano conversazioni a turni, la traduzione da voce a voce elabora continuamente l'input audio e trasmette i seguenti output man mano che diventano disponibili:

  • Trascrizione:il testo riconosciuto dal flusso audio di input nella lingua originale.
  • Traduzione:il testo tradotto nella lingua di destinazione.
  • Audio sintetizzato: un flusso audio del testo tradotto parlato nella lingua di destinazione che corrisponde alla voce dell'oratore originale.

Modelli supportati

Puoi utilizzare la traduzione vocale con il seguente modello:

Versione del modello Livello di disponibilità
gemini-2.5-flash-s2st-exp-11-2025 Privato sperimentale

Requisiti per l'audio di input

La traduzione vocale supporta solo l'input audio. Per informazioni su formati audio, codec e specifiche supportati, come la frequenza di campionamento, consulta Formati audio supportati.

Utilizzare la traduzione vocale

Per utilizzare la traduzione vocale, vedi i seguenti esempi di codice:

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

Lingue supportate

Codice lingua Lingua
aaAfar
abAbcaso
aceAchinese
achacoli
afAfrikaans
akAkan
alzAlur
amAmarico
un’Aragonese
arArabo
comeAssamese
avAvaric
awaAwadhi
ayAymara
azAzero
baBashkir
balBeluci
banBalinese
bbcBatak toba
bciBaulé
beBielorusso
bemBemba
berBerbero
bewBetawi
bgBulgaro
bgcHaryanvi
bhoBhojpuri
biBislama
bmBambara
bnBengali
boTibetano
brBretone
bsBosniaco
btsBatak simalungun
btxBatak karo
caCatalano
ceCeceno
cebCebuano
cggChiga
chChamorro
chkChuukese
cmnCinese mandarino
cnhHakha Chin
coCorso
crCree
crhTataro di Crimea
crsCreolo delle Seychelles
csCeco
cvChuvash
cyGallese
daDanese
deTedesco
dinDinka
doiDogri
dovDombe
dvDivehi
dyuDyula
dzDzongkha
eeEwe
elGreco
itInglese
eoEsperanto
esSpagnolo
etEstone
euBasco
faFarsi
ffFulah
fiFinlandese
filFilippino
fjFigiano
foFaroese
fonFon
frFrancese
pellicciaFriulano
fyFrisone occidentale
gaIrlandese
gaaGa
gdGaelico
glGaliziano
gnGuarani
guGujarati
gvManx
haHausa
hawHawaiano
heEbraico
ciaoHindi
hilHiligaynon
hmnHmong
hoHiri Motu
hCroato
hrxHunsrik
htHaitiano, creolo haitiano
huUngherese
hyArmeno
hzHerero
ibaIban
idIndonesiano
igIgbo
iloIlocano
isIslandese
che li ricevano.Italiano
iuInuktitut
jaGiapponese
JamCreolo inglese giamaicano
jvGiavanese
kaGeorgiano
kacKachin
kekKekchi
kgKongo
khaKhasi
kiKikuyu
kjKuanyama
kkKazako
klGroenlandese
kmKhmer centrale
knKannada
koCoreano
kokKonkani
krKanuri
kriKrio
ksKashmiri
ktuKituba
kuCurdo
kvKomi
kwCornico
kyKirgizo
laLatino
lbLussemburghese
lgganda
liLimburghese
lijLigure
lmoLombardo
lnLingala
loLao
ltLituano
luLuba-Katanga
lualuba-lulua
luoDholuo
lusMizo
lvLettone
pazziaMadurese
maiMaithili
makMakasar
mamMam
mfecreolo mauriziano
mgMalgascio
mhMarshallese
minMinangkabau
mkMacedone
mlMalayalam
mnMongolo
mrMarathi
msMalese
mtMaltese
mwrMarwari
myBirmano
naNauru
nbnorvegese bokmal
°Ndebele del nord
ndcNdau
neNepalese
novitàNewari
ngNdonga
nheNahuatl, Huasteca orientale
nlOlandese
nnNorvegese (Nynorsk)
nrNdebele del sud
nsoPedi
nusNuer
nvNavajo
nyChewa
ocOccitano
ojOjibwa
omOromo
oOriya
osOsseto
paPunjabi
pagPangasinan
pamPampanga
papPapiamento
plPolacco
psPashto
ptPortoghese
quQuechua
rmRomancio
rnRundi
roRumeno
ruRusso
rwKinyarwanda
saSanscrito
sahYakut
sabSantali
scSardo
scnSiciliano
sdSindhi
seLingua sami settentrionale
sgSango
shnShan
siSingalese
skSlovacco
slSloveno
smSamoano
snShona
soSomalo
sqAlbanese
srSerbo
ssSwati
stSotho del sud
suSundanese
svSvedese
swSwahili
szlSlesiano
taTamil
tcyTulu
teTelugu
tetTetum
tgTagico
thTailandese
tiTigrinya
tivTiv
tkTurkmeno
tlTagalog
tnTswana
aTonga
tpiTok pisin
trTurco
trpKok Borok
tsTsonga
ttTataro
tumTumbuka
twTwi
tyTahitiano
tyvTuvano
udmUdmurto
ugUighur
ukUcraino
urUrdu
uzUzbeco
veVenda
vecVeneziano
viVietnamita
waVallone
guerraWaray
woWolof
xhXhosa
yiYiddish
yoYoruba
yuaMaya yucateco
yueCantonese
zaZhuang
zhCinese
zuZulu

Fatturazione

In quanto funzionalità sperimentale, non ti verrà addebitato alcun costo per l'utilizzo della traduzione vocale.

Per saperne di più su prezzi e fatturazione, consulta la pagina Prezzi di Vertex AI.