텍스트 음성 변환
텍스트 음성 변환 (Text to speech)
Audio API는 GPT-4o mini TTS(텍스트 음성 변환) 모델을 기반으로 한 speech 엔드포인트를 제공해요. 11개의 내장 음성이 있고 다음과 같은 용도로 쓸 수 있어요.
- 작성한 블로그 글을 나레이션
- 여러 언어로 말하는 오디오 생성
- 스트리밍으로 실시간 오디오 출력
출처: 문서
본문
우리의 usage policies은 최종 사용자에게 듣고 있는 TTS 음성이 AI가 생성한 것이며 인간 음성이 아니라는 명확한 고지를 제공할 것을 요구해요.
Quickstart
speech 엔드포인트는 세 가지 핵심 입력을 받아요.
간단한 요청 예시를 볼게요.
from pathlib import Path
from openai import OpenAI
client = OpenAI()
speech_file_path = Path(__file__).parent / "speech.mp3"
with client.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="coral",
input="Today is a wonderful day to build something people love!",
instructions="Speak in a cheerful and positive tone.",
) as response:
response.stream_to_file(speech_file_path)
기본적으로 엔드포인트는 말한 오디오의 MP3를 출력하지만, 지원되는 형식 중 원하는 형식으로 설정할 수 있어요.
텍스트 음성 변환 모델
지능적인 실시간 앱에는 gpt-4o-mini-tts 모델을 쓰세요. 가장 새롭고 신뢰할 수 있는 텍스트 음성 변환 모델이에요. 모델을 프롬프트해 말하기의 여러 측면을 제어할 수 있어요. 억양, 감정 범위, 인토네이션, 인상을 흉내 내기, 말 속도, 톤, 속삭임처럼요. 다른 텍스트 음성 변환 모델은 tts-1과 tts-1-hd예요. tts-1은 tts-1-hd보다 지연이 낮지만 품질도 낮아요.
음성 옵션
TTS 엔드포인트는 텍스트가 어떻게 말로 렌더링될지 제어하는 13개의 내장 음성을 제공해요. OpenAI.fm에서 이 음성들을 들어보고 실험해 볼 수 있어요. 음성은 현재 영어에 최적화되어 있어요. alloy, ash, ballad, coral, echo, fable, nova, onyx, sage, shimmer, verse, marin, cedar가 있어요. 최고 품질을 원하면 marin이나 cedar를 권장해요.
음성 가용성은 모델에 따라 달라요. tts-1과 tts-1-hd 모델은 더 작은 세트(alloy, ash, coral, echo, fable, onyx, nova, sage, shimmer)를 지원해요. Realtime API를 쓴다면 사용 가능한 음성 세트가 약간 다르다는 점을 유의하세요. 현재 실시간 음성은 realtime conversations 가이드를 참고하세요.
실시간 오디오 스트리밍
Speech API는 chunk transfer encoding으로 실시간 오디오 스트리밍을 지원해요. 즉 전체 파일이 생성·접근 가능해지기 전에 오디오를 재생할 수 있어요.
import asyncio
from openai import AsyncOpenAI
from openai.helpers import LocalAudioPlayer
openai = AsyncOpenAI()
async def main() -> None:
async with openai.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="coral",
input="Today is a wonderful day to build something people love!",
instructions="Speak in a cheerful and positive tone.",
response_format="pcm",
) as response:
await LocalAudioPlayer().play(response)
if __name__ == "__main__":
asyncio.run(main())
가장 빠른 응답 시간을 원한다면 wav나 pcm을 response format으로 권장해요.
지원되는 출력 형식
기본 response format은 mp3지만 opus, wav 같은 다른 형식도 사용할 수 있어요.
- MP3: 일반 용도의 기본 response format.
- Opus: 인터넷 스트리밍·통신용, 낮은 지연.
- AAC: 디지털 오디오 압축용, YouTube·Android·iOS가 선호.
- FLAC: 무손실 오디오 압축용, 오디오 애호가가 보관용으로 선호.
- WAV: 압축되지 않은 WAV 오디오, 디코딩 오버헤드를 피하려는 낮은 지연 앱에 적합.
- PCM: WAV와 비슷하지만 헤더 없이 24kHz(16비트 부호, 리틀엔디언) 원시 샘플을 담음.
지원되는 언어
TTS 모델은 언어 지원에서 일반적으로 Whisper 모델을 따르고, 음성이 영어에 최적화돼 있음에도 Whisper 지원 언어들에서 잘 수행해요. Afrikaans, Arabic, Armenian, Azerbaijani, Belarusian, Bosnian, Bulgarian, Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, Galician, German, Greek, Hebrew, Hindi, Hungarian, Icelandic, Indonesian, Italian, Japanese, Kannada, Kazakh, Korean, Latvian, Lithuanian, Macedonian, Malay, Marathi, Maori, Nepali, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swahili, Swedish, Tagalog, Tamil, Thai, Turkish, Ukrainian, Urdu, Vietnamese, Welsh가 있어요. 원하는 언어로 입력 텍스트를 제공하면 그 언어로 말하는 오디오를 생성할 수 있어요.
커스텀 음성
발화자의 동의 녹음과 일치하는 오디오 샘플로 승인된 커스텀 음성을 만들 수 있어요. 자격, 녹음 요구사항, 동의 문구, API 요청은 Custom voices를 참고하세요. Create a custom voice를 따라 음성을 만들고, 음성 생성 시 만든 음성 ID를 전달해 사용해요.