muaco Tech Note

Geminideepmind.google

Gemini 3.8 TTS 사용법텍스트 음성 변환과 30초 커스텀 보이스 만들기

Gemini API로 Gemini 3.8 Flash TTS를 불러 글을 음성 파일로 바꾸고, 짧은 녹음으로 제 목소리를 복제해 사용해 보세요.

안녕하세요, muaco입니다.

이 글로 할 수 있는 일

이 글을 따라 하면 내 컴퓨터에 out.wav 파일이 생기고, 재생하면 내가 쓴 문장이 들립니다. 구글이 새로 낸 gemini-3.8-flash-tts 모델을 직접 불러 문장 하나를 WAV 음성 파일로 만듭니다. 이어서 짧은 녹음으로 내 목소리를 복제해 그 목소리로 읽게 합니다.

라디오 방송국을 떠올려 보세요. 원고를 건네면 성우가 읽어서 녹음 파일로 돌려줍니다. Gemini 3.8 TTS가 바로 그 성우입니다.

이처럼 글을 넣으면 목소리로 바꿔 주는 기술을 TTS(텍스트 음성 변환)라고 부릅니다.

미리 갖춰야 할 준비물

  • 구글 계정. Google AI Studio에 처음 들어가면 프로젝트와 API 키가 자동으로 만들어집니다. API 키는 건물 출입증 같은 문자열입니다. 이 키가 있어야 구글 서버가 내 요청을 받아 줍니다.
  • 파이썬. 명령을 적어 두면 컴퓨터가 순서대로 실행해 주는 언어입니다. 최소 버전은 공식 문서에 나와 있지 않습니다.
  • 터미널. 글자로 명령을 쳐서 컴퓨터를 부리는 창. 이 글의 명령은 공식 문서를 따라 macOS·리눅스 터미널을 기준으로 합니다.
  • 사는 곳 확인. 구글 발표에 따르면 AI Studio를 통한 목소리 복제는 일리노이, 텍사스, 유럽경제지역(EEA), 영국, 스위스, 인도에서 쓸 수 없습니다. 다만 API용 개발 문서에는 지역 제한이 따로 적혀 있지 않습니다. 기본 목소리로 읽기는 이와 별개입니다.
  • 요금. 이번에 읽은 공식 문서와 발표문에는 가격이 나와 있지 않습니다. 쓰기 전에 AI Studio에서 요금제부터 확인해 보세요.

모델은 두 가지입니다. 하나는 표현력이 좋은 gemini-3.8-flash-tts, 다른 하나는 많은 양을 싸게 처리하는 gemini-3.8-flash-lite-tts. 둘 다 AI Studio와 Gemini API에서 바로 쓸 수 있습니다.

따라 하기: 첫 음성 만들고 내 목소리 입히기

준비: 열쇠와 도구

따라 하기
  1. Google AI Studio에 로그인한 뒤 API keys 페이지에서 키를 복사합니다. 긴 영문·숫자 문자열이 보이면 제대로 받았습니다.
  2. 터미널을 열고 pip install -U google-genai를 입력하세요. 구글이 만든 파이썬 도구 묶음을 까는 단계입니다. 마지막 줄에 Successfully installed가 보이면 설치가 끝났습니다.
  3. 같은 창에서 export GEMINI_API_KEY="YOUR_API_KEY"를 입력합니다. 따옴표 안에는 복사한 키를 넣으세요. 이렇게 해 두면 코드에 키를 직접 적지 않아도 도구가 알아서 꺼내 씁니다.

기본 목소리로 첫 음성 만들기

따라 하기
  1. 메모장에 아래 코드를 붙여 넣고 tts.py로 저장하세요. 여기서 text는 읽을 문장, style은 말투 지시, voice는 목소리 이름입니다.
import base64
from google import genai

client = genai.Client()

interaction = client.interactions.create( model="gemini-3.8-flash-tts", input=[{ "type": "user_input", "content": [{ "type": "text", "text": "Have a wonderful day!", "annotations": [{ "type": "speech_metadata", "style": "cheerful and friendly", }], }], }], response_format={"type": "audio"}, generation_config={ "speech_config": [ {"voice": "Kore"}, ] }, )

with open("out.wav", "wb") as f: f.write(base64.b64decode(interaction.output_audio.data))

따라 하기
  1. 터미널에서 python tts.py를 실행합니다. 몇 초 뒤 같은 폴더에 out.wav가 생기고, 재생하면 밝은 목소리가 들립니다.
  2. 이번에는 text를 한국어 문장으로 바꿔 다시 돌려 보세요. 모델이 언어를 스스로 알아채므로 따로 설정할 부분이 없습니다. 문서에 따르면 지원 언어는 130개입니다.
  3. "Kore"를 "Puck"이나 "Charon"으로 바꾸면 어떨까요? 기본 목소리는 30개이고, 이름만 바꾸면 성우가 바뀝니다.

내 목소리 복제하기

구글 발표문은 "30초 샘플"이라고 하고, 개발 문서는 10초에서 30초 사이의 자연스러운 말소리를 요구합니다. 녹음 형식으로는 24kHz 모노 16비트 WAV를 권합니다.

따라 하기
  1. 남의 목소리라면 이 단계에서 멈추세요. 목소리 주인이 직접 동의 문장을 읽어야 합니다. 먼저 목소리 주인이 10초에서 30초쯤 편하게 말한 녹음을 reference_speaker.wav로 저장합니다.
  2. 다음으로 같은 사람이 아래 한국어 동의 문장을 또박또박 읽은 녹음을 speaker_consent.wav로 저장하세요. 문서가 정한 필수 문장이므로 토씨 하나도 바꾸지 않습니다.
나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
따라 하기
  1. 아래 코드를 clone.py로 저장하고, 두 WAV 파일과 같은 폴더에서 python clone.py를 실행합니다. 화면에 voice_로 시작하는 ID가 찍히면 성공.
import base64
from google import genai

client = genai.Client()

with open("reference_speaker.wav", "rb") as f: source_b64 = base64.b64encode(f.read()).decode("utf-8")

with open("speaker_consent.wav", "rb") as f: consent_b64 = base64.b64encode(f.read()).decode("utf-8")

replicated_voice = client.voices.create( store=True, voice={ "model": "gemini-3.8-flash-tts", "type": "replicated", "display_name": "Custom Replicated Speaker", "replicated": { "source_audio": { "mime_type": "audio/wav", "data": source_b64, }, "consent_audio": { "mime_type": "audio/wav", "data": consent_b64, }, }, }, )

print(replicated_voice.id)

따라 하기
  1. 마지막으로 tts.py의 {"voice": "Kore"}에서 "Kore" 자리에 방금 받은 voice_... ID를 넣고 다시 돌립니다. out.wav에서 내 목소리가 들리면 끝입니다.

코드가 부담스럽다면 AI Studio의 음성 생성 화면(aistudio.google.com/generate-speech)을 써도 됩니다. 브라우저에서 두 녹음을 올리고, 미리 들어 본 뒤 ID를 복사할 수 있습니다.

막히기 쉬운 세 군데

  • API 키 오류가 뜨고 out.wav가 생기지 않습니다. 이때 뜨는 오류 문구는 공식 문서에 나와 있지 않습니다. 많은 분이 여기서 한 번 멈칫합니다. export로 넣은 키는 그 터미널 창에서만 살아 있어서, 창을 새로 열면 사라집니다. 지금 쓰는 창에서 export 줄을 다시 입력하고 실행해 보세요.
  • 목소리 복제가 거절되거나 메뉴가 보이지 않습니다. 구글 발표에 따르면 AI Studio를 통한 복제는 일부 지역에서 막혀 있습니다. 한국은 목록에 없지만, 계정 지역이 제한 목록에 걸리는지 먼저 확인하세요. 동의 녹음이 문장과 달라 거절될 때의 원인은 문서에 나와 있지 않습니다. 이럴 때는 조용한 곳에서 같은 사람이 문장을 그대로 다시 읽어 올려 보세요.
  • 예전에 받은 voice ID가 먹히지 않습니다. 저장형 목소리(store=True)는 1년, 저장하지 않는 키(store=False)는 7일이 지나면 사라집니다. 저장 한도는 한 프로젝트에 200개까지. 쓰지 않는 목소리는 voices.list()로 확인하고 voices.delete()로 정리하세요.

여기서 더 나아가려면

문장 속에 <laugh>, <sigh> 같은 표시를 넣으면 웃음이나 한숨을 섞어 읽습니다. 두 사람이 주고받는 대화는 어떨까요? speech_config에 "mode": "conversational"을 넣고 목소리 둘을 지정하면 한 번에 만들 수 있습니다.

많은 양을 싸게 돌려야 한다면 모델 이름만 gemini-3.8-flash-lite-tts로 바꿔 비교해 보세요.

이상으로 글 마치겠습니다.

출처

#Gemini 3.8#Gemini API#TTS#텍스트 음성 변환#커스텀 보이스#음성 복제#음성 생성#Google AI Studio

같은 분류의 글