1. 음성 모델 개요

1.1. OpenAI TTS 및 STT 모델 소개

텍스트 음성 변환 (TTS) 모델

OpenAI의 TTS 모델은 텍스트 데이터를 음성 출력으로 변환할 수 있습니다. 이 과정은 텍스트 분석, 음성 합성 알고리즘 적용, 그리고 음질 조정을 포함합니다. 컴퓨터가 모든 쓰여진 텍스트를 읽을 수 있게 해주어 내용을 더 잘 이해하고 접근할 수 있게 합니다. TTS는 시각장애인, 운전자, 또는 누구든지 청취를 통해 정보를 받기를 선호하는 경우에 중요한 기술입니다.

음성-텍스트 (STT) 모델

TTS에 대응하여, STT 모델은 음성 정보를 쓰인 텍스트로 변환할 수 있습니다. 원본 오디오 입력을 처리할 때, STT 시스템은 먼저 음성 감지를 수행하고, 그 다음에 특징 추출을 합니다. 그런 후 음향 및 언어 모델을 사용하여 오디오 신호를 어휘에 매핑하여 텍스트 출력을 생성합니다. STT 기술은 음성 인식, 회의 음성 전사, 그리고 실시간 자막 생성 시나리오에서 널리 사용됩니다.

1.2. 적용 시나리오

  • 블로그 읽어 주기
  • 다국어 음성 생성

3. 텍스트 음성 API

3.1. 빠른 시작

이 섹션에서는 curl 명령어와 Python 클라이언트를 사용하여 텍스트를 빠르게 음성으로 변환하는 방법을 보여줍니다. 개발자이든, 비기술적 사용자이든, API 요청을 보내기만 하면 쉽게 음성 파일을 생성할 수 있습니다.

Curl을 사용하여 요청 보내기

curl 명령행 도구를 사용하여 음성을 생성하려면 다음 단계를 따르세요:

  1. curl이 시스템에 설치되어 있고 유효한 OpenAI API 키가 있는지 확인하십시오.
  2. 다음 curl 명령을 사용하여 텍스트를 음성으로 변환하십시오:
curl https://api.openai.com/v1/audio/speech \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tts-1",
    "input": "오늘은 사람들이 사랑하는 제품을 만드는 좋은 날입니다!",
    "voice": "alloy"
  }' \
  --output speech.mp3

위 명령에서 $OPENAI_API_KEY는 여러분의 API 키를 나타내며, input 필드는 변환하려는 텍스트이고, model 필드는 사용할 음성 모델을 지정하며, voice 파라미터는 음성을 선택합니다. 여기서는 alloy 합금 음성을 선택합니다. 최종 --output 옵션에서는 출력 파일의 이름과 형식을 지정합니다.

Python 클라이언트 사용

만약 파이썬 프로그래밍 언어를 사용하길 원한다면, 다음 코드 예제를 사용할 수 있습니다:

from openai import OpenAI

client = OpenAI()

response = client.audio.speech.create(
    model="tts-1",
    voice="alloy",
    input="오늘은 사람들이 사랑하는 제품을 만드는 좋은 날입니다!"
)

response.stream_to_file("output.mp3")

이 코드 스니펫에서는 openai 라이브러리를 먼저 가져와 OpenAI 클라이언트의 인스턴스를 만듭니다. 그런 다음 audio.speech.create 메소드를 사용하여 모델, 음성, 그리고 변환할 텍스트를 지정한 요청을 보냅니다. 마지막으로, stream_to_file 메소드를 사용하여 생성된 음성 스트림을 파일로 저장합니다.

3.2. 오디오 품질과 음성 선택

프로젝트에 적합한 오디오 품질 모델과 음성을 선택하는 것은 최고의 사용자 경험을 보장하기 위한 중요한 단계입니다. 우리의 API는 오디오 품질 모델로 tts-1tts-1-hd 두 가지 옵션을 제공합니다:

  • tts-1: 낮은 지연 시간을 제공하여 실시간 응용에 적합하지만, 비교적 낮은 오디오 품질을 가집니다.
  • tts-1-hd: 고품질 음성 생성에 적합한 높은 품질의 오디오 출력을 제공합니다.

또한, OpenAI TTS API는 다양한 음성 옵션을 제공합니다:

  • Alloy
  • Echo
  • Fable
  • Onyx
  • Nova
  • Shimmer

프로젝트 요구 사항과 대상 사용자를 고려하여 적절한 음성을 선택하기 위해 다양한 음성 샘플을 테스트할 수 있습니다. 말하는 스타일, 발화 속도, 그리고 강세 등의 요소를 고려하여 적절한 감정과 전문성을 전달하는 음성을 선택할 수 있습니다.

3.3. 지원하는 출력 형식과 언어

OpenAI의 TTS API는 기본적으로 MP3 출력 형식을 사용하지만 다른 여러 오디오 형식을 지원합니다:

  • Opus: 낮은 지연 시간을 가지고 인터넷 스트리밍 및 통신에 적합합니다.
  • AAC: YouTube, Android, 그리고 iOS와 같은 플랫폼에서 선호하는 디지털 오디오 압축에 사용됩니다.
  • FLAC: 오디오 애호가들이 아카이빙을 위해 사용하는 무손실 음성 압축 형식입니다.

언어 지원 측면에서, API는 Whisper 모델을 주로 따르며 다양한 국가 언어를 지원합니다.

3.4. 실시간 오디오 스트리밍 기능

실시간 애플리케이션의 요구를 충족하기 위해, 저희 API는 실시간 오디오 스트리밍을 지원합니다. 아래는 실시간 오디오 스트리밍을 구현하는 Python 예제입니다:

from openai import OpenAI

client = OpenAI()

response = client.audio.speech.create(
    model="tts-1",
    voice="alloy",
    input="안녕, 세상아! 이것은 스트리밍 테스트입니다.",
)

response.stream_to_file("output.mp3")

4. 음성을 텍스트로 변환하는 API

4.1. 빠른 시작

이 섹션에서는 OpenAI의 음성을 텍스트로 변환하는 API의 기능을 주로 소개할 것입니다.

먼저, 유효한 OpenAI API 키를 갖고 있어야 하며 오디오 파일을 준비해야 합니다.

curl 명령어를 사용하여 오디오 파일을 포함한 POST 요청을 보낼 수 있습니다. OPENAI_API_KEY를 여러분의 API 키로 대체하고 올바른 파일 경로를 설정해주세요.

curl --request POST \
  --url https://api.openai.com/v1/audio/transcriptions \
  --header 'Authorization: Bearer OPENAI_API_KEY' \
  --header 'Content-Type: multipart/form-data' \
  --form file=@/path/to/your/audio/file.mp3 \
  --form model=whisper-1

위 명령을 실행한 후, 전사된 텍스트 정보가 포함된 JSON 형식의 응답을 받게 됩니다.

예를 들면:

{
  "text": "이제까지 해봤던 가장 엉뚱한 생각을 상상해보세요. 그리고 그것이 100배, 1,000배 커졌을 때 어떻게 될지 궁금해하고 있습니다..."
}

4.2. 지원되는 파일 형식과 크기

이 API는 다양한 일반적인 오디오 파일 형식을 지원하여 다양한 시나리오에서의 다양한 요구를 충족시킬 수 있습니다. 지원되는 파일 형식에는 mp3, mp4, mpeg, mpga, m4a, wav, webm 등이 포함되며, 이를 통해 사용자들은 다양한 출처의 오디오 파일을 쉽게 처리할 수 있습니다.

파일 크기에 대해서는, 현재 API는 25MB를 초과하지 않는 제한이 있습니다. 이는 오디오 파일이 25MB보다 큰 경우, 해당 파일을 25MB보다 작은 여러 세그먼트로 나누거나 더 효과적인 압축 형식을 사용해야 한다는 것을 의미합니다. 예를 들어, mp3opus 형식은 효율적인 압축을 제공하여 파일 크기를 줄이면서도 오디오 품질을 크게 포기하지 않습니다.

25MB보다 큰 파일을 만나게 된다면, Python의 PyDub 라이브러리를 사용해 오디오를 세그먼트로 나눌 수 있습니다:

from pydub import AudioSegment

audio_file = AudioSegment.from_file("your_large_audio_file.mp3")

interval = 10 * 60 * 1000  # 10분

chunks = make_chunks(audio_file, interval)

for i, chunk in enumerate(chunks):
    chunk_name = f"audio_chunk{i}.mp3"
    chunk.export(chunk_name, format="mp3")

위 코드에서 make_chunks 함수는 큰 오디오 파일을 10분 간격으로 여러 오디오 세그먼트로 나눕니다. 이러한 세그먼트들은 모두 API에서 요구하는 파일 크기 제한 내에 있으며 전사를 위해 개별적으로 OpenAI API에 업로드할 수 있습니다.

PyDub는 우리에게 오디오 파일을 쉽게 다룰 수 있는 방법을 제공하지만, 사용 시 외부 소프트웨어의 보안과 안정성에 특별히 주의할 것을 권장합니다. OpenAI는 외부 소프트웨어에 대한 어떠한 보증도 제공하지 않습니다.