Gemini TTS 프롬프트 작성 가이드

이 페이지에서는 Gemini 3.8 Flash TTS 및 Gemini 3.8 Flash-Lite TTS를 사용할 때 프롬프트를 작성하는 권장사항을 설명합니다.

요청 문법과 코드 샘플은 Gemini TTS 개요를 참조하세요.

Gemini 3.8 TTS 모델은 text 필드를 축어 스크립트로 처리합니다. 지속적인 발화 수준 방향은 speech_metadata에 표시되고 특정 시점의 음성 이벤트는 스크립트에 인라인으로 표시됩니다. 다음 요청은 대화 차례 수준 style를 인라인 음성 태그 및 일시중지와 결합합니다.

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "Wait... <short pause> did you hear that? <gasp> Someone's at the door.",
      "speechMetadata": {"style": "whispered, nervous"}
    }]
  }],
  "generationConfig": {
    "responseModalities": ["AUDIO"],
    "speechConfig": {"voiceConfig": {"voice": "Kore"}}
  }
}

스타일 필드와 인라인 태그 비교

실적 안내를 범위별로 분할합니다.

  • 대화 수준 전달 (speech_metadata.style): 감정, 운율, 전체 속도, 전달 스타일 (예: "whispering", "out of breath", "muttering", "sarcastic")과 같은 지속적인 전달 속성을 speech_metadata의 style 필드에 입력합니다. 대화 전반에서 안정적인 캐릭터와 성능을 만들려면 음성 디자인에서 페르소나를 미리 설계하고 style는 선택적인 대화 수준 조정에만 사용하세요.
  • 특정 시점 이벤트 (인라인 태그): 꺾쇠괄호(<cough>, <breath>, <sigh>, <short pause>)를 사용하여 스크립트 내에 일시적인 비언어적 음성, 호흡 또는 일시중지를 인라인으로 배치합니다. 꺾쇠괄호(<...>)를 사용하여 오디오 품질을 극대화하고 비언어적 음향 효과보다는 인간의 발성에 집중합니다.
범위 배치 위치 예시
대화 차례 수준 (대화 차례 내내 유지됨) speech_metadata.style "angry tone", "speaking rapidly", "out of breath", "whispers", "sarcastic"
특정 시점 (특정 단어에서 발생) text (<...>)의 인라인 "<cough> Thank you all for coming tonight! <throat-clearing> As I was saying..."

속도 조절 및 일시중지

다음 세 가지 수준에서 리듬과 무음을 제어할 수 있습니다.

  • 구두점 및 줄임표: 쉼표, 대시 (--), 줄임표(...)를 사용하여 자연스러운 망설임을 표현합니다.
  • 인라인 일시중지 태그: 화자가 일시중지해야 하는 위치에 <short pause> 또는 <long pause>를 삽입합니다. 예를 들면 "Hold on, let me think... <short pause> Alright, I've got it."입니다.
  • 대화 수준 속도: speech_metadata에서 "style": "speaking rapidly" 또는 "style": "speaking slowly"를 설정하여 전체 대화의 말하기 속도를 제어합니다.

운율 및 음높이

speech_metadata.style를 사용하여 한 차례에 걸쳐 운율, 음높이, 억양을 제어합니다. 예를 들면 "style": "high pitch, cheerful and excited inflection" 또는 "style": "monotone and flat"입니다. 대화 중간에 감정이 바뀌면 스크립트를 별도의 차례로 분할하고 각 차례에 자체 style를 지정합니다.

강조

스크립트의 단어를 구두점 및 인라인 태그와 함께 대문자로 표시하여 강조합니다. 예를 들면 "This is a VERY important point!" 또는 "It was a VERY long day <sigh> ... nobody listens anymore."입니다.

짧은 음성 및 음성 언어 이외의 소리

말이 아닌 인간의 발성은 소리가 발생하는 지점에 인라인으로 꺾쇠괄호 (<...>)를 사용하여 표시합니다. 박수와 같은 비음성 음향 효과보다는 사람의 음성을 사용합니다. 권장되는 보컬 태그는 다음과 같습니다.

태그 태그 태그 태그
<argh> <breath> <heavy breath> <exhales>
<cackle> <cheer> <chuckle>/<chuckles> <cough>
<cry> <gasp> <giggle> <groan>
<growl> <grunt> <grr> <hiss>
<laugh>/<laughter> <moan> <pant> <pff>/<phew>
<scream> <shout> <shriek> <sigh>/<sighs>
<sneeze> <snicker> <snort> <sob>
<throat-clearing> <tsk> <whimper> <whispers>/<whispering>
<yawn> <short pause> <long pause>

백채널 및 음성 겹침

여러 화자가 참여하는 대화에서는 발화 중인 화자의 차례에 청자의 반응을 파이프 문자(|reaction|)로 감쌉니다. 이렇게 하면 각 반응에 대해 별도의 차례를 갖지 않고도 자연스러운 백채널이나 중복되는 발화가 생성됩니다.

  • 짧은 백채널: 활성 발화자의 차례에 짧은 청취자 반응을 레이어링합니다.
    • 대화 1 (발화자 A): "So the launch is Thursday |oh hmm| Are we actually ready?"
    • 대화 2 (발화자 B): "Ready enough |oh really?| The last blocker cleared this morning."
    • 대화 3 (발화자 A): "Then let's ship it |absolutely| and watch the dashboards."
  • 중복 및 인터리브 음성: 여러 파이프 세그먼트를 사용하여 동시 음성을 시뮬레이션합니다. 이 기능은 다음에서 가장 잘 작동합니다. gemini-3.8-flash-tts:
    • 카운트다운 또는 코러스: "Let's surprise him on three |ok| ready?" 다음에 "one. two. three. |happy| happy |birthday| birthday!"
    • 전체 중복: "Hello |oh| there |my| it |goodness| must |gracious| be |would| almost |you| time |look| for |at that| dinner"

세대 간 일관성 및 피해야 할 사항

다음 가이드라인에 따라 대화 차례가 바뀌어도 음성 ID를 안정적으로 유지하세요.

  • 긴 스타일 블록 대신 음성 디자인에서 페르소나를 미리 디자인: 이전 모델에서 가져온 긴 형식의 "Audio Profile" 단락과 여러 글머리 기호 "Director's Notes"는 음성 드리프트의 가장 일반적인 원인입니다. 음성 디자인에서 동일한 창의적 직관을 사용하여 영구적인 커스텀 voice_... 페르소나를 생성한 다음 TTS 호출을 통해 해당 음성 ID를 전달합니다.
  • 안정성을 위해 음성 참조에 의존 (메타 요청 사항 생략): Gemini 3.8 TTS 모델은 오디오 참조를 먼저 고정하도록 학습됩니다. 모델에 음성을 안정적으로 유지하도록 지시하는 안내 (예: "do not switch speaker identity" 또는 "maintain identical timbre")를 포함하지 마세요. 추가 프롬프트 텍스트는 드리프트를 증가시킵니다. 불필요한 스타일 요청 사항을 삭제하고 모델이 음성 참조에서 제공하는 안정적인 지점을 중심으로 자연스럽게 변하도록 합니다.
  • style에서 변경할 수 없는 화자 특성을 변경하려고 시도하지 마세요. speech_metadata.style에 연령, 성별, 이름 또는 영구적인 억양 변경을 입력하지 마세요. 대신 확장 음성 라이브러리에서 지역 음성을 선택하거나 음성 디자인으로 음성을 만드세요.
  1. 한 번만 캐릭터 빌드: 음성 디자인에서 캐릭터를 만들거나 확장 음성 라이브러리에서 타겟 언어 및 페르소나와 일치하는 지역 음성을 선택합니다.
  2. 비유창성을 포함하여 자연스러운 음성 스크립트 작성: 최대한 자연스럽게 표현하려면 자연스러운 대화의 비유창성과 망설임 (예: "Oh uh yeah I think... hm, so that's interesting")을 포함하여 text를 실제 음성 스크립트로 작성합니다.
  3. 일반 TTS 먼저 테스트: 먼저 빈 style 필드를 사용하여 스크립트를 합성합니다 (예: Agent Studio). 대부분의 요청에는 style 명령어가 전혀 필요하지 않습니다.
  4. 조정할 때만 짧은 style 프롬프트 추가: 특정 전달 조정이 필요한 차례에만 간결한 style 문자열(예: "casual, friendly" 또는 "muttering, then reassuring")을 추가하고 일관된 기준을 원할 때는 차례 전반에서 정확한 짧은 문자열을 재사용합니다.

멀티턴 대화 및 음성 에이전트

대화형 음성 에이전트 또는 다른 멀티턴 애플리케이션을 빌드할 때 다음 사항을 고려하세요.

  • LLM 텍스트가 도착하면 각 차례에 대해 하나의 TTS 요청을 합니다.
  • 구성된 voice가 차례를 넘나들며 발화자의 ID를 전달하도록 합니다. 각 차례에 긴 페르소나 설명을 다시 전송하지 마세요.
  • style를 비워 두거나 전체 대화에 대해 하나의 짧은 상수 문자열을 전송합니다.
  • style 프롬프트를 강화하는 대신 긴 에이전트 대답을 짧은 차례로 분할합니다.

다음 단계

  • 음성 디자인으로 일관된 캐릭터를 만듭니다.
  • 이전 가이드를 사용하여 이전 모델에 작성된 프롬프트를 업데이트합니다.