🤖AI/ML

TTS

Text-to-Speech / 음성 합성

텍스트를 자연스러운 음성으로 변환하는 AI 기술. 접근성, 음성 어시스턴트, 오디오북, 콘텐츠 내레이션 등 다양한 분야에서 활용됩니다.

📖 상세 설명

TTS(Text-to-Speech)는 문자 텍스트를 음성으로 변환하는 기술입니다. 입력된 텍스트를 분석하여 자연스러운 발음, 억양, 리듬을 가진 음성을 생성합니다. 현대 AI 기반 TTS는 딥러닝을 활용하여 사람과 구분하기 어려울 정도로 자연스러운 음성을 만들어냅니다.

TTS 기술의 발전은 크게 세 세대로 나뉩니다. 1세대는 규칙 기반 합성으로 로봇 같은 음성을 생성했습니다. 2세대는 녹음된 음성 단위를 연결하는 연결 합성(Concatenative) 방식으로 자연스러움이 개선되었습니다. 3세대는 딥러닝 기반으로, Tacotron, WaveNet, VITS 등의 모델이 혁신적인 품질을 달성했습니다.

현대 TTS 시스템은 주로 두 단계로 작동합니다. 첫째, 텍스트 분석 단계에서 입력 텍스트를 음소(phoneme)로 변환하고 운율 정보를 예측합니다. 둘째, 음성 합성 단계에서 멜 스펙트로그램을 생성하고 보코더(vocoder)가 이를 오디오 파형으로 변환합니다. 최신 모델인 VITS는 이 과정을 end-to-end로 처리하여 더 빠르고 자연스러운 결과를 제공합니다.

TTS는 접근성(시각 장애인용 스크린 리더), 음성 어시스턴트(Siri, Alexa), 오디오북 제작, 콜센터 자동 응답, 교육 콘텐츠, AI 비디오(Synthesia) 등 광범위하게 활용됩니다. 최근에는 음성 복제(Voice Cloning) 기술과 결합하여 특정 인물의 목소리를 재현하는 것도 가능해졌습니다.

💻 코드 예제

다양한 TTS 라이브러리 및 API 사용 예제입니다.

# TTS 활용 예제 - 다양한 방법
import os

# ===== 1. OpenAI TTS API =====
from openai import OpenAI

client = OpenAI()

def openai_tts(text: str, voice: str = "alloy", output_file: str = "speech.mp3"):
    """
    OpenAI TTS API 사용
    voices: alloy, echo, fable, onyx, nova, shimmer
    """
    response = client.audio.speech.create(
        model="tts-1",  # tts-1 (빠름) 또는 tts-1-hd (고품질)
        voice=voice,
        input=text
    )
    response.stream_to_file(output_file)
    print(f"생성 완료: {output_file}")

# 사용 예시
# openai_tts("안녕하세요, KAITRUST AI 백과사전입니다.", "nova")

# ===== 2. Google Cloud TTS =====
from google.cloud import texttospeech

def google_tts(text: str, language: str = "ko-KR", output_file: str = "output.mp3"):
    """Google Cloud TTS - 고품질 한국어 지원"""
    client = texttospeech.TextToSpeechClient()

    synthesis_input = texttospeech.SynthesisInput(text=text)

    voice = texttospeech.VoiceSelectionParams(
        language_code=language,
        ssml_gender=texttospeech.SsmlVoiceGender.FEMALE
    )

    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3,
        speaking_rate=1.0,  # 0.25 ~ 4.0
        pitch=0.0  # -20.0 ~ 20.0
    )

    response = client.synthesize_speech(
        input=synthesis_input, voice=voice, audio_config=audio_config
    )

    with open(output_file, "wb") as out:
        out.write(response.audio_content)
    print(f"생성 완료: {output_file}")

# ===== 3. 오픈소스 TTS (Coqui TTS) =====
# pip install TTS
from TTS.api import TTS

def coqui_tts(text: str, output_file: str = "coqui_output.wav"):
    """무료 오픈소스 TTS - 로컬 실행"""
    # 사용 가능한 모델 목록: TTS.list_models()
    tts = TTS(model_name="tts_models/ko/css10/vits")  # 한국어 모델

    tts.tts_to_file(
        text=text,
        file_path=output_file
    )
    print(f"생성 완료: {output_file}")

# ===== 4. Edge TTS (무료, Microsoft) =====
# pip install edge-tts
import edge_tts
import asyncio

async def edge_tts_generate(text: str, voice: str = "ko-KR-SunHiNeural"):
    """Microsoft Edge TTS - 무료, 고품질"""
    communicate = edge_tts.Communicate(text, voice)
    await communicate.save("edge_output.mp3")
    print("생성 완료: edge_output.mp3")

# 한국어 음성: ko-KR-SunHiNeural (여성), ko-KR-InJoonNeural (남성)
# asyncio.run(edge_tts_generate("안녕하세요, 테스트입니다."))

# ===== 5. 비교 테이블 출력 =====
print("=" * 60)
print("TTS 서비스 비교")
print("=" * 60)
print(f"{'서비스':<15} {'비용':<20} {'품질':<10} {'한국어'}")
print("-" * 60)
print(f"{'OpenAI TTS':<15} {'$15/1M chars':<20} {'우수':<10} {'O'}")
print(f"{'Google TTS':<15} {'$4~16/1M chars':<20} {'최상':<10} {'O'}")
print(f"{'Edge TTS':<15} {'무료':<20} {'우수':<10} {'O'}")
print(f"{'Coqui TTS':<15} {'무료(로컬)':<20} {'양호':<10} {'O'}")

📊 성능 & 비용

주요 TTS 서비스 비교 (2025년 1월 기준)

서비스비용특징한국어
OpenAI TTS$15/1M 문자6개 음성, 빠른 생성지원
Google Cloud TTS$4~16/1M 문자WaveNet, Neural2, 400+ 음성최고 품질
Amazon Polly$4~16/1M 문자NTTS, 표준, 60+ 언어지원
ElevenLabs$5~330/월음성 복제, 감정 표현지원
Edge TTS무료Microsoft Azure 기반고품질
Coqui TTS무료(오픈소스)로컬 실행, 커스텀VITS 모델

* ElevenLabs: 음성 복제 시 추가 비용 발생
* 실시간 스트리밍 TTS는 추가 요금이 적용될 수 있음

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"오디오북 자동화에 TTS 도입하려고 합니다. 한국어 품질은 Google Cloud TTS의 Wavenet이 가장 자연스럽고, 비용 절감이 필요하면 Edge TTS가 무료로 쓸만해요. 월 100만 자 기준 Google이 $4~16 정도입니다."
💬 면접에서
"현대 TTS는 Tacotron2 + HiFi-GAN 조합이나 VITS 같은 end-to-end 모델을 씁니다. Tacotron은 텍스트에서 멜 스펙트로그램을 생성하고, 보코더가 이를 오디오로 변환합니다. VITS는 이걸 단일 모델로 처리해서 더 빠르고 자연스러워요."
💬 기술 토론에서
"음성 복제(Voice Cloning)는 ElevenLabs가 가장 앞서 있어요. 30초 샘플로도 꽤 비슷하게 복제됩니다. 다만 동의 없는 음성 복제는 법적 문제가 될 수 있으니 주의해야 합니다."

⚠️ 흔한 실수 & 주의사항

음성 복제 윤리 문제
타인의 음성을 무단으로 복제하거나 사기에 활용하면 법적 책임이 발생합니다. Voice Cloning 사용 시 반드시 본인 동의를 받으세요.
긴 텍스트 한 번에 처리
대부분의 TTS API는 문자 수 제한이 있습니다 (OpenAI: 4096자). 긴 텍스트는 청크로 나누고 자연스럽게 연결해야 합니다.
올바른 접근법
1) SSML 태그로 발음, 휴지, 강조 제어, 2) 문장 단위로 청크 분할, 3) 캐싱으로 반복 요청 비용 절감, 4) 무료 서비스로 프로토타입 후 상용 서비스 결정.

🔗 관련 용어

📚 더 배우기