Geminideepmind.google
Gemini 3.8 TTS 사용법텍스트 음성 변환과 30초 커스텀 보이스 만들기
Gemini API로 Gemini 3.8 Flash TTS를 불러 글을 음성 파일로 바꾸고, 짧은 녹음으로 내 목소리를 복제해 써 봐요.
안녕하세요, muaco입니다.
이 글로 할 수 있는 일
라디오 방송국을 떠올려 봐요. 원고를 건네면 성우가 읽어서 녹음 파일로 돌려줘요. Gemini 3.8 TTS가 딱 그 성우예요. 글을 넣으면 목소리로 바꿔 주는 기술을 TTS(텍스트 음성 변환)라고 불러요.
이 글에서는 구글이 새로 낸 gemini-3.8-flash-tts 모델을 직접 불러요. 문장 하나를 WAV 음성 파일로 만들고 이어서 짧은 녹음으로 내 목소리를 복제해 그 목소리로 읽게 해요. 끝나면 내 컴퓨터에 out.wav 파일이 생기고 재생하면 내가 쓴 문장이 들려요.
미리 갖춰야 할 준비물
- 구글 계정. 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에서 바로 쓸 수 있어요.
따라 하기: 첫 음성 만들고 내 목소리 입히기
준비: 열쇠와 도구
- Google AI Studio에 로그인하고 API keys 페이지에서 키를 복사해요. 키가 긴 영문·숫자 문자열로 보이면 제대로 받은 거예요.
- 터미널을 열고
pip install -U google-genai를 쳐요. 구글이 만든 파이썬 도구 묶음을 까는 단계예요. 마지막 줄에 Successfully installed가 보이면 끝났어요. - 같은 창에서
export GEMINI_API_KEY="YOUR_API_KEY"를 쳐요. 따옴표 안에는 복사한 키를 넣어요. 이렇게 해 두면 코드에 키를 직접 적지 않아도 도구가 알아서 꺼내 써요.
기본 목소리로 첫 음성 만들기
- 메모장에 아래 코드를 붙여 넣고
tts.py로 저장해요.text는 읽을 문장,style은 말투 지시,voice는 목소리 이름이에요.
import base64 from google import genaiclient = 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))
- 터미널에서
python tts.py를 쳐요. 몇 초 뒤 같은 폴더에out.wav가 생기고 재생하면 밝은 목소리가 들려요. text를 한국어 문장으로 바꿔 다시 돌려 봐요. 모델이 언어를 스스로 알아채서 따로 설정할 게 없어요. 문서에 따르면 130개 언어를 지원해요."Kore"를"Puck"이나"Charon"으로 바꿔 봐요. 기본 목소리는 30개이고 이름만 바꾸면 성우가 바뀌어요.
내 목소리 복제하기
구글 발표문은 "30초 샘플"이라고 하고 개발 문서는 10초에서 30초 사이의 자연스러운 말소리를 요구해요. 녹음은 24kHz 모노 16비트 WAV를 권해요.
- 남의 목소리라면 이 단계에서 멈춰요. 목소리 주인이 직접 동의 문장을 읽어야 해요. 목소리 주인이 10초에서 30초쯤 편하게 말한 녹음을
reference_speaker.wav로 저장해요. - 같은 사람이 아래 한국어 동의 문장을 또박또박 읽은 녹음을
speaker_consent.wav로 저장해요. 문서가 정한 필수 문장이라 토씨를 바꾸지 않아요.
나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
- 아래 코드를
clone.py로 저장하고 두 WAV 파일과 같은 폴더에서python clone.py를 쳐요. 화면에voice_로 시작하는 ID가 찍히면 성공이에요.
import base64 from google import genaiclient = 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)
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로 바꿔 비교해 봐요.
이상으로 글 마치겠습니다.