语音转语音翻译功能使用 AI 来解读语言,让说不同语言的个人和系统之间能够进行对话。 您的应用可以使用此功能来处理包含一种语言的语音的音频流,并将其实时翻译成另一种语言。
与其他支持轮流对话的 Live API 功能不同,语音转语音翻译会持续处理音频输入,并在以下输出可用时进行流式传输:
- 转写:输入音频流中以原始语言识别出的文本。
- 翻译:目标语言的翻译文本。
- 合成音频:以目标语言朗读的翻译文本的音频流,与原始说话者的声音相符。
支持的模型
您可以使用以下模型进行语音转语音翻译:
| 模型版本 | 可用性级别 |
|---|---|
gemini-2.5-flash-s2st-exp-11-2025 |
不公开的实验 |
输入音频要求
语音转语音翻译仅支持音频输入。如需了解支持的音频格式、编解码器和规范(例如采样率),请参阅支持的音频格式。
使用语音转语音翻译
如需使用语音转语音翻译,请参阅以下代码示例:
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}")
支持的语言
| 语言代码 | 语言 |
|---|---|
| aa | 阿法尔语 |
| ab | 阿布哈西亚语 |
| ace | 亚齐语 |
| ach | Acoli |
| af | 南非荷兰语 |
| ak | Akan |
| alz | 阿卢尔语 |
| 上午 | 阿姆哈拉语 |
| an | 阿拉贡语 |
| ar | 阿拉伯语 |
| as | 阿萨姆语 |
| av | 阿瓦尔语 |
| awa | 阿瓦德语 |
| ay | 艾马拉语 |
| az | 阿塞拜疆语 |
| ba | 巴什基尔语 |
| bal | 俾路支语 |
| ban | 巴厘文 |
| bbc | 巴塔克托巴语 |
| bci | 巴乌雷语 |
| be | 白俄罗斯语 |
| bem | Bemba |
| ber | 柏柏尔语 |
| bew | 巴达维语 |
| bg | 保加利亚语 |
| bgc | 哈里亚纳语 |
| bho | 博杰普尔语 |
| bi | 比斯拉马语 |
| bm | 班巴拉语 |
| bn | 孟加拉语 |
| bo | 藏语 |
| br | 布列塔尼语 |
| bs | 波斯尼亚语 |
| bts | 巴塔克西马隆贡语 |
| btx | 巴塔克卡罗语 |
| ca | 加泰罗尼亚语 |
| ce | 车臣语 |
| ceb | 宿务语 |
| cgg | 奇加语 |
| ch | 查莫罗语 |
| chk | 楚克语 |
| cmn | 中文普通话 |
| cnh | 哈卡钦语 |
| co | 科西嘉语 |
| cr | 克里语 |
| crh | 克里米亚鞑靼语 |
| crs | 塞舌尔克里奥尔法语 |
| cs | 捷克语 |
| cv | 楚瓦什语 |
| cy | 威尔士语 |
| da | 丹麦语 |
| de | 德语 |
| din | Dinka |
| doi | 多格来语 |
| dov | 敦贝语 |
| dv | 第维埃语 |
| dyu | 迪尤拉语 |
| dz | 宗卡语 |
| ee | 埃维语 |
| el | 希腊语 |
| en | 英语 |
| eo | 世界语 |
| es | 西班牙语 |
| et | 爱沙尼亚语 |
| eu | 巴斯克语 |
| fa | Farsi |
| ff | 富拉语 |
| fi | 芬兰语 |
| fil | 菲律宾语 |
| fj | 斐济语 |
| fo | 法罗语 |
| fon | Fon |
| fr | 法语 |
| fur | 弗留利语 |
| fy | 西弗里西亚语 |
| ga | 爱尔兰语 |
| gaa | 加语 |
| gd | 盖尔语 |
| gl | 加利西亚语 |
| gn | 瓜拉尼人 |
| gu | 古吉拉特语 |
| gv | 马恩岛语 |
| ha | 豪萨语 |
| haw | 夏威夷语 |
| he | 希伯来语 |
| hi | 印地语 |
| hil | 希利盖农语 |
| hmn | 苗语 |
| ho | 希里莫图语 |
| 小时 | 克罗地亚语 |
| hrx | 洪斯吕克语 |
| ht | 海地语、海地克里奥尔语 |
| hu | 匈牙利语 |
| hy | 亚美尼亚语 |
| hz | Herero |
| iba | Iban |
| id | 印度尼西亚语 |
| ig | Igbo |
| ilo | 伊洛果语 |
| 为 | 冰岛语 |
| it | 意大利语 |
| iu | 因纽特语 |
| ja | 日语 |
| Jam | 牙买加克里奥尔英语 |
| jv | 爪哇语 |
| ka | 格鲁吉亚语 |
| kac | 克钦语 |
| kek | 凯克其语 |
| kg | 刚果语 |
| kha | 卡西语 |
| ki | 吉库尤语 |
| kj | 宽尼亚玛语 |
| kk | 哈萨克语 |
| kl | 格陵兰语 |
| 公里 | 中部高棉语 |
| kn | 卡纳达语 |
| ko | 韩语 |
| kok | 贡根语 |
| kr | Kanuri |
| kri | 克里奥尔语 |
| ks | 克什米尔语 |
| ktu | 吉土巴语 |
| ku | 库尔德语 |
| kv | 科米语 |
| kw | 康沃尔语 |
| ky | 吉尔吉斯语 |
| la | 拉丁语 |
| lb | 卢森堡语 |
| lg | Ganda |
| li | 林堡语 |
| lij | 利古里亚语 |
| lmo | 伦巴第语 |
| ln | 林加拉语 |
| lo | 老挝语 |
| lt | 立陶宛语 |
| lu | 卢巴加丹加语 |
| lua | 鲁巴-鲁鲁拉 (Luba-Lulua) 语 |
| luo | Dholuo |
| lus | 米佐语 |
| lv | 拉脱维亚语 |
| mad | 马都拉语 |
| mai | 迈蒂利语 |
| mak | Makasar |
| mam | Mam |
| mfe | 莫里森语 |
| mg | 马尔加什语 |
| mh | 马绍尔语 |
| 分钟 | 米南佳保语 |
| mk | 马其顿语 |
| ml | 马拉雅拉姆语 |
| mn | 蒙古语 |
| mr | 马拉地语 |
| 毫秒 | 马来语 |
| mt | 马耳他语 |
| mwr | 马尔瓦里语 |
| my | 缅甸语 |
| 不适用 | 瑙鲁 |
| nb | 挪威博克马尔语 |
| nd | 北恩德贝勒语 |
| ndc | 恩道语 |
| ne | 尼泊尔语 |
| new | 尼瓦尔语 |
| ng | 恩东加语 |
| nhe | 东部瓦斯特卡纳胡阿特尔语 |
| nl | 荷兰语 |
| nn | 挪威语(尼诺斯克语) |
| nr | 南恩德贝勒语 |
| nso | 塞佩蒂语 |
| nus | 努尔语 |
| nv | 纳瓦霍语 |
| ny | 齐切瓦语 |
| oc | 奥克斯坦语 |
| oj | 奥杰布瓦语 |
| om | 奥罗莫语 |
| 或 | 奥里亚语 |
| os | 奥塞特语 |
| pa | 旁遮普语 |
| pag | 邦阿西楠语 |
| pam | 邦板牙语 |
| pap | 帕皮阿门托语 |
| pl | 波兰语 |
| ps | 普什图语 |
| pt | 葡萄牙语 |
| qu | 克丘亚语 |
| rm | 罗曼什语 |
| rn | 隆迪语 |
| ro | 罗马尼亚语 |
| ru | 俄语 |
| rw | 卢旺达语 |
| sa | 梵语 |
| sah | 雅库特语 |
| sat | 桑塔利语 |
| sc | 撒丁尼亚语 |
| scn | 西西里语 |
| sd | 信德语 |
| se | 北萨米语 |
| sg | Sango |
| shn | 掸语 |
| si | 僧伽罗语 |
| sk | 斯洛伐克语 |
| sl | 斯洛文尼亚语 |
| sm | 萨摩亚语 |
| sn | 修纳语 |
| so | 索马里语 |
| sq | 阿尔巴尼亚语 |
| sr | 塞尔维亚语 |
| ss | 斯瓦特语 |
| st | 南索托语 |
| su | 巽他语 |
| sv | 瑞典语 |
| sw | 斯瓦希里语 |
| szl | 西里西亚语 |
| ta | 泰米尔语 |
| tcy | 图鲁语 |
| te | 泰卢固语 |
| tet | 德顿语 |
| tg | 塔吉克语 |
| th | 泰语 |
| ti | 提格里尼亚语 |
| 提夫语 | 提夫语 |
| tk | 土库曼语 |
| tl | 塔加路语 |
| tn | 茨瓦纳语 |
| to | 汤加 |
| tpi | 巴布亚皮钦语 |
| tr | 土耳其语 |
| trp | 廓克博若克语 |
| ts | 聪加语 |
| tt | 鞑靼语 |
| tum | 图姆布卡语 |
| tw | 契维语 |
| ty | 塔希提语 |
| tyv | 图瓦语 |
| udm | 乌德穆尔特语 |
| ug | 维吾尔语 |
| uk | 乌克兰语 |
| ur | 乌尔都语 |
| uz | 乌兹别克语 |
| ve | Venda |
| vec | 威尼斯语 |
| vi | 越南语 |
| wa | 瓦隆语 |
| war | 瓦雷语 |
| wo | Wolof |
| xh | 科萨语 |
| yi | 意第绪语 |
| yo | 约鲁巴语 |
| yua | 尤卡坦玛雅语 |
| yue | 粤语 |
| za | 壮语 |
| zh | 中文 |
| zu | 祖鲁语 |
结算
作为一项实验性功能,您无需付费即可使用语音转语音翻译。
如需详细了解价格和结算,请参阅 Vertex AI 价格。