Gemini-TTS는 자연스러움을 넘어 텍스트 기반 프롬프트를 통해 생성된 오디오를 세부적으로 제어하는 최신 버전의 Text-to-Speech 기술입니다. Gemini-TTS를 사용하면 짧은 스니펫부터 긴 형식의 내러티브에 이르기까지 단일 화자나 다중 화자의 음성을 합성하여 스타일, 억양, 속도, 어조, 감정 표현까지 정확하게 표현할 수 있으며 자연어 프롬프트를 통해 이 모든 것을 조정할 수 있습니다.
사용 가능한 모델
Gemini-TTS에는 다음과 같은 사용 가능한 모델이 포함됩니다.
Gemini 2.5 Flash TTS
| 모델 ID | gemini-2.5-flash-tts |
|---|---|
| 최적화 목표 | 비용 효율적인 일상 애플리케이션을 위한 짧은 지연 시간, 제어 가능한 단일 화자 및 다중 화자 Text-to-Speech 오디오 생성 |
| 입력 및 출력 모달리티 |
|
| 화자 번호 지원 | 단일, 다중 화자 |
| 지원되는 출력 오디오 형식* | LINEAR16(기본값), ALAW, MULAW, MP3, OGG_OPUS, PCM |
| 리전 지원 | global |
| 음성 옵션 | 음성 옵션을 참조하세요. |
| 사용 가능한 언어 | 사용 가능한 언어를 참조하세요. |
| 예 |
model: "gemini-2.5-flash-tts"
prompt: "Say the following"
text: "[extremely fast] Availability and terms may vary.
Check our website or your local store for complete
details and restrictions."
speaker: "Kore"
|
Gemini 2.5 Pro TTS
| 모델 ID | gemini-2.5-pro-tts |
|---|---|
| 최적화 목표 | 팟캐스트 생성, 오디오북, 고객 지원 등 정형 워크플로를 위한 높은 제어력 |
| 입력 및 출력 모달리티 |
|
| 화자 번호 지원 | 단일, 다중 화자 |
| 지원되는 출력 오디오 형식* | LINEAR16(기본값), ALAW, MULAW, MP3, OGG_OPUS, PCM |
| 리전 지원 | global |
| 음성 옵션 | 음성 옵션을 참조하세요. |
| 사용 가능한 언어 | 사용 가능한 언어를 참조하세요. |
| 예 |
model: "gemini-2.5-pro-tts"
prompt: "You are having a casual conversation with a friend.
Say the following in a friendly and amused way."
text: "hahah I did NOT expect that. Can you believe it!."
speaker: "Callirrhoe"
|
* batch 전용입니다. streaming는 지원되지 않습니다.
추가 제어
추가 제어 및 기능은 다음과 같습니다.
자연스러운 대화: 우수한 품질의 음성 상호작용, 더욱 적절한 표현력, 리듬 패턴이 매우 짧은 지연 시간으로 제공되므로 유연하게 대화할 수 있습니다.
스타일 제어: 자연어 프롬프트를 사용하여 특정 억양을 채택하고 속삭임을 포함한 다양한 어조와 표현을 생성하도록 조정하여 대화 내에서 전달 방식을 조정할 수 있습니다.
동적 성능: 이러한 모델은 시, 뉴스, 흥미로운 스토리텔링을 표현력 있게 읽어 텍스트에 생기를 불어넣을 수 있습니다. 또한 요청 시 특정 감정으로 연기하고 억양을 생성할 수 있습니다.
향상된 속도 및 발음 제어: 전달 속도를 제어하면 특정 단어를 포함한 발음 정확성을 높일 수 있습니다.
애플리케이션에서 이러한 음성을 사용하는 방법에 대한 자세한 내용은 Gemini-TTS 사용을 참조하세요.
음성 옵션
Gemini-TTS는 기존 Chirp 3: HD 음성과 유사한 다양한 음성 옵션을 제공하며, 각각 고유한 특성이 있습니다.
| 이름 | 성별 | 데모 |
|---|---|---|
| Achernar | 여성 | |
| Achird | 남성 | |
| Algenib | 남성 | |
| Algieba | 남성 | |
| Alnilam | 남성 | |
| Aoede | 여성 | |
| Autonoe | 여성 | |
| Callirrhoe | 여성 | |
| 카론 | 남성 | |
| Despina | 여성 | |
| 엔켈라두스 | 남성 | |
| Erinome | 여성 | |
| Fenrir | 남성 | |
| Gacrux | 여성 | |
| 이아페투스 | 남성 | |
| Kore | 여성 | |
| Laomedeia | 여성 | |
| Leda | 여성 | |
| Orus | 남성 | |
| Pulcherrima | 여성 | |
| Puck | 남성 | |
| Rasalgethi | 남성 | |
| Sadachbia | 남성 | |
| Sadaltager | 남성 | |
| Schedar | 남성 | |
| Sulafat | 여성 | |
| Umbriel | 남성 | |
| Vindemiatrix | 여성 | |
| Zephyr | 여성 | |
| Zubenelgenubi | 남성 |
사용 가능한 언어
Gemini-TTS에서는 다음 언어를 지원합니다.
| 언어 | BCP-47 코드 | 출시 준비 |
|---|---|---|
| 아랍어(이집트) | ar-EG | GA |
| 네덜란드어(네덜란드) | nl-NL | GA |
| 영어(인도) | en-IN | GA |
| 영어(미국) | en-US | GA |
| 프랑스어(프랑스) | fr-FR | GA |
| 독일어(독일) | de-DE | GA |
| 힌디어(인도) | hi-IN | GA |
| 인도네시아어(인도네시아) | id-ID | GA |
| 이탈리아어(이탈리아) | it-IT | GA |
| 일본어(일본) | ja-JP | GA |
| 한국어(대한민국) | ko-KR | GA |
| 마라티어(인도) | mr-IN | GA |
| 폴란드어(폴란드) | pl-PL | GA |
| 포르투갈어(브라질) | pt-BR | GA |
| 루마니아어(루마니아) | ro-RO | GA |
| 러시아어(러시아) | ru-RU | GA |
| 스페인어(스페인) | es-ES | GA |
| 타밀어(인도) | ta-IN | GA |
| 텔루구어(인도) | te-IN | GA |
| 태국어(태국) | th-TH | GA |
| 터키어(터키) | tr-TR | GA |
| 우크라이나어(우크라이나) | uk-UA | GA |
| 베트남어(베트남) | vi-VN | GA |
| 아프리칸스어(남아프리카 공화국) | af-ZA | 미리보기 |
| 알바니아어(알바니아) | sq-AL | 미리보기 |
| 암하라어(에티오피아) | am-ET | 미리보기 |
| 아랍어(전 세계) | ar-001 | 미리보기 |
| 아르메니아어(아르메니아) | hy-AM | 미리보기 |
| 아제르바이잔어(아제르바이잔) | az-AZ | 미리보기 |
| 벵골어(방글라데시) | bn-BD | 미리보기 |
| 바스크어(스페인) | eu-ES | 미리보기 |
| 벨라루스어(벨라루스) | be-BY | 미리보기 |
| 불가리아어(불가리아) | bg-BG | 미리보기 |
| 버마어(미얀마) | my-MM | 미리보기 |
| 카탈로니아어(스페인) | ca-ES | 미리보기 |
| 세부아노어(필리핀) | ceb-PH | 미리보기 |
| 중국어 북경어(중국) | cmn-CN | 미리보기 |
| 중국어 북경어(타이완) | cmn-tw | 미리보기 |
| 크로아티아어(크로아티아) | hr-HR | 미리보기 |
| 체코어(체코) | cs-CZ | 미리보기 |
| 덴마크어(덴마크) | da-DK | 미리보기 |
| 영어(호주) | en-AU | 미리보기 |
| 영어(영국) | en-GB | 미리보기 |
| 에스토니아어(에스토니아) | et-EE | 미리보기 |
| 필리핀어(필리핀) | fil-PH | 미리보기 |
| 핀란드어(핀란드) | fi-FI | 미리보기 |
| 프랑스어(캐나다) | fr-CA | 미리보기 |
| 갈리시아어(스페인) | gl-ES | 미리보기 |
| 조지아어(조지아) | ka-GE | 미리보기 |
| 그리스어(그리스) | el-GR | 미리보기 |
| 구자라트어(인도) | gu-IN | 미리보기 |
| 아이티어(아이티) | ht-HT | 미리보기 |
| 히브리어(이스라엘) | he-IL | 미리보기 |
| 헝가리어(헝가리) | hu-HU | 미리보기 |
| 아이슬란드어(아이슬란드) | is-IS | 미리보기 |
| 자바어(자바) | jv-JV | 미리보기 |
| 칸나다어(인도) | kn-IN | 미리보기 |
| 콘칸어(인도) | kok-IN | 미리보기 |
| 라오스어(라오스) | lo-LA | 미리보기 |
| 라틴어(바티칸 시국) | la-VA | 미리보기 |
| 라트비아어(라트비아) | lv-LV | 미리보기 |
| 리투아니아어(리투아니아) | lt-LT | 미리보기 |
| 룩셈부르크어(룩셈부르크) | lb-LU | 미리보기 |
| 마케도니아어(북마케도니아) | mk-MK | 미리보기 |
| 마이틸리어(인도) | mai-IN | 미리보기 |
| 말라가시어(마다가스카르) | mg-MG | 미리보기 |
| 말레이어(말레이시아) | ms-MY | 미리보기 |
| 말라얄람어(인도) | ml-IN | 미리보기 |
| 몽골어(몽골) | mn-MN | 미리보기 |
| 네팔어(네팔) | ne-NP | 미리보기 |
| 노르웨이어 보크몰(노르웨이) | nb-NO | 미리보기 |
| 노르웨이어 뉘노르스크(노르웨이) | nn-NO | 미리보기 |
| 오리야어(인도) | or-IN | 미리보기 |
| 파슈토어(아프가니스탄) | ps-AF | 미리보기 |
| 페르시아어(이란) | fa-IR | 미리보기 |
| 포르투갈어(포르투갈) | pt-PT | 미리보기 |
| 펀자브어(인도) | pa-IN | 미리보기 |
| 세르비아어(세르비아) | sr-RS | 미리보기 |
| 신디어(인도) | sd-IN | 미리보기 |
| 싱할라어(스리랑카) | si-LK | 미리보기 |
| 슬로바키아어(슬로바키아) | sk-SK | 미리보기 |
| 슬로베니아어(슬로베니아) | sl-SI | 미리보기 |
| 스페인어(라틴 아메리카) | es-419 | 미리보기 |
| 스페인어(멕시코) | es-MX | 미리보기 |
| 스와힐리어(케냐) | sw-KE | 미리보기 |
| 스웨덴어(스웨덴) | sv-SE | 미리보기 |
| 우르두어(파키스탄) | ur-PK | 미리보기 |
Gemini-TTS 사용
Gemini-TTS 모델을 사용하여 단일 화자 및 다중 화자 음성을 합성하는 방법을 알아봅니다.
시작하기 전에
Text-to-Speech를 사용하려면 먼저 다음 단계를 수행하여Google Cloud 콘솔에서 API를 사용 설정해야 합니다.
- 프로젝트에서 Text-to-Speech를 사용 설정합니다.
- Text-to-Speech에 결제가 사용 설정되었는지 확인합니다.
- 개발 환경에 인증을 설정합니다.
Google Cloud 프로젝트 설정
-
기존 프로젝트를 선택하거나 새 프로젝트를 만들 수 있습니다. 프로젝트 만들기에 대한 자세한 내용은 Google Cloud 문서를 참조하세요.
새 프로젝트를 만들면 결제 계정을 연결하라는 메시지가 표시됩니다. 기존 프로젝트를 사용하는 경우 결제를 사용 설정해야 합니다.
프로젝트를 선택하고 결제 계정에 연결하면 Text-to-Speech API를 사용 설정할 수 있습니다. 페이지 상단에 있는 제품 및 리소스 검색 표시줄로 이동하여 'speech'를 입력합니다. 결과 목록에서 Cloud Text-to-Speech API를 선택합니다.
API를 프로젝트에 연결하지 않고 Text-to-Speech를 사용해 보려면 API 사용해 보기 옵션을 선택합니다. 프로젝트에서 사용할 Text-to-Speech API를 사용 설정하려면 사용 설정을 클릭합니다.
개발 환경에 인증을 설정합니다. 자세한 내용은 Text-to-Speech 인증 설정을 참조하세요.
단일 화자 동기 합성 수행
Python
# google-cloud-texttospeech minimum version 2.29.0 is required.
import os
from google.cloud import texttospeech
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
def synthesize(prompt: str, text: str, output_filepath: str = "output.mp3"):
"""Synthesizes speech from the input text and saves it to an MP3 file.
Args:
prompt: Styling instructions on how to synthesize the content in
the text field.
text: The text to synthesize.
output_filepath: The path to save the generated audio file.
Defaults to "output.mp3".
"""
client = texttospeech.TextToSpeechClient()
synthesis_input = texttospeech.SynthesisInput(text=text, prompt=prompt)
# Select the voice you want to use.
voice = texttospeech.VoiceSelectionParams(
language_code="en-US",
name="Charon", # Example voice, adjust as needed
model_name="gemini-2.5-pro-tts"
)
audio_config = texttospeech.AudioConfig(
audio_encoding=texttospeech.AudioEncoding.MP3
)
# Perform the text-to-speech request on the text input with the selected
# voice parameters and audio file type.
response = client.synthesize_speech(
input=synthesis_input, voice=voice, audio_config=audio_config
)
# The response's audio_content is binary.
with open(output_filepath, "wb") as out:
out.write(response.audio_content)
print(f"Audio content written to file: {output_filepath}")
CURL
# Make sure to install gcloud cli, and sign in to your project.
# Make sure to use your PROJECT_ID value.
# The available models are gemini-2.5-flash-tts and gemini-2.5-pro-tts.
# To parse the JSON output and use it directly see the last line of the command.
# Requires JQ and ffplay library to be installed.
PROJECT_ID=YOUR_PROJECT_ID
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: $PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{
"input": {
"prompt": "Say the following in a curious way",
"text": "OK, so... tell me about this [uhm] AI thing."
},
"voice": {
"languageCode": "en-us",
"name": "Kore",
"model_name": "gemini-2.5-flash-tts"
},
"audioConfig": {
"audioEncoding": "LINEAR16"
}
}' \
"https://texttospeech.googleapis.com/v1/text:synthesize" \
| jq -r '.audioContent' | base64 -d | ffplay - -autoexit
자유 형식 텍스트 입력으로 다중 화자 동기 합성 수행
Python
# google-cloud-texttospeech minimum version 2.31.0 is required.
import os
from google.cloud import texttospeech
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
def synthesize_multispeaker_freeform(
prompt: str,
text: str,
output_filepath: str = "output_non_turn_based.wav",
):
"""Synthesizes speech from non-turn-based input and saves it to a WAV file.
Args:
prompt: Styling instructions on how to synthesize the content in the
text field.
text: The text to synthesize, containing speaker aliases to indicate
different speakers. Example: "Sam: Hi Bob!\nBob: Hi Sam!"
output_filepath: The path to save the generated audio file. Defaults to
"output_non_turn_based.wav".
"""
client = texttospeech.TextToSpeechClient()
synthesis_input = texttospeech.SynthesisInput(text=text, prompt=prompt)
multi_speaker_voice_config = texttospeech.MultiSpeakerVoiceConfig(
speaker_voice_configs=[
texttospeech.MultispeakerPrebuiltVoice(
speaker_alias="Speaker1",
speaker_id="Kore",
),
texttospeech.MultispeakerPrebuiltVoice(
speaker_alias="Speaker2",
speaker_id="Charon",
),
]
)
voice = texttospeech.VoiceSelectionParams(
language_code="en-US",
model_name="gemini-2.5-pro-tts",
multi_speaker_voice_config=multi_speaker_voice_config,
)
audio_config = texttospeech.AudioConfig(
audio_encoding=texttospeech.AudioEncoding.LINEAR16,
sample_rate_hertz=24000,
)
response = client.synthesize_speech(
input=synthesis_input, voice=voice, audio_config=audio_config
)
with open(output_filepath, "wb") as out:
out.write(response.audio_content)
print(f"Audio content written to file: {output_filepath}")
CURL
# Make sure to install gcloud cli, and sign in to your project.
# Make sure to use your PROJECT_ID value.
# The available models are gemini-2.5-flash-tts and gemini-2.5-pro-tts
# To parse the JSON output and use it directly see the last line of the command.
# Requires JQ and ffplay library to be installed.
# google-cloud-texttospeech minimum version 2.31.0 is required.
PROJECT_ID=YOUR_PROJECT_ID
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: $PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{
"input": {
"prompt": "Say the following as a conversation between friends.",
"text": "Sam: Hi Bob, how are you?\\nBob: I am doing well, and you?"
},
"voice": {
"languageCode": "en-us",
"modelName": "gemini-2.5-flash-tts",
"multiSpeakerVoiceConfig": {
"speakerVoiceConfigs": [
{
"speakerAlias": "Sam",
"speakerId": "Kore"
},
{
"speakerAlias": "Bob",
"speakerId": "Charon"
}
]
}
},
"audioConfig": {
"audioEncoding": "LINEAR16",
"sampleRateHertz": 24000
}
}' \
"https://texttospeech.googleapis.com/v1/text:synthesize" \
| jq -r '.audioContent' | base64 -d | ffplay - -autoexit
정형 텍스트 입력으로 다중 화자 동기 합성 수행
정형 텍스트 입력이 포함된 다중 화자를 사용하면 인간과 유사한 방식으로 텍스트를 지능적으로 말로 표현할 수 있습니다. 예를 들어 이러한 종류의 입력은 주소와 날짜에 유용합니다. 자유 형식 텍스트 입력은 텍스트를 작성된 그대로 말합니다.
Python
# google-cloud-texttospeech minimum version 2.31.0 is required.
import os
from google.cloud import texttospeech
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
def synthesize_multispeaker_structured(
prompt: str,
turns: list[texttospeech.MultiSpeakerMarkup.Turn],
output_filepath: str = "output_turn_based.wav",
):
"""Synthesizes speech from turn-based input and saves it to a WAV file.
Args:
prompt: Styling instructions on how to synthesize the content in the
text field.
turns: A list of texttospeech.MultiSpeakerMarkup.Turn objects representing
the dialogue turns.
output_filepath: The path to save the generated audio file. Defaults to
"output_turn_based.wav".
"""
client = texttospeech.TextToSpeechClient()
synthesis_input = texttospeech.SynthesisInput(
multi_speaker_markup=texttospeech.MultiSpeakerMarkup(turns=turns),
prompt=prompt,
)
multi_speaker_voice_config = texttospeech.MultiSpeakerVoiceConfig(
speaker_voice_configs=[
texttospeech.MultispeakerPrebuiltVoice(
speaker_alias="Speaker1",
speaker_id="Kore",
),
texttospeech.MultispeakerPrebuiltVoice(
speaker_alias="Speaker2",
speaker_id="Charon",
),
]
)
voice = texttospeech.VoiceSelectionParams(
language_code="en-US",
model_name="gemini-2.5-pro-tts",
multi_speaker_voice_config=multi_speaker_voice_config,
)
audio_config = texttospeech.AudioConfig(
audio_encoding=texttospeech.AudioEncoding.LINEAR16,
sample_rate_hertz=24000,
)
response = client.synthesize_speech(
input=synthesis_input, voice=voice, audio_config=audio_config
)
with open(output_filepath, "wb") as out:
out.write(response.audio_content)
print(f"Audio content written to file: {output_filepath}")
CURL
# Make sure to install gcloud cli, and sign in to your project.
# Make sure to use your PROJECT_ID value.
# The available models are gemini-2.5-flash-tts and gemini-2.5-pro-tts.
# To parse the JSON output and use it directly see the last line of the command.
# Requires JQ and ffplay library to be installed.
# google-cloud-texttospeech minimum version 2.31.0 is required.
PROJECT_ID=YOUR_PROJECT_ID
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: $PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{
"input": {
"prompt": "Say the following as a conversation between friends.",
"multiSpeakerMarkup": {
"turns": [
{
"speaker": "Sam",
"text": "Hi Bob, how are you?"
},
{
"speaker": "Bob",
"text": "I am doing well, and you?"
}
]
}
},
"voice": {
"languageCode": "en-us",
"modelName": "gemini-2.5-flash-tts",
"multiSpeakerVoiceConfig": {
"speakerVoiceConfigs": [
{
"speakerAlias": "Sam",
"speakerId": "Kore"
},
{
"speakerAlias": "Bob",
"speakerId": "Charon"
}
]
}
},
"audioConfig": {
"audioEncoding": "LINEAR16",
"sampleRateHertz": 24000
}
}' \
"https://texttospeech.googleapis.com/v1/text:synthesize" \
| jq -r '.audioContent' | base64 -d | ffplay - -autoexit
Media Studio에서 음성 합성 수행
Google Google Cloud 콘솔의 Media Studio를 사용하여 텍스트 음성 변환 모델을 실험할 수 있습니다. 이 사용자 인터페이스를 사용하여 합성된 오디오를 빠르게 생성하고 듣고 다양한 스타일 지침과 파라미터를 실험할 수 있습니다.
Google Google Cloud 콘솔에서 Vertex AI Studio > Media Studio 페이지로 이동합니다.
미디어 드롭다운에서 음성을 선택합니다.
텍스트 입력란에 음성으로 합성할 텍스트를 입력합니다.
설정 창에서 다음 설정을 구성합니다.
- 모델: 사용하려는 TTS(텍스트 음성 변환) 모델을 선택합니다(예:
Gemini 2.5 Pro TTS). 사용 가능한 모델에 대한 자세한 내용은 TTS(텍스트 음성 변환) 모델을 참조하세요. - 스타일 안내: (선택사항) 선택한 말하기 스타일, 어조, 감정 전달을 설명하는 텍스트 프롬프트를 입력합니다. 이를 통해 모델 성능을 기본 내레이션 이상으로 이끌어낼 수 있습니다. '다큐멘터리에 어울리는 차분하고 전문적인 어조로 낭독해 줘.'를 예시로 들 수 있습니다.
- 언어: 입력 텍스트의 언어와 리전을 선택합니다. 모델에서 선택한 언어와 억양으로 음성을 생성합니다. 예를 들면 영어(미국)입니다.
- 음성: 내레이션에 사용할 사전 정의된 음성을 선택합니다. 목록에는 선택한 모델과 언어에 사용할 수 있는 음성이 포함되어 있습니다(예: Acherner(여성)).
- 모델: 사용하려는 TTS(텍스트 음성 변환) 모델을 선택합니다(예:
선택사항: 고급 옵션 섹션을 펼쳐 기술 오디오 설정을 구성합니다.
- 오디오 인코딩: 출력 오디오 파일 인코딩을 선택합니다.
LINEAR16은 고품질 오디오 처리에 적합한 무손실 비압축 형식입니다.MULAW는 압축 오디오 출력에도 사용 가능합니다. - 오디오 샘플링 레이트: 샘플링 레이트(Hz)를 선택합니다. 이를 통해 오디오 품질이 결정됩니다. 44,100Hz와 같이 값이 높을수록 CD 품질에 해당하는 고음질 오디오를 나타냅니다.
- 속도: 슬라이더를 이동하거나 값을 입력하여 말하기 속도를 조정합니다. 1 미만의 값은 음성 속도를 느리게 하고 1을 초과하는 값은 음성 속도를 빠르게 합니다. 기본값은 1입니다.
- 볼륨 게인(dB): 출력 오디오 볼륨(dB)을 조정합니다. 양수 값은 볼륨을 늘리고 음수 값은 볼륨을 줄입니다. 기본값은 0입니다.
- 오디오 인코딩: 출력 오디오 파일 인코딩을 선택합니다.
텍스트 상자 오른쪽에 있는 전송 아이콘을 클릭하여 오디오를 생성합니다.
생성된 오디오가 미디어 플레이어에 표시됩니다. 재생 버튼을 클릭하여 출력을 듣습니다. 계속해서 설정을 조정하고 필요에 따라 새 버전을 생성할 수 있습니다.
프롬프트 작성 팁
텍스트에서 몰입감이 우수하고 자연스러운 오디오를 만들려면 음성 언어 뉘앙스를 이해하고 이를 스크립트 형식으로 변환해야 합니다. 다음 팁을 활용하면 선택한 어조를 잘 살리고 진정성 있게 들리는 스크립트를 작성할 수 있습니다.
세 가지 음성 제어 레버
가장 예측 가능하고 미묘한 결과를 얻으려면 다음 세 가지 구성요소 모두 원하는 출력과 일치해야 합니다.
스타일 프롬프트 전반적인 감정적 어조와 전달에 대한 주요한 동인입니다. 프롬프트는 전체 음성 세그먼트 컨텍스트를 설정합니다.
예:
You are an AI assistant speaking in a friendly and helpful tone.예:
Narrate this in the calm, authoritative tone of a nature documentary narrator.
텍스트 콘텐츠 합성할 단어의 의미입니다. 스타일 프롬프트와 감정적으로 일치하는 연상 문구를 사용하면 중립적인 느낌의 텍스트보다 훨씬 더 신뢰할 수 있는 결과를 얻을 수 있습니다.
유용한 경우: 겁에 질린 어조를 나타내는 프롬프트는
I think someone is in the house.와 같은 텍스트와 함께 사용할 때 가장 효과적입니다.효과가 반감되는 경우: 겁에 질린 어조의 프롬프트에
The meeting is at 4 PM.과 같은 텍스트를 사용하면 모호한 결과가 생성됩니다.
마크업 태그
[sigh]와 같은 괄호로 묶인 태그는 전반적인 어조 설정보다는 특정 현지화된 작업이나 스타일 수정사항을 삽입하는 데 사용되는 것이 좋습니다. 이러한 태그는 스타일 프롬프트와 텍스트 콘텐츠와 함께 작동합니다.
마크업 태그 가이드
Google 연구에 따르면 괄호로 묶인 마크업 태그는 세 가지 고유한 모드 중 하나로 작동합니다. 태그 모드를 이해해야 태그를 효과적으로 사용할 수 있습니다.
모드 1: 음성이 아닌 소리
마크업은 들을 수 있지만 음성이 아닌 발성(예: 한숨, 웃음)으로 대체됩니다. 태그 자체는 음성으로 출력되지 않습니다. 이러한 기능은 현실적이면서 인간과 유사한 망설임과 반응을 추가하는 데 유용합니다.
| 태그 | 동작 | 신뢰성 | 안내 |
|---|---|---|---|
[sigh] |
한숨 소리를 삽입합니다. | 높음 | 한숨의 감정적 품질은 프롬프트의 영향을 받습니다. |
[laughing] |
웃음 소리를 삽입합니다. | 높음 | 최상의 결과를 얻으려면 구체적인 프롬프트를 사용합니다. 예를 들어 일반적인 프롬프트는 큰 웃음 소리를 생성할 수 있지만 '재미있는 웃음으로 반응해'는 재미있는 웃음 소리를 생성합니다. |
[uhm] |
망설임 소리를 삽입합니다. | 높음 | 더 자연스러운 대화 느낌을 만드는 데 유용합니다. |
모드 2: 스타일 수정자
마크업은 음성으로 출력되지 않지만 이후 음성 전달을 수정합니다. 수정 범위와 기간은 다를 수 있습니다.
| 태그 | 동작 | 신뢰성 | 안내 |
|---|---|---|---|
[sarcasm] |
이후 문구에 비꼬는 어조를 부여합니다. | 높음 | 이 태그는 강력한 수정자입니다. 추상적인 개념이 모델 전달을 성공적으로 조정할 수 있음을 보여줍니다. |
[robotic] |
이후 음성을 로봇 음성처럼 만듭니다. | 높음 | 효과가 전체 문구에 적용될 수 있습니다. 지원 스타일 프롬프트(예: '로봇처럼 말해줘')를 사용하는 것이 좋습니다. |
[shouting] |
이후 음성 볼륨을 높입니다. | 높음 | 스타일이 일치하는 프롬프트(예: '다음 부분을 외쳐')와 소리 지르는 것을 암시하는 텍스트와 결합하면 매우 효과적입니다. |
[whispering] |
이후 음성 볼륨을 줄입니다. | 높음 | 스타일 프롬프트도 명시적인 경우(예: '이 부분을 최대한 조용히 속삭여 줘')에 최고의 결과를 얻을 수 있습니다. |
[extremely fast] |
이후 음성 속도를 높입니다. | 높음 | 면책 조항이나 빠른 속도의 대화에 적합합니다. 필요한 프롬프트 지원이 최소화됩니다. |
모드 3: 발성된 마크업(형용사)
마크업 태그 자체는 단어 음성으로 발성되며 전체 문장의 어조에도 영향을 미칩니다. 이 동작은 일반적으로 감정 형용사에 적용됩니다.
경고: 태그 자체가 음성으로 발성되므로 대부분의 사용 사례에서는 이 모드가 원치 않는 부작용일 가능성이 높습니다. 대신 스타일 프롬프트를 사용하여 이러한 감정적 어조를 설정하는 것이 좋습니다.
| 태그 | 동작 | 신뢰성 | 안내 |
|---|---|---|---|
[scared] |
'무서워'라는 단어가 발성되고 문장에 무서운 어조가 적용됩니다. | 높음 | 성능은 텍스트 콘텐츠에 크게 좌우됩니다. '창문 깨지는 소리가 들렸어'라고 말하면 정말로 무서운 결과가 생성됩니다. 중립적인 문구를 사용하면 '으스스'한 느낌이 들지만 덜 사실적인 결과가 생성됩니다. |
[curious] |
'궁금해'라는 단어가 발성되고 문장에 궁금한 어조가 적용됩니다. | 높음 | 태그 인텐트를 뒷받침하는 질문형 문구를 사용합니다. |
[bored] |
'지루해'라는 단어가 발성되고 문장은 지루하고 단조로운 어조로 전달됩니다. | 높음 | 일상적이거나 반복적인 텍스트와 함께 사용할 때 효과가 가장 좋습니다. |
모드 4: 속도 조절 및 일시중지
이러한 태그는 생성된 오디오에 무음을 삽입하므로 리듬, 타이밍, 속도를 세부적으로 제어할 수 있습니다. 표준 구두점(쉼표, 마침표, 세미콜론)도 자연스러운 일시중지를 만들지만 이러한 태그를 사용하면 더 명시적으로 제어할 수 있습니다.
| 태그 | 동작 | 신뢰성 | 안내 |
|---|---|---|---|
[short pause] |
쉼표와 유사한 짧은 일시중지(250ms까지)를 삽입합니다. | 높음 | 명확성을 높이기 위해 절이나 목록 항목을 구분하는 데 사용합니다. |
[medium pause] |
문장 줄바꿈과 유사한 표준 일시중지(500ms까지)를 삽입합니다. | 높음 | 명확한 문장이나 생각을 구분하는 데 효과적입니다. |
[long pause] |
극적인 효과를 위해 긴 일시중지(1000ms 이상)를 삽입합니다. | 높음 | 극적인 타이밍에 사용합니다. '제 대답은... [long pause] 아니에요.'를 예로 들 수 있습니다. 부자연스럽게 들릴 수 있으므로 과도하게 사용하지 마세요. |
신뢰할 수 있는 결과를 위한 핵심 전략
세 가지 레버 모두 정렬 예측 가능성을 극대화하려면 스타일 프롬프트, 텍스트 콘텐츠, 마크업 태그 모두 의미상 일관되고 같은 목표를 위해 작동하는지 확인합니다.
감정이 풍부한 텍스트 사용 프롬프트와 태그만 사용하지 마세요. 모델에서 사용할 수 있는 풍부하고 설명적인 텍스트를 제공합니다. 이는 특히 비꼬는 감정, 두려움 또는 흥분과 같은 미묘한 감정에 중요합니다.
구체적이고 자세한 프롬프트 작성 스타일 프롬프트가 구체적일수록 더욱 신뢰할 수 있는 결과가 생성됩니다. '재미있는 웃음 소리로 반응해'가
[laughing]보다 낫습니다. '1940년대 라디오 뉴스 앵커처럼 말해 줘'가 '옛날 방식으로 말해 줘'보다 낫습니다.새 태그 테스트 및 확인 새 태그나 테스트되지 않은 태그의 동작은 언제나 예측할 수 있는 것은 아닙니다. 스타일 수정자라고 생각하는 태그가 발성될 수 있습니다. 프로덕션에 배포하기 전에 항상 새 태그나 프롬프트 조합을 테스트하여 동작을 확인합니다.