음성 간 번역 기능은 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 | 아브하즈어 |
| 에이스 | 아체어 |
| ach | Acoli |
| af | 아프리칸스어 |
| AK | Akan |
| alz | 알루르어 |
| 오전 | 암하라어 |
| an | 아라곤어 |
| ar | 아랍어 |
| as | 아삼어 |
| av | 아바르어 |
| awa | 아와디어 |
| ay | 아이마라어 |
| az | 아제르바이잔어 |
| ba | 바슈키르어 |
| bal | 발루치어 |
| 차단 | 발리어 |
| 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 | 이란어 |
| ff | 풀라어 |
| fi | 핀란드어 |
| fil | 필리핀어 |
| fj | 피지어 |
| fo | 페로어 |
| 폰어 | 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 | 일로카노어 |
| is | 아이슬란드어 |
| it | 이탈리아어 |
| iu | 이누이트어 |
| ja | 일본어 |
| Jam | 자메이카 크레올 영어 |
| jv | 자바어 |
| ka | 조지아어 |
| kac | 카친어 |
| kek | 케치어 |
| kg | 콩고어 |
| kha | 카시어 |
| ki | 키쿠유어 |
| kj | 콰냐마어 |
| kk | 카자흐어 |
| kl | 그린란드어 |
| km | 표준 크메르어 |
| kn | 칸나다어 |
| ko | 한국어 |
| kok | 콘칸어 |
| kr | Kanuri |
| kri | 크리오어 |
| ks | 카슈미르어 |
| ktu | 키투바어 |
| ku | 쿠르드어 |
| kv | 코미어 |
| kw | 콘월어 |
| ky | 키르기스어 |
| la | 라틴어 |
| lb | 룩셈부르크어 |
| lg | Ganda |
| li | 림뷔르흐어 |
| lij | 리구리아어 |
| lmo | 롬바르드어 |
| ln | 링갈라어 |
| lo | 라오어 |
| lt | 리투아니아어 |
| lu | 루바 카탕가어 |
| lua | 루바룰루아 |
| 루오어 | 루오어 |
| lus | 미조어 |
| lv | 라트비아어 |
| mad | 마두라어 |
| mai | 마이틸리어 |
| mak | 마카사르어 |
| mam | 맘어 |
| mfe | 모리시엔어 |
| mg | 마다가스카르어 |
| mh | 마셜어 |
| 분 | 미낭카바우어 |
| mk | 마케도니아어 |
| ml | 말라얄람어 |
| mn | 몽골어 |
| mr | 마라타어 |
| ms | 말레이어 |
| mt | 몰타어 |
| mwr | 마르와리어 |
| my | 버마어 |
| na | 나우루 |
| 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 | 티그리냐어 |
| tiv | 티브어 |
| 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 가격 책정을 참조하세요.