커스텀 음성 만들기

커스텀 음성 만들기 (Custom voices)

에이전트나 애플리케이션에 고유한 목소리를 입히고 싶다면 커스텀 음성을 만들 수 있어요. 이 음성은 Text to Speech API, Realtime API, 또는 오디오 출력을 지원하는 Chat Completions API에서 오디오 출력용으로 사용할 수 있어요.

커스텀 음성을 만들려면 모델이 따라 하도록 짧은 샘플 오디오 참조를 제공하면 돼요. 자격을 갖춘 고객에게만 커스텀 음성이 제공돼요. 자세한 내용은 영업팀에 문의하시고, 조직에서 활성화되면 Audio 아래의 Voices 탭을 사용할 수 있어요.

출처: 문서

본문

음성 만들기

현재 음성은 API 요청으로만 만들 수 있어요. 전체 API 작업 목록은 API reference를 참조하세요.

음성을 만들려면 두 개의 별도 오디오 녹음이 필요해요.

  1. 동의 녹음 (Consent recording): 아래의 동의 문구 중 하나를 성우가 읽어서, 자신의 목소리로 유사 음성을 만드는 것에 동의한다는 내용을 담아요.
  2. 샘플 녹음 (Sample recording): 모델이 따르려고 하는 실제 오디오 샘플이에요. 동의 녹음과 같은 사람의 목소리여야 해요.

고품질 음성을 만드는 팁

커스텀 음성의 품질은 제공하는 샘플의 품질에 크게 좌우돼요. 녹음 품질을 최적화하면 큰 차이가 생겨요.

  • 메아리가 적은 조용한 공간에서 녹음하세요.
  • 전문 XLR 마이크를 사용하세요.
  • 마이크에서 약 7–8인치 거리를 두고 팝 필터(pop filter)를 사이에 꽂은 채, 그 거리를 일정하게 유지하세요.
  • 모델은 준 그대로를 그대로 복사해요. 톤, 말의 속도, 에너지, 멈춤, 습관까지요. 그러니 원하는 그 목소리를 정확히 녹음하세요. 에너지, 스타일, 억양에서는 내내 일관성을 유지하세요.
  • 오디오 샘플의 작은 변화도 생성된 음성의 품질 차이로 이어질 수 있어요. 여러 예시를 시도해 가장 잘 맞는 것을 찾아보세요.

요구 사항과 제한

  • 한 조직당 최대 20개의 음성을 만들 수 있어요.
  • 오디오 샘플은 30초 이하여야 해요.
  • 오디오 샘플은 mpeg, wav, ogg, aac, flac, webm, mp4 중 하나여야 해요.

추가 이용 약관은 Text-to-Speech Supplemental Agreement를 참조하세요.

음성 동의 만들기

동의 오디오 녹음에는 아래 문구 중 하나만 담아야 해요. 스크립트에서 조금이라도 벗어나면 실패하게 돼요.

언어 문구
de Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass OpenAI diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet.
en I am the owner of this voice and I consent to OpenAI using this voice to create a synthetic voice model.
es Soy el propietario de esta voz y doy mi consentimiento para que OpenAI la utilice para crear un modelo de voz sintética.
fr Je suis le propriétaire de cette voix et j'autorise OpenAI à utiliser cette voix pour créer un modèle de voix synthétique.
hi मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए OpenAI को इस आवाज का उपयोग करने की सहमति देता हूं
id Saya adalah pemilik suara ini dan saya memberikan persetujuan kepada OpenAI untuk menggunakan suara ini guna membuat model suara sintetis.
it Sono il proprietario di questa voce e acconsento che OpenAI la utilizzi per creare un modello di voce sintetica.
ja 私はこの音声の所有者であり、OpenAIがこの音声を使用して音声合成 モデルを作成することを承認します。
ko 나는 이 음성의 소유자이며 OpenAI가 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
nl Ik ben de eigenaar van deze stem en ik geef OpenAI toestemming om deze stem te gebruiken om een synthetisch stemmodel te maken.
pl Jestem właścicielem tego głosu i wyrażam zgodę na wykorzystanie go przez OpenAI w celu utworzenia syntetycznego modelu głosu.
pt Eu sou o proprietário desta voz e autorizo o OpenAI a usá-la para criar um modelo de voz sintética.
ru Я являюсь владельцем этого голоса и даю согласие OpenAI на использование этого голоса для создания модели синтетического голоса.
uk Я є власником цього голосу і даю згоду OpenAI використовувати цей голос для створення синтетичної голосової моделі.
vi Tôi là chủ sở hữu giọng nói này và tôi đồng ý cho OpenAI sử dụng giọng nói này để tạo mô hình giọng nói tổng hợp.
zh 我是此声音的拥有者并授权OpenAI使用此声音创建语音合成模型

그다음 녹음을 API를 통해 업로드해요. 업로드가 성공하면 나중에 참조할 동의 녹음 ID가 반환돼요. 같은 성우가 여러 번 시도할 경우 동의는 여러 음성 생성에 재사용할 수 있어요.

curl https://api.openai.com/v1/audio/voice_consents \
  -X POST \
  -H "Authorization: Bearer ***" \
  -F "name=test_consent" \
  -F "language=en" \
  -F "recording=@$HOME/tmp/voice_consent/consent_recording.wav;type=audio/x-wav"

음성 만들기

이제 동의 녹음 ID를 참조하고 음성 샘플을 제공해서 실제 음성을 만들면 돼요.

curl https://api.openai.com/v1/audio/voices \
  -X POST \
  -H "Authorization: Bearer ***" \
  -F "name=test_voice" \
  -F "audio_sample=@$HOME/tmp/voice_consent/audio_sample_recording.wav;type=audio/x-wav" \
  -F "consent=cons_123abc"

성공하면 만들어진 음성이 Audio 탭 아래에 표시돼요.

음성 생성 중 음성 사용하기

음성 생성은 평소처럼 동작해요. speech 생성 시 voice 파라미터에 음성 ID를 지정하거나, realtime 세션을 시작할 때 지정해 주세요.

Text to speech 예시

curl https://api.openai.com/v1/audio/speech \
  -X POST \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini-tts",
    "voice": {
      "id": "voice_123abc"
    },
    "input": "Maple est le meilleur golden retriever du monde entier.",
    "language": "fr",
    "format": "wav"
  }' \
  --output sample.wav

Realtime API 예시

Ruby를 쓴다면 예시를 실행하기 전에 voice_123을 커스텀 음성 ID로 바꿔 주세요.

const sessionConfig = JSON.stringify({
  session: {
    type: "realtime",
    model: "gpt-realtime-2",
    audio: {
      output: {
        voice: { id: "voice_123abc" },
      },
    },
  },
});
# Replace the illustrative IDs and URLs below with your own resource values.
require "json"

session_config = JSON.generate(
  session: {
    type: "realtime",
    model: "gpt-realtime-2",
    audio: { output: { voice: { id: "voice_123" } } }
  }
)
puts(session_config)

GPT-Live에서 커스텀 음성 사용하기

GPT-Live와 커스텀 음성 생성 모두에 승인된 프로젝트 범위(project-scoped) API 키를 사용하세요. 동의 문구 읽기와 커스텀 음성 사용에는 api.voices.read 권한이 필요하고, 동의와 음성 생성에는 api.voices.write와 커스텀 음성 API 접근이 필요해요. 모든 요청에 같은 프로젝트를 사용하고, API 키는 신뢰할 수 있는 서버에 보관하세요.

녹음 준비하기

녹음 전에 현재 지원되는 동의 문구를 조회해 볼게요.

curl https://api.openai.com/v1/audio/consent_phrases \
  -H "Authorization: Bearer ***"

동의 녹음과 참조 샘플은 같은 사람의 목소리여야 해요. 샘플에는 최소 5초의 실제 발화와 최소 15개의 전사 텍스트 토큰이 있어야 하고, 침묵은 세지 않아요. 여러 개의 완전한 문장이 담긴 10–30초 녹음을 사용하세요. 업로드당 10 MiB로 제한돼요. 서비스가 녹음에서 참조 전사(transcript)를 추출해요.

브라우저 레코더는 오디오를 audio/webm;codecs=opus로 표기할 수 있는데, 업로드 엔드포인트는 이 형식을 거부해요. 업로드를 만들 때는 원본 오디오 바이트를 유지하면서 지원되는 기본 MIME 타입인 audio/webm을 사용해야 해요. 위의 동의와 음성 생성 요청을 사용한 뒤 반환된 음성 ID를 저장하세요.

세션 생성 시 음성 선택하기

커스텀 음성은 { "id": "voice_123" }처럼 객체로 전달해요. "marin" 같은 이름 있는 음성은 문자열을 써요.

gpt-live-1은 영어 억양의 커스텀 음성을 지원해요. 억양을 쓰려면 session.instructions에도 함께 지정하세요. 예를 들어 "Speak British English"나 "Speak Irish English"처럼요. 아래 예시는 영국 영어를 사용하니, 커스텀 음성에 원하는 억양에 맞게 문구를 바꿔 주세요.

초기 세션에 다음 구성을 포함하면 돼요.

{
  "model": "gpt-live-1",
  "instructions": "You are a helpful voice assistant. Speak British English.",
  "audio": { "output": { "voice": { "id": "voice_123" } } }
}

WebRTC를 쓸 때는 애플리케이션 서버가 transport와 함께 이 구성을 JSON session 필드에 넣어 주세요. 서버에 대한 요청은 애플리케이션 자격 증명으로 인증하고, OpenAI API 키는 서버에 보관하세요.

WebSockets을 쓸 때는 첫 session.start 이벤트에 구성을 넣어 주세요. 오디오 스트리밍과 세션 종료는 연결 가이드를 따르세요.

접근과 수명 주기 실패 처리하기

  • 세션 생성 시 음성을 선택하세요. 다른 음성을 쓰려면 새 세션을 시작해야 해요.
  • 삭제되거나 취소된 음성, 다른 프로젝트의 동의, 커스텀 음성 접근 부족은 404로 나타날 수 있어요.
  • 잘못된 오디오, 일치하지 않는 화자, 프로젝트 범위가 아닌 키는 거부돼요.

음성을 만들기 전에 프로젝트의 권한, 녹음 최소 요건, 업로드 제한을 꼭 확인하세요. 세션 설정 요구 사항은 GPT-Live 시작하기 문서를 참고하세요.

더 알아보기 (Learn more)