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. 자연스러운 구어체 스크립트 작성(유창성 문제 포함): 최대한 자연스럽게 text를 실제 구어체 스크립트로 작성합니다. 여기에는 자연스러운 대화의 유창성 문제와 망설임(예: "Oh uh yeah I think... hm, so that's interesting")이 포함됩니다.
  3. 일반 TTS 먼저 테스트: 먼저 빈 style 필드로 스크립트를 합성합니다. 대부분의 요청에는 style 명령어가 전혀 필요하지 않습니다.
  4. 조정을 위해서만 짧은 style 프롬프트 추가: 특정 제공 조정이 필요한 턴에만 간결한 style 문자열(예: "casual, friendly" 또는 "muttering, then reassuring")을 추가하고 일관된 기준을 원하는 경우 턴 전반에서 정확히 동일한 짧은 문자열을 재사용합니다.

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

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

  • LLM 텍스트가 도착하면 각 턴에 대해 하나의 TTS 요청을 합니다.
  • 구성된 voice가 턴 간에 화자의 ID를 전달하도록 합니다. 매 턴마다 긴 페르소나 설명을 다시 보내지 마세요.
  • style을 비워 두거나 전체 대화에 대해 짧은 상수 문자열 하나를 보냅니다.
  • style 프롬프트를 강화하는 대신 긴 상담사 응답을 더 짧은 턴으로 분할합니다.

다음 단계

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