이 페이지에서는 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."
- 턴 1 (화자 A):
- 중복되고 인터리브된 음성: 여러 파이프 세그먼트를 사용하여 동시 음성을 시뮬레이션합니다. 이 기능은
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에 연령, 성별, 이름 또는 영구적인 억양 변화를 넣지 마세요. 대신 확장 음성 라이브러리에서 지역 음성을 선택하거나 음성 디자인으로 음성을 만드세요.
권장 워크플로
- 캐릭터를 한 번 빌드: 음성 디자인에서 캐릭터를 만들거나 타겟 언어 및 페르소나와 일치하는 확장 음성 라이브러리에서 지역 음성을 선택합니다.
- 자연스러운 구어체 스크립트 작성(유창성 문제 포함): 최대한 자연스럽게
text를 실제 구어체 스크립트로 작성합니다. 여기에는 자연스러운 대화의 유창성 문제와 망설임(예:"Oh uh yeah I think... hm, so that's interesting")이 포함됩니다. - 일반 TTS 먼저 테스트: 먼저 빈
style필드로 스크립트를 합성합니다. 대부분의 요청에는style명령어가 전혀 필요하지 않습니다. - 조정을 위해서만 짧은
style프롬프트 추가: 특정 제공 조정이 필요한 턴에만 간결한style문자열(예:"casual, friendly"또는"muttering, then reassuring")을 추가하고 일관된 기준을 원하는 경우 턴 전반에서 정확히 동일한 짧은 문자열을 재사용합니다.
멀티턴 대화 및 음성 에이전트
대화형 음성 에이전트 또는 기타 멀티턴 애플리케이션을 빌드할 때 다음 사항을 고려하세요.
- LLM 텍스트가 도착하면 각 턴에 대해 하나의 TTS 요청을 합니다.
- 구성된
voice가 턴 간에 화자의 ID를 전달하도록 합니다. 매 턴마다 긴 페르소나 설명을 다시 보내지 마세요. style을 비워 두거나 전체 대화에 대해 짧은 상수 문자열 하나를 보냅니다.style프롬프트를 강화하는 대신 긴 상담사 응답을 더 짧은 턴으로 분할합니다.