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