ElevenLabs Voice Design API 사례 연구: 언어 학습 앱에서 6개 언어 40개 캐릭터 음성 제작하기
개요: 네이티브 녹음 세션을 대체한 AI 음성 디자인
언어 학습 앱 LinguaPlay는 6개 언어(영어, 스페인어, 프랑스어, 독일어, 일본어, 한국어)에 걸쳐 40개의 고유한 캐릭터 음성을 필요로 했습니다. 기존 방식이라면 각 언어별 원어민 성우 최소 6~7명, 총 40명 이상의 성우 섭외와 스튜디오 녹음이 필요했을 것입니다. ElevenLabs의 Voice Design API, Multilingual v2 모델, 그리고 Emotion Presets를 활용하여 전체 프로세스를 2주 만에 완료하고, 비용을 기존 대비 78% 절감한 사례를 공유합니다.
기술 스택 및 환경 설정
1단계: ElevenLabs SDK 설치
# Python SDK 설치
pip install elevenlabs
또는 Node.js SDK
npm install elevenlabs
2단계: API 키 설정
# 환경 변수 설정 (Linux/Mac)
export ELEVENLABS_API_KEY="YOUR_API_KEY"
# Windows PowerShell
$env:ELEVENLABS_API_KEY="YOUR_API_KEY"
3단계: API 연결 확인
import os
from elevenlabs.client import ElevenLabs
client = ElevenLabs(
api_key=os.getenv("ELEVENLABS_API_KEY")
)
# 사용 가능한 모델 확인
models = client.models.get_all()
for model in models:
print(f"{model.model_id}: {model.name}")
워크플로우: 40개 캐릭터 음성 설계 과정
Step 1 — 캐릭터 프로필 정의
각 캐릭터의 성별, 연령대, 성격 특성, 사용 언어를 매트릭스로 정리했습니다.
| 캐릭터 | 언어 | 성별 | 연령대 | 성격 | 용도 |
|---|---|---|---|---|---|
| Maria | 스페인어 | 여성 | 30대 | 따뜻하고 격려하는 | 기초 회화 튜터 |
| Hans | 독일어 | 남성 | 50대 | 정확하고 진지한 | 문법 설명 |
| Yuki | 일본어 | 여성 | 20대 | 활기차고 친근한 | 일상 대화 연습 |
| Pierre | 프랑스어 | 남성 | 40대 | 우아하고 차분한 | 발음 코치 |
from elevenlabs.client import ElevenLabs
client = ElevenLabs(api_key=“YOUR_API_KEY”)
캐릭터 Maria의 음성 디자인 생성
voice_preview = client.text_to_voice.create_previews(
voice_description=“A warm, encouraging woman in her 30s who speaks Spanish as a native language. Her voice is gentle and patient, like a supportive teacher.”,
text=“Hola, bienvenido a tu lección de español. Hoy vamos a aprender frases útiles para el viaje.”
)
프리뷰 음성 저장 및 확인
for i, preview in enumerate(voice_preview.previews):
with open(f”maria_preview_{i}.mp3”, “wb”) as f:
f.write(preview.audio_base_64) # base64 디코딩 후 저장
print(f”Preview {i}: generated_voice_id = {preview.generated_voice_id}“)
Step 3 — 선택한 프리뷰를 영구 음성으로 저장
# 마음에 드는 프리뷰를 영구 Voice로 생성
voice = client.text_to_voice.create_voice_from_preview(
voice_name="Maria_Spanish_Tutor",
voice_description="Warm female Spanish tutor, 30s, encouraging tone",
generated_voice_id="PREVIEW_VOICE_ID_FROM_STEP2",
labels={
"language": "Spanish",
"character": "Maria",
"use_case": "language_learning"
}
)
print(f"생성 완료: {voice.voice_id}")
Step 4 — Multilingual v2 모델로 다국어 TTS 생성
# 생성된 음성으로 다국어 콘텐츠 생성
audio = client.text_to_speech.convert(
voice_id=voice.voice_id,
model_id="eleven_multilingual_v2",
text="Hola, hoy vamos a practicar los saludos básicos.",
voice_settings={
"stability": 0.5,
"similarity_boost": 0.75,
"style": 0.4,
"use_speaker_boost": True
}
)
# 오디오 파일 저장
with open("maria_lesson_01.mp3", "wb") as f:
for chunk in audio:
f.write(chunk)
print("레슨 오디오 생성 완료")
Step 5 — Emotion Presets를 활용한 감정 표현
# 격려하는 톤의 피드백 음성
encouraging_audio = client.text_to_speech.convert(
voice_id=voice.voice_id,
model_id="eleven_multilingual_v2",
text="¡Muy bien! Tu pronunciación está mejorando mucho.",
voice_settings={
"stability": 0.3, # 낮을수록 감정 표현이 풍부
"similarity_boost": 0.8,
"style": 0.7 # 높을수록 스타일 강조
}
)
# 진지한 교정 톤
correction_audio = client.text_to_speech.convert(
voice_id=voice.voice_id,
model_id="eleven_multilingual_v2",
text="Atención, escucha de nuevo la pronunciación correcta.",
voice_settings={
"stability": 0.7, # 높을수록 안정적이고 차분
"similarity_boost": 0.8,
"style": 0.2 # 낮을수록 중립적
}
)
Step 6 — 배치 처리로 40개 캐릭터 일괄 생성
import json
# 캐릭터 정의 파일 로드
with open("characters.json", "r") as f:
characters = json.load(f)
# 전체 캐릭터 음성 일괄 생성
results = []
for char in characters:
preview = client.text_to_voice.create_previews(
voice_description=char["description"],
text=char["sample_text"]
)
# 첫 번째 프리뷰 자동 선택 (실제로는 수동 검토 권장)
voice = client.text_to_voice.create_voice_from_preview(
voice_name=char["name"],
voice_description=char["description"],
generated_voice_id=preview.previews[0].generated_voice_id,
labels=char["labels"]
)
results.append({
"character": char["name"],
"voice_id": voice.voice_id
})
print(f"✓ {char['name']} 생성 완료")
# 결과 저장
with open("voice_registry.json", "w") as f:
json.dump(results, f, indent=2)
결과 요약
| 항목 | 기존 방식 | Voice Design API |
|---|---|---|
| 소요 기간 | 12~16주 | 2주 |
| 비용 | 약 $45,000 | 약 $9,800 |
| 캐릭터 수정 | 재녹음 필요 | 파라미터 조정 즉시 반영 |
| 새 언어 추가 | 신규 성우 섭외 | 동일 캐릭터로 즉시 확장 |
| 감정 변화 | 성우 디렉션 필요 | voice_settings 조정으로 해결 |
time.sleep(2)를 추가하거나, 비동기 처리를 도입하세요. Enterprise 플랜은 더 높은 rate limit을 제공합니다.- **생성된 음성의 감정이 일정하지 않은 경우:** stability 값을 0.6 이상으로 올리고, 텍스트에 명시적인 감정 마커(느낌표, 쉼표 등)를 활용하세요.- **Multilingual v2에서 언어 혼합 문제:** 하나의 TTS 요청에는 하나의 언어만 사용하세요. 코드 스위칭이 필요한 경우 문장 단위로 분리하여 별도 요청합니다.
## 자주 묻는 질문 (FAQ)
Q1: Voice Design API로 생성한 음성의 상업적 사용이 가능한가요?
네, ElevenLabs의 유료 플랜(Starter 이상)에서 생성한 음성은 상업적으로 사용할 수 있습니다. Voice Design API로 생성한 음성은 완전히 합성된 것이므로 초상권 문제가 없습니다. 다만, 각 플랜의 월간 문자 수 제한과 이용약관을 반드시 확인하세요.
Q2: 40개 캐릭터를 유지 관리할 때 월간 비용은 얼마나 드나요?
Voice Design API로 생성한 음성은 한 번 생성하면 추가 보관 비용이 없습니다. 비용은 실제 TTS 변환(텍스트 → 음성) 시에만 발생하며, Multilingual v2 모델 기준 월 10만 자 내외의 레슨 콘텐츠 업데이트 시 Scale 플랜(월 $99) 정도면 충분합니다. 초기 40개 캐릭터 음성 설계 비용은 별도 과금 없이 프리뷰 생성 횟수만큼 문자 수가 차감됩니다.
Q3: 기존에 녹음한 성우 음성과 AI 생성 음성을 혼합하여 사용할 수 있나요?
가능합니다. ElevenLabs는 Voice Cloning 기능도 제공하므로, 기존 성우 음성을 클로닝하여 AI 생성 음성과 함께 관리할 수 있습니다. 다만 클로닝에는 성우의 명시적 동의가 필요하며, Professional Voice Clone은 Enterprise 플랜에서 최고 품질을 제공합니다. 하이브리드 접근 방식으로 핵심 캐릭터는 클로닝, 보조 캐릭터는 Voice Design API를 활용하는 전략이 효과적입니다.