9.2 Audio API를 통한 자연스러운 TTS

OpenAI의 Text-to-Speech(TTS) 기능은 Audio API를 통해 텍스트 기반 응답을 고품질의 자연스러운 음성으로 변환할 수 있도록 지원합니다. 이 기능은 기존의 단조로운 음성 합성과는 달리, 감정과 억양, 문맥을 고려한 사람다운 발화를 생성할 수 있어, 실제 서비스와 애플리케이션에서 실용적인 음성 인터페이스를 구현할 수 있게 해줍니다.

이 절에서는 OpenAI의 Audio API를 이용해 TTS(Text-to-Speech)를 활용하는 방식과, 주요 파라미터, 음성 유형, 실습 예제까지 단계별로 상세히 소개합니다.

9.2.1 OpenAI Audio TTS 개요

OpenAI는 2023년 하반기부터 Audio API를 통해 TTS 기능을 제공합니다. 이는 Whisper를 활용한 STT(Speech-to-Text) 기능과 호환되는 반대 방향의 API로, 개발자는 텍스트를 음성으로 변환하여 사용자에게 오디오 형태로 제공할 수 있습니다.

TTS 기능은 다음과 같은 특징을 가집니다:

  • 다양한 목소리 프리셋 지원 (총 6종의 고품질 음성 제공)

  • 자연스러운 억양과 문장 단위의 발화

  • 빠른 생성 시간 (수백 밀리초~수초 이내)

  • 다양한 언어 지원 (기본적으로 영어 중심이지만, 한국어, 일본어, 프랑스어 등도 지원됨)

9.2.2 Audio TTS API 엔드포인트 및 요청 방식

TTS를 생성하려면 OpenAI의 Audio API의 /v1/audio/speech 엔드포인트를 사용합니다. 이 API는 POST 방식으로 동작하며, 음성화를 원하는 텍스트와 관련 파라미터들을 JSON 본문 또는 폼 데이터로 포함하여 요청합니다.

요청 예시 (Python SDK와 HTTP 방식 제공):

(1) Python SDK 예제

import openai

openai.api_key = "your-api-key"

response = openai.audio.speech.create(
    model="tts-1",
    input="안녕하세요. 오늘 날씨는 맑고 쾌청합니다.",
    voice="nova",
    response_format="mp3"
)

# 생성된 음성 파일 저장
with open("output.mp3", "wb") as f:
    f.write(response.content)

(2) HTTP 직접 호출 예시 (cURL)

curl -X POST https://api.openai.com/v1/audio/speech \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "tts-1",
        "input": "Hello! Welcome to our AI assistant service.",
        "voice": "shimmer",
        "response_format": "mp3"
      }' --output output.mp3

9.2.3 주요 파라미터 설명

파라미터명
설명

model

사용 모델: tts-1 또는 tts-1-hd. tts-1-hd는 고음질 버전으로 더 자연스러운 목소리를 제공함

input

음성으로 변환할 텍스트 문자열 (최대 약 4,096자)

voice

사용할 목소리 프리셋 이름 (alloy, echo, fable, onyx, nova, shimmer)

response_format

출력 포맷: mp3, opus, aac, flac, pcm, wav 등을 지원

speed (선택적)

말하기 속도 (소수값, 기본값 1.0). 예: 0.7은 천천히, 1.3은 빠르게 말함 (일부 모델에서만 지원 예정)

각 voice는 서로 다른 음색과 말투를 갖고 있어 애플리케이션 목적에 따라 적절한 음성을 선택할 수 있습니다.

예를 들어:

  • nova: 따뜻하고 매끄러운 여성 목소리 (추천)

  • onyx: 깊고 중후한 남성 목소리

  • shimmer: 활기차고 생기 있는 목소리

  • alloy: 중성적인 목소리, 설명형 도우미 톤에 적합

9.2.4 다국어 및 한국어 지원

OpenAI의 TTS 모델은 주로 영어에 최적화되어 있지만, 입력 텍스트가 한국어일 경우에도 상당히 자연스럽게 합성됩니다. 예를 들어, 다음과 같은 텍스트에도 높은 수준의 한국어 발음을 확인할 수 있습니다.

response = openai.audio.speech.create(
    model="tts-1",
    input="안녕하세요, GPT 기반 음성 서비스를 안내해드리겠습니다.",
    voice="onyx",
    response_format="mp3"
)

발음 정확도는 영어에 비해 다소 낮을 수 있으나, 인사말, 간단한 안내 문장에서는 충분히 실용성을 갖춥니다.

  • 다국어 지원을 위한 전략:

    • 문장의 문맥을 고려해 문법적으로 올바른 문장을 입력할 것

    • 로마자 표기법이나 혼용을 지양하고 한 언어로 통일할 것

    • 특정 고유명사나 외래어는 명확하게 표기하는 것이 발음 품질 향상에 효과적

9.2.5 음성 합성 결과 저장 및 출력

생성된 오디오는 바이너리 스트림으로 반환됩니다. 따라서 이를 직접 저장하거나 웹앱 및 모바일 앱에서 스트리밍 처리할 수 있습니다.

  • 로컬 저장 (MP3):

    with open("tts_output.mp3", "wb") as f:
        f.write(response.content)
  • Streamlit/Web 앱 연동 (Audio Playback):

    import streamlit as st
    
    st.audio("tts_output.mp3", format="audio/mp3")
  • Web API 응답으로 Base64 인코딩 전송:

    import base64
    
    audio_base64 = base64.b64encode(response.content).decode("utf-8")

9.2.6 활용 사례 예시

TTS 기술은 다양한 서비스에 실시간 음성 인터페이스를 제공할 수 있습니다. 아래는 활용 가능한 몇 가지 시나리오입니다.

  • 📞 고객센터 안내 인트로 메시지 생성

  • 🎙️ 팟캐스트 콘텐츠 자동 음성화

  • 👩‍🏫 교육용 콘텐츠(예: 단어 설명, 강의 요약) 음성 배포

  • 🧑‍💻 시각 약자 대상 정보 전달 보조

  • 🤖 챗봇의 음성 출력 기능

예시: GPT-4로 요약한 문서를 사용자가 들어볼 수 있는 형태로 반환

summary = gpt_call_to_summarize(doc_text)

speech = openai.audio.speech.create(
    model="tts-1",
    input=summary,
    voice="fable",
    response_format="mp3"
)

with open("summary_audio.mp3", "wb") as f:
    f.write(speech.content)

9.2.7 주의사항 및 한계

  • 단어 별 강세 지정 또는 감정 조절은 현재 제한적이며 조정 불가 (SSML 미지원)

  • 실시간 TTS로 응답할 경우 응답 처리 지연 가능성

  • 높은 속도로 다량 호출 시 Rate Limiting에 유의해야 함

  • 한국어의 경우 간혹 어투나 억양이 부자연스러울 수 있음

9.2.8 결론 및 향후 전망

OpenAI의 TTS 기술은 GPT 기반 자연어 생성 능력을 음성으로 확장시키며, 인터페이스 역할의 패러다임을 문자에서 음성으로 넓히는 도구입니다. 아직 다양한 감정 연기나 멀티 톤 제어에는 한계가 있으나, 단순 응답이나 내레이션 중심의 응용에는 매우 효과적인 성능을 보입니다.

향후 API가 SSML(Speech Synthesis Markup Language) 지원을 도입하거나 사용자 맞춤형 보이스 학습 기능이 활성화된다면, 더욱 개인화되고 다이내믹한 음성 서비스를 구축할 수 있게 될 것입니다.

다음 절에서는 이 Audio API와 Whisper의 STT 기능을 조합하여 음성 기반 인터페이스를 구성하는 전체적인 실습 방식에 대해 소개합니다.

Last updated