一架梯子,一头程序猿,仰望星空!
OpenAI开发教程 > 内容正文

学习语音模型(文本转语音、语音转文本)


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客户端

如果你更喜欢使用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="Hello world! This is a streaming test.",
)

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": "Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger.
....
}

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")

# PyDub handles time in milliseconds
# 设定分割的时间间隔
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分钟的音频片段。这些片段均不超过接口要求的文件大小限制,可以单独上传至OpenAI API进行转录。

请注意,虽然PyDub为我们提供一个易于处理音频文件的途径,但还是推荐您在使用任何第三方软件时格外注意其安全性和稳定性。OpenAI并不对第三方软件提供任何保证。


关联主题