언어 및 음성 구성

이 문서에서는 Gemini Live API에서 합성된 음성 응답과 음성 활동 감지를 구성하는 방법을 설명합니다. 다양한 HD 음성 및 언어로 대답을 구성할 수 있으며, 사용자가 모델을 중단할 수 있도록 음성 활동 감지 설정을 구성할 수도 있습니다.

언어 및 음성 설정

gemini-3.8-live와 같은 실시간 오디오 모델은 대화 중에 자연스럽게 언어를 전환할 수 있습니다. 시스템 안내에 지정하여 말하는 언어를 제한할 수도 있습니다.

음성은 모든 모델의 voice_name 필드에 구성됩니다.

다음 코드 샘플은 언어와 음성을 구성하는 방법을 보여줍니다.

from google.genai.types import LiveConnectConfig, SpeechConfig, VoiceConfig, PrebuiltVoiceConfig

config = LiveConnectConfig(
  response_modalities=["AUDIO"],
  speech_config=SpeechConfig(
    voice_config=VoiceConfig(
        prebuilt_voice_config=PrebuiltVoiceConfig(
            voice_name=voice_name,
        )
    ),
    language_code="en-US",
  ),
)

음성 어조 및 악센트 안내

시스템 요청 사항을 사용하여 음성의 어조와 억양을 안내할 수 있으며, Gemini Live API는 요청한 음성으로 응답합니다. 예: '프랑스어 억양이 있는 긍정적이고 경쾌한 목소리의 영어'

지원되는 음성

Gemini Live API는 voice_name 필드에서 다음 30가지 음성 옵션을 지원합니다.

Zephyr -- 밝음
Kore -- 단호함
Orus -- 단호함
Autonoe -- 밝음
Umbriel -- 느긋함
Erinome -- 선명함
Laomedeia -- 명랑함
Schedar -- 고름
Achird -- 친근함
Sadachbia -- 활기참
Puck -- 명랑함
Fenrir -- 흥분하기 쉬움
Aoede -- 산뜻함
Enceladus -- 숨소리가 섞임
Algieba -- 매끄러움
Algenib -- 걸걸함
Achernar -- 부드러움
Gacrux -- 성숙함
Zubenelgenubi -- 태평함
Sadaltager -- 지식이 풍부함
Charon -- 정보 전달형
Leda -- 젊음
Callirrhoe -- 편안함
Iapetus -- 명료함
Despina -- 매끄러움
Rasalgethi -- 정보 전달형
Alnilam -- 단호함
Pulcherrima -- 선도적임
Vindemiatrix -- 온화함
Sulafat -- 따뜻함

지원 언어

Gemini Live API는 다음 언어를 지원합니다.

언어 BCP-47 코드
아랍어(이집트) ar-EG
벵골어(방글라데시) bn-BD
네덜란드어(네덜란드) nl-NL
영어(인도) en-IN 및 hi-IN 번들
영어(미국) en-US
프랑스어(프랑스) fr-FR
독일어(독일) de-DE
힌디어(인도) hi-IN
인도네시아어(인도네시아) id-ID
이탈리아어(이탈리아) it-IT
일본어(일본) ja-JP
한국어(대한민국) ko-KR
마라티어(인도) mr-IN
폴란드어(폴란드) pl-PL
포르투갈어(브라질) pt-BR
루마니아어(루마니아) ro-RO
러시아어(러시아) ru-RU
스페인어(미국) es-US
타밀어(인도) ta-IN
텔루구어(인도) te-IN
태국어(태국) th-TH
터키어(터키) tr-TR
우크라이나어(우크라이나) uk-UA
베트남어(베트남) vi-VN

커스텀 음성 사용

사전 빌드된 음성 대신 Gemini Live API가 합성된 음성 응답에서 복제하는 음성의 짧은 녹음 파일을 제공할 수 있습니다. 맞춤 음성은 voice_config의 replicated_voice_config 필드에서 세션별로 구성됩니다. 사전에 업로드하거나 학습시킬 항목이 없습니다.

음성 샘플 요구사항

음성 샘플은 다음 사양을 충족해야 합니다.

  • 오디오 형식: 가변 샘플링 레이트가 적용된 PCM 오디오 s16le(예: audio/pcm;rate=24000)

  • 길이: 10~20초

커스텀 음성 녹음

음성 샘플을 녹음할 때 최상의 음질을 위해 다음 팁을 따르는 것이 좋습니다.

  1. 자연스럽게 말하기: 아바타가 방송인처럼 들리기를 원하지 않는 한 '라디오 음성'을 사용하거나 과장된 발음을 사용하지 마세요. 친구에게 말하듯이 스크립트를 정확하게 읽습니다.

  2. 배경 소음 제한: 배경 소음을 최대한 제한합니다. 환풍기를 끄고, 에어컨을 끄고, 열려 있는 창문을 닫습니다.

  3. 약간 미소짓기: 녹화 중에 미소를 지으면 녹화에 따뜻함이 더해지고 이 따뜻함이 복제된 음성에 추가됩니다.

다음 스크립트 중 하나를 사용하여 맞춤 음성을 녹음하는 것이 좋습니다.

  • 음성 표준, 전반적인 품질에 가장 적합: '공기 중의 빗방울이 햇빛을 받으면 프리즘처럼 작용하여 무지개를 형성합니다. 무지개는 흰색 빛이 여러 아름다운 색상으로 나뉘는 현상입니다. 이러한 아치는 긴 원형 아치 모양을 하고 있습니다.'

  • 스토리텔러, 감정과 다이내믹 레인지를 포착하는 데 가장 적합: '먼지 쌓인 오래된 책을 열었을 때 내 눈을 믿을 수 없었어요. 작은 금색 열쇠가 나무 바닥에 떨어져 덜커덕거렸습니다. '출처가 어디인가요?' 나는 갑자기 흥분된 스릴을 느끼며 속삭였다. 모든 것이 바뀌려고 하고 있었어요.'

맞춤 음성 설정

WebSocket 연결을 통해 전송하는 초기 setup 페이로드에서 맞춤 음성을 구성합니다.

import base64
import json
import websockets

# Load custom voice audio (PCM s16le, e.g., 24kHz)
with open("/path/to/your/audio_sample.wav", "rb") as f:
    wav_b64 = base64.b64encode(f.read()).decode("utf-8")

# Setup generation config with custom voice
GENERATION_CONFIG = {
    "response_modalities": ["AUDIO"],
    "speech_config": {
        "voice_config": {
            "replicated_voice_config": {
                "voice_sample_audio": "VOICE_SAMPLE",
                "mime_type": "VOICE_MIME_TYPEaudio/pcm;rate=24000",
            }
        }
    },
}

# Session setup message
SETUP_MESSAGE = {
    "setup": {
        "model": "gemini-3.8-live",
        "generation_config": GENERATION_CONFIG,
        "system_instruction": {
            "parts": [{"text": "Your system instruction here"}]
        },
        "input_audio_transcription": {},
        "output_audio_transcription": {},
    }
}

다음을 바꿉니다.

  • VOICE_SAMPLE: base64로 인코딩된 PCM 오디오 문자열 (10~20초 샘플)입니다.

  • VOICE_MIME_TYPE: PCM 오디오의 MIME 유형입니다(예: "audio/pcm;rate=24000").

맞춤 음성을 사전 빌드된 아바타 또는 맞춤 아바타와 페어링할 수 있습니다. 자세한 내용은 실시간 아바타 구성을 참고하세요.

음성 활동 감지 구성

음성 활동 감지(VAD)를 사용하면 모델이 사람이 말하는 시점을 인식할 수 있습니다. 사용자가 언제든지 모델의 말을 끊고 끼어들 수 있어 자연스러운 대화를 위해 필수적입니다.

VAD가 중단을 감지하면 진행 중인 생성이 취소되고 삭제됩니다. 클라이언트에 이미 전송된 정보만 세션 기록에 보관됩니다. 그런 다음 서버는 BidiGenerateContentServerContent 메시지를 전송하여 중단을 보고합니다. 그런 다음 서버는 대기 중인 함수 호출을 삭제하고 취소된 호출의 ID가 포함된 BidiGenerateContentServerContent 메시지를 전송합니다.

Python

config = {
    "response_modalities": ["audio"],
    "realtime_input_config": {
        "automatic_activity_detection": {
            "disabled": False, # default
            "start_of_speech_sensitivity": "low",
            "end_of_speech_sensitivity": "low",
            "prefix_padding_ms": 20,
            "silence_duration_ms": 100,
        }
    }
}
      

다음 단계