ElevenLabs API 케이스 스터디: 인디 게임 스튜디오가 48시간 만에 200+ NPC 대사를 생성한 방법
개요: 전통적 성우 캐스팅의 한계를 넘어서
인디 게임 스튜디오에게 수백 개의 NPC 대사를 녹음하는 것은 예산과 시간 모두에서 치명적인 병목입니다. 성우 섭외, 스튜디오 예약, 녹음 세션 조율, 후반 편집까지 일반적으로 수 주가 소요됩니다. 이 케이스 스터디에서는 가상의 인디 스튜디오 “PixelForge”가 ElevenLabs Projects API, Voice Design 프리셋, Pronunciation Dictionary를 활용해 48시간 안에 200개 이상의 NPC 대사를 생성한 전체 워크플로우를 다룹니다.
1단계: 환경 설정 및 SDK 설치
Python SDK 설치
pip install elevenlabs
API 키 설정
# .env 파일
ELEVENLABS_API_KEY=YOUR_API_KEYimport osfrom elevenlabs.client import ElevenLabs
client = ElevenLabs( api_key=os.getenv(“ELEVENLABS_API_KEY”) )
CLI를 통한 빠른 테스트
# 사용 가능한 음성 목록 확인
curl -X GET "https://api.elevenlabs.io/v1/voices" \
-H "xi-api-key: YOUR_API_KEY" | python -m json.tool
2단계: Voice Design으로 NPC 캐릭터 음성 설계
전통적 방식에서는 각 NPC마다 성우를 캐스팅해야 하지만, Voice Design API를 사용하면 텍스트 프롬프트로 고유한 음성을 즉시 생성할 수 있습니다.
from elevenlabs.client import ElevenLabs
client = ElevenLabs(api_key=“YOUR_API_KEY”)
늙은 대장장이 NPC 음성 생성
blacksmith_voice = client.text_to_voice.create_previews(
voice_description=“An old, gruff Korean blacksmith with a deep, raspy voice. He speaks slowly and deliberately, with warmth underneath his rough exterior.”,
text=“이 검은 내가 만든 최고의 작품이야. 함부로 다루지 마라.”
)
젊은 마법사 NPC 음성 생성
mage_voice = client.text_to_voice.create_previews(
voice_description=“A young, enthusiastic female mage. Her voice is bright, energetic, and slightly high-pitched with an intellectual tone.”,
text=“이 주문서에 적힌 룬 문자를 해독했어요! 놀라운 발견이에요!”
)
프리뷰 중 마음에 드는 음성을 선택하여 라이브러리에 저장합니다.
# 프리뷰에서 선택한 음성을 라이브러리에 저장
saved_voice = client.text_to_voice.create_voice_from_preview(
voice_name=“NPC_Blacksmith_Old”,
voice_description=“늙은 대장장이”,
generated_voice_id=blacksmith_voice.previews[0].generated_voice_id
)
print(f”저장된 음성 ID: {saved_voice.voice_id}“)
3단계: Pronunciation Dictionary로 게임 고유 용어 처리
판타지 게임에는 고유 지명, 마법 이름, 종족명 등 일반 TTS가 잘못 발음하는 단어가 많습니다. Pronunciation Dictionary로 이를 해결합니다.
# pronunciation_rules.pls (PLS 형식)
# 발음 사전 업로드 with open("pronunciation_rules.pls", "rb") as f: pronunciation_dict = client.pronunciation_dictionary.add_from_file( file=f, name="PixelForge_Fantasy_Terms", description="판타지 RPG 고유 용어 발음 사전" )
print(f”사전 ID: {pronunciation_dict.id}”) print(f”등록된 규칙 수: {pronunciation_dict.version_id}“)
4단계: Projects API로 대량 대사 일괄 생성
핵심 단계입니다. Projects API를 사용하면 스프레드시트 기반 대사 목록을 한 번에 처리할 수 있습니다.
import csv
import time
NPC 대사 CSV 로드 (npc_id, voice_id, line_text)
def batch_generate_dialogue(csv_path):
with open(csv_path, “r”, encoding=“utf-8”) as f:
reader = csv.DictReader(f)
lines = list(reader)
print(f"총 {len(lines)}개 대사 처리 시작...")
results = []
for i, line in enumerate(lines):
audio = client.text_to_speech.convert(
voice_id=line["voice_id"],
text=line["line_text"],
model_id="eleven_multilingual_v2",
pronunciation_dictionary_locators=[{
"pronunciation_dictionary_id": "YOUR_DICT_ID",
"version_id": "YOUR_VERSION_ID"
}],
voice_settings={
"stability": 0.5,
"similarity_boost": 0.75,
"style": 0.3
}
)
output_path = f"output/{line['npc_id']}_{i:04d}.mp3"
with open(output_path, "wb") as out:
for chunk in audio:
out.write(chunk)
results.append(output_path)
if (i + 1) % 20 == 0:
print(f" 진행: {i + 1}/{len(lines)}")
time.sleep(1) # Rate limit 준수
return results
generated = batch_generate_dialogue(“npc_dialogues.csv”)
print(f”완료: {len(generated)}개 오디오 파일 생성”)
CSV 파일 구조 예시
| npc_id | voice_id | line_text |
|---|---|---|
| blacksmith_01 | voice_abc123 | 이 검은 내가 만든 최고의 작품이야. |
| mage_01 | voice_def456 | 아르카니움의 힘을 느낄 수 있어요? |
| guard_01 | voice_ghi789 | 이 구역은 통행이 금지되어 있다. |
import osdef validate_outputs(output_dir): files = [f for f in os.listdir(output_dir) if f.endswith(“.mp3”)] issues = [] for f in files: path = os.path.join(output_dir, f) size = os.path.getsize(path) if size < 1024: # 1KB 미만이면 비정상 issues.append(f”빈 파일 의심: {f} ({size} bytes)”)
print(f"총 파일: {len(files)}, 문제 파일: {len(issues)}") for issue in issues: print(f" ⚠ {issue}")
validate_outputs(“output/“)
성과 비교
| 항목 | 전통적 성우 방식 | ElevenLabs API 방식 |
|---|---|---|
| 소요 시간 | 3~4주 | 48시간 |
| 200대사 비용 | ₩5,000,000+ | 월 구독료 내 처리 |
| 캐릭터 수정 | 재녹음 필요 (추가 비용) | 파라미터 조정 후 재생성 |
| 발음 교정 | 성우 디렉팅 필요 | 사전 업데이트 즉시 반영 |
| 확장성 | 성우별 일정 조율 | API 호출 즉시 확장 |
| 오류 | 원인 | 해결 방법 |
|---|---|---|
401 Unauthorized | API 키가 잘못되었거나 만료됨 | .env 파일의 키 확인. 대시보드에서 키 재발급. |
429 Too Many Requests | Rate limit 초과 | 요청 사이에 time.sleep(1) 추가. 배치 사이즈 축소. |
422 Unprocessable Entity | 텍스트가 비어있거나 너무 긴 경우 | 대사당 5,000자 이내로 유지. 빈 문자열 필터링 추가. |
| 발음이 부자연스러운 경우 | 게임 고유 용어 미등록 | Pronunciation Dictionary에 IPA 또는 별칭 규칙 추가. |
| 음성 톤이 일관되지 않음 | stability 값이 너무 낮음 | stability를 0.6~0.8로 올리고 seed 값을 고정하세요. |
Q1: ElevenLabs로 생성한 음성을 상업용 게임에 사용해도 되나요?
네, ElevenLabs의 유료 플랜(Starter 이상)에서 생성한 음성은 상업적 용도로 사용할 수 있습니다. 단, 반드시 해당 시점의 이용약관을 확인하세요. Voice Design으로 생성한 합성 음성과 자신의 목소리로 클론한 음성 모두 상업 라이선스가 적용됩니다.
Q2: 한국어 NPC 대사 품질을 높이려면 어떤 모델을 사용해야 하나요?
eleven_multilingual_v2 모델이 한국어에 가장 적합합니다. 이 모델은 29개 언어를 지원하며, 한국어의 억양과 발음을 자연스럽게 처리합니다. 텍스트에 한글과 영문이 혼합된 경우에도 문맥에 따라 적절하게 발음합니다.
Q3: 200개 대사 생성에 API 크레딧이 얼마나 필요한가요?
크레딧은 생성된 문자 수 기준으로 차감됩니다. 평균 NPC 대사가 3050자라고 가정하면, 200개 대사는 약 6,00010,000자입니다. Scale 플랜(월 $99) 기준 200만 자가 포함되므로 충분히 커버됩니다. 프로토타입 단계에서는 Starter 플랜(월 $5)으로도 초기 테스트가 가능합니다.