🦇Open AI音频开发指南

官方文档 好的,我将为您整理一份适合初学者的 OpenAI 文本转语音(Text-to-Speech)官方开发指南的中文解释指引。内容将包括官方文档中的每个部分的简要介绍、示例代码(使用 Python 和 Java),并在最后提供一个完整的开发实例。 请稍等片刻,我整理好后会尽快呈现给您。

OpenAI 文本转语音(TTS)官方文档指南

目录

简介

OpenAI 文本转语音(Text-to-Speech,简称 TTS)API 是一个将文字转换为自然语音的接口。开发者可以通过该 API 提供文本输入,并获取由 AI 模型生成的逼真语音输出。OpenAI 的 TTS 模型当前提供 两种变体

  • TTS-1:标准实时文本转语音模型,优化低延迟,适合实时应用(响应速度更快,但音质相对稍低)。

  • TTS-1-HD:高品质文本转语音模型,优化音质,适合追求高保真音频的场景(音质更高,但生成耗时稍长)。

此外,TTS API 内置了六种预设声音(可选择不同的发音风格或音色),声音名称分别为:alloyechofableonyxnovashimmer。开发者可以从中选择适合应用场景的声音,使生成的语音更符合预期效果。

主要功能和应用场景:

  • 旁白与播客:可以将博客文章、电子书或任意书面内容转换为语音进行旁白。例如,将一篇写好的博客文章转换成有声读物,扩大受众范围。

  • 多语言音频输出:支持多种语言的文本输入,将其转为相应语音输出。语言教师或内容制作者可以用它快速生成多语言的语音课程或素材,避免人工录制多个语言音频的繁琐过程。

  • 实时语音输出(流式):支持流式生成语音,实现近实时的音频输出。这对于需要即时反馈的应用(如语音助手或游戏中的角色对话)非常有用,可以逐步生成并播放音频,减少等待时间、提升交互体验。

注意:根据 OpenAI 的使用政策,使用 TTS 功能的应用需要明确告知用户语音是由 AI 合成的而非真人,以确保用户知情。这在将生成语音用于对外的产品或内容时尤其重要。

准备工作

在开始使用 OpenAI 文本转语音 API 之前,请确保以下准备工作已经完成:

  • OpenAI 账户及 API Key:您需要拥有一个 OpenAI 帐号并开通 API 使用权限(帐号需绑定信用卡或确保有足够的额度)。登录后,在用户面板找到 “API Keys” 选项,创建一个新的密钥(Secret Key)请务必妥善保存该密钥,离开页面后您将无法再次查看它。稍后调用 API 时需要使用此密钥用于身份认证。

  • 开发环境:确保本地已安装开发所需的环境。例如,建议安装 Python 3.7+(如果用 Python 调用),或具备 Java 开发环境(如果用 Java 调用)。也可以直接使用命令行的 curl 工具发送请求。

  • 依赖库(可选):如果使用 Python,可安装 requests 库用于简化 HTTP 调用;如使用 Java,可使用标准库 HttpURLConnection 或第三方 HTTP 客户端。对于演示,我们将主要使用 Python 的 requests 和 Java 原生 HTTP 库进行说明。

准备好以上内容后,就可以开始调用 OpenAI TTS API 来将文字转换为语音了。

基本用法:发送第一个请求

OpenAI TTS API 提供的HTTP端点为 POST https://api.openai.com/v1/audio/speech。请求需要在HTTP头中包含认证信息和内容类型,并在请求体传入必要的参数。最少需要提供的参数有三个:

  • model:使用的模型名称,填写 "tts-1""tts-1-hd"

  • input:要转换为语音的文本字符串。

  • voice:选择的语音名称,例如 "alloy"(默认值一般为 "alloy")。

下面我们通过三种方式演示基本的 API 调用:使用 curl 命令、使用 Python 的 requests 库、以及使用 Java 的 HTTP 请求来完成相同的任务。这些示例会将 "Hello, world!" 这句话转换为语音并获取音频数据。

方法一:使用 cURL 命令行调用

curl https://api.openai.com/v1/audio/speech \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "tts-1",
        "voice": "alloy",
        "input": "Hello, world!"
      }' \
  --output output.mp3

上述命令通过 -H 选项添加认证头,其中将 YOUR_API_KEY 替换为您自己的 API 密钥。请求体(-d 选项部分)包含 JSON 格式的参数。--output output.mp3 用于将返回的音频内容直接保存为文件 output.mp3。执行后,如果请求成功,output.mp3 文件即为生成的语音音频(默认为 MP3 格式)。

方法二:使用 Python (requests 库) 调用

import requests
import json

API_KEY = "你的API密钥"  # 请替换为实际的 API Key
url = "https://api.openai.com/v1/audio/speech"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}
data = {
    "model": "tts-1",
    "voice": "alloy",
    "input": "Hello, world!"
}

response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    # 将返回的二进制音频内容保存为文件
    with open("output.mp3", "wb") as f:
        f.write(response.content)
    print("音频已保存为 output.mp3")
else:
    print(f"请求失败,状态码: {response.status_code}, 响应: {response.text}")

在上述 Python 代码中,我们构建了POST请求,将 modelvoiceinput 作为 JSON 发送。成功后,使用 response.content 获得二进制音频数据并保存为本地文件 output.mp3。请确保网络请求库已安装 (pip install requests)。

方法三:使用 Java 原生 HTTP 调用

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class OpenAITTSExample {
    public static void main(String[] args) throws IOException {
        String apiKey = "你的API密钥";  // 替换为实际 API Key
        URL url = new URL("https://api.openai.com/v1/audio/speech");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Bearer " + apiKey);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);
        // 构造请求 JSON 字符串
        String jsonBody = "{\"model\":\"tts-1\",\"voice\":\"alloy\",\"input\":\"Hello, world!\"}";
        try(OutputStream os = conn.getOutputStream()) {
            os.write(jsonBody.getBytes(StandardCharsets.UTF_8));
        }
        // 读取响应音频数据并保存为文件
        try(InputStream in = conn.getInputStream()) {
            Files.copy(in, Paths.get("output.mp3"));
        }
        System.out.println("音频已保存为 output.mp3");
    }
}

上述 Java 程序使用 HttpURLConnection 手动创建 HTTP 请求,发送 JSON 数据并将返回的音频流保存到 output.mp3 文件。运行该程序后,如无错误,当前目录下将出现生成的语音文件。

以上三种方式都完成了相同的任务:调用 OpenAI TTS API,将文本转换为语音文件。如果请求成功,您现在应该已经获得了一段 "Hello, world!" 的语音音频。

选择模型和语音

OpenAI 提供了两个模型(TTS-1 和 TTS-1-HD)以及六种预设语音供我们选择。根据不同应用需求,我们可以调整这些参数:

  • 模型选择(Model)

    • TTS-1 模型:适用于实时应用,如需要较低延迟的语音对话、语音助手等。它响应速度更快,但音频质量相对于 HD 稍低。

    • TTS-1-HD 模型:适用于高音质要求的场景,例如有声读物、广播等。它输出的语音更加清晰自然,但因为模型更复杂,生成时间略长于 TTS-1。

    模型选择小建议:如果您的应用对响应速度要求高(如即时交互),优先使用标准模型 TTS-1;如果对音质要求更高且可以容忍稍长的等待,考虑使用 TTS-1-HD。

  • 语音选择(Voice):六种语音各有不同的音色和风格:

    • alloy – 默认声音,稳重温和的音色

    • echo – 类似回声效果,清亮青年音色

    • fable讲故事语气的音色

    • onyx – 男性偏低沉的深色音色

    • nova明亮女性音色

    • shimmer闪烁般略带柔和感的音色

    (以上描述为方便理解,并非官方说明词,仅用来帮助初学者区分语音风格。)开发者可以根据场景选择合适的声音,比如教育应用可能选择更温和的声音,而游戏角色可能选用个性更鲜明的声音。

使用不同模型和语音非常简单,只需在请求中调整 modelvoice 参数值。例如,将模型换为高清模型、语音换为 nova 的请求代码:

data = {
    "model": "tts-1-hd",           # 切换为高质量模型
    "voice": "nova",              # 切换为女性风格声音
    "input": "欢迎使用 OpenAI 文本转语音 API!"
}
response = requests.post(url, headers=headers, json=data)
# 处理响应同上...

上例将使用 TTS-1-HD 模型和 Nova 声音来朗读中文句子“欢迎使用 OpenAI 文本转语音 API!”。TTS 模型支持多语言文本输入,虽然每个预设声音主要针对英语优化,但也能以多种语言输出语音。也就是说,您可以传入中文、英文、西班牙文等文本,API 会尝试用所选声音朗读相应语言的内容。事实上,这些语音使用的底层技术与 OpenAI Whisper 模型类似,支持多达二十多种语言的合成。请注意,不同语言的发音可能带有声音自身的语调或口音,但整体能保证可懂度。

输出格式和语速调整

默认情况下,OpenAI TTS API 返回的音频格式为 MP3(MPEG 音频)。MP3 是一种通用格式,体积小且几乎被所有设备支持。但根据应用需求,您可能需要其他格式或特定的音频参数。官方提供了**response_format** 参数,可指定输出格式。支持的格式包括:

  • MP3:默认格式,通用且体积较小,适合大多数场景和设备。

  • AAC:高级音频编码格式,压缩效率高,在 iOS、Android、YouTube 等平台广泛支持。如果需要在应用中平衡质量和文件大小,AAC 是不错的选择。

  • FLAC:无损音频压缩格式,可以在不降低音质的情况下减少文件体积。适合对音质要求极高(例如档案保存)的情况,但文件会比有损格式大。

  • Opus:一种专为网络传输设计的低延迟高压缩格式,可在各种比特率下保持良好音质,适用于实时通信或流媒体音频。

要获得以上不同格式,只需在请求 JSON 中增加 "response_format" 字段。例如,若希望获取无损音质的 FLAC 文件,可以这样设置:

data = {
    "model": "tts-1",
    "voice": "alloy",
    "input": "This is a high quality audio test.",
    "response_format": "flac"   # 指定输出FLAC格式
}
response = requests.post(url, headers=headers, json=data)
with open("output.flac", "wb") as f:
    f.write(response.content)

上例请求了 FLAC 格式的音频,并将结果保存为 output.flac。类似地,可以将 response_format 值改为 "aac""opus" 等以获取对应格式的文件。如果不指定该参数,则默认返回 MP3 格式。

语速调节(Speed):TTS API 还允许通过 speed 参数调整语音的播放速度(语速)。默认值为 1.0 表示正常速度。可以使用小于1的值放慢语速,或大于1的值加快语速。例如,0.8 大概是偏慢的语速(慢20%),1.5 则是偏快的语速(快50%)。可用范围约在 0.5 倍速(减慢一半)到 2.0 倍速(加快一倍)之间。下面是一个将语速降低为80%的示例:

data = {
    "model": "tts-1",
    "voice": "fable",
    "input": "Reading at a slower pace for clarity.",
    "response_format": "mp3",
    "speed": 0.8    # 将语速调慢至原来的80%
}
response = requests.post(url, headers=headers, json=data)
with open("slow_output.mp3", "wb") as f:
    f.write(response.content)

此请求会用 fable 声音以较慢的速度朗读给定文本,从而生成一个名为 slow_output.mp3 的音频文件。在不同场景下(如语音学习应用希望慢速朗读,或提高旁白紧凑度希望快速朗读),speed 参数都可以发挥作用。

小贴士: 调整输出格式和语速可能会影响音频文件大小、质量和用户体验。无损格式音质最佳但文件较大,低速朗读清晰易懂但时长变长,高速朗读可节省时间但可能难以听清。根据具体使用场景选择合适的参数组合,达到最佳平衡。

实时流式音频输出

对于一些互动性强的应用,如语音助手、实时翻译或游戏对话,降低语音输出延迟非常关键。OpenAI TTS 提供了流式生成语音的能力,使得音频可以在文本还未完全转换完时就开始播放,做到边生成边输出,提升实时性。

在默认模式下,调用 /v1/audio/speech 接口会等待整个语音处理完成后一次性返回完整音频文件。如果输入文本较长,这意味着用户需要等待一段时间才能听到语音。而流式输出模式下,API 将分块(chunk)传输音频数据,您的应用可以一边接收数据块一边播放,实现近实时的语音反馈。

要使用流式功能,在编程时需要逐步读取HTTP响应流。例如,在 Python 中,如果使用 OpenAI 提供的官方库,调用 client.audio.speech.create(..., stream=True)(或使用类似 response.iter_content())可以获取一个生成器,不断产出音频数据块。官方 OpenAI Python SDK 的示例:

import openai
openai.api_key = "你的API密钥"

response = openai.Audio.speech_create(
    model="tts-1",
    voice="alloy",
    input="Hello, this is a streaming test.",
    stream=True                   # 启用流式输出
)
with open("streamed_output.mp3", "wb") as f:
    for chunk in response:
        if chunk:  # 持续写入数据块
            f.write(chunk)

上面的示例使用 OpenAI 的 Python 库,通过设置 stream=True 来开启流式输出,然后将返回的音频数据流按块写入文件。当然,实际实时播放时,可在获取到第一个数据块后立即开始播放,同时继续接收后续块,而不是先全部写入文件。

如果不使用官方SDK,您也可以直接使用 requests 库的流式模式(stream=True)处理响应。例如:

response = requests.post(url, headers=headers, json=data, stream=True)
with open("streamed_output.mp3", "wb") as f:
    for chunk in response.iter_content(chunk_size=8192):
        if chunk:
            f.write(chunk)
            # 您可以在这里将chunk送入音频播放缓冲,实现边下边播

通过上述方法,您可以实现边生成边播放。请注意,流式音频主要适用于需要即时反馈的场景,而对于离线批量生成音频的场合,直接获取完整文件更简单。

API 使用限制与定价

在使用 OpenAI 文本转语音 API 时,需要了解一些配额限制和计费标准

  • 请求速率限制:默认情况下,付费账户每分钟最多可调用 50 次 /v1/audio/speech 接口(50 RPM)。如果超过该速率可能会收到限流错误。对于大型应用,可考虑申请更高的限额。

  • 文本长度限制:单次请求的输入文本上限约为 4096 个字符(约合 4KB 文本)。这一长度大约对应 5 分钟左右的语音(在默认语速下)。如果需要转换更长的文本,需要将其分段多次请求,然后将多段音频拼接。

  • 计费方式:TTS 调用的费用按输入文本的字符数计算,不同模型的费率不同:

    • 标准 TTS-1 模型:约 $0.015 美元 / 每 1000 个字符。

    • 高清 TTS-1-HD 模型:约 $0.030 美元 / 每 1000 个字符。

    举例来说,使用标准模型转换一段 1000 字的文本约花费 $0.015,美式单位约等于 1.5 美分;高清模型则约 3 美分/1000字。这个价格相对于人工配音是非常低廉的,平均每分钟语音成本约为 $0.015(标准模型下)。当然,实际费用会根据您的文本长度精确按比例计算。

  • 模型选择与成本考虑:如果您是个人开发者或小型项目、预算有限,建议优先使用标准 TTS-1 模型以降低成本。标准模型已经能提供相当自然的语音效果。只有在对音质要求极高并且有足够预算时,再考虑使用成本较高的 TTS-1-HD 模型。

最后,请留意 OpenAI 定期更新的官方定价信息。上面的价格是撰写本文时的标准费率,未来可能有所调整。

完整开发示例:从 API Key 到语音文件

本节将以一个完整的流程示例,演示如何使用 OpenAI 文本转语音 API 将一段文本转换为音频文件并播放。我们将按步骤说明,从获取 API Key 一直到收听生成的语音。

步骤1:获取 OpenAI API Key 登录 OpenAI 开发者平台(platform.openai.com),点击左侧菜单的“View API keys”(API 密钥)。如果没有现有密钥,点击“Create new secret key”生成一个新的 API Key。复制保存该密钥,在整个使用过程中将用它来验证您的身份。切记不要将 API 密钥公开在客户端代码或版本库中。

步骤2:准备开发环境 确保您的电脑上安装了必要的软件。例如,安装 Python 3 并通过 pip install requests 安装 requests 库用于HTTP请求。如果希望使用 Java,也请确保项目中可以进行 HTTP POST 请求(无需特殊库也可使用标准库)。在此示例中,我们将使用 Python 语言来完成后续步骤。

步骤3:编写代码并发送请求 下面是一个 Python 脚本示例,它将把一小段中文文本转换成语音:

import requests

API_KEY = "在此填写您的API密钥"
url = "https://api.openai.com/v1/audio/speech"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}
data = {
    "model": "tts-1",                   # 使用标准实时模型
    "voice": "alloy",                  # 选择默认的 Alloy 声音
    "input": "今天天气很好,我们来体验一下 OpenAI 的语音合成功能吧!"
}

print("正在请求 OpenAI 文本转语音 API ...")
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    # 将响应的音频内容写入文件
    with open("result.mp3", "wb") as f:
        f.write(response.content)
    print("音频生成成功,已保存为 result.mp3")
else:
    print(f"请求失败,状态码: {response.status_code}")
    print("错误信息:", response.text)

运行上述脚本时,请将 API_KEY 替换为您自己的密钥。脚本会将输入的中文句子发送给 OpenAI TTS API,并将返回的语音保存为 result.mp3。如果在终端看到“音频生成成功”的提示,说明调用成功。

步骤4:播放生成的音频 现在,我们得到了语音文件 result.mp3。您可以通过多种方式播放它:

  • 使用系统默认播放器:直接双击或使用命令行打开 result.mp3 文件。例如在 Windows 上,文件会用默认音乐播放器打开;在 macOS 上,可以用 open result.mp3 命令播放;在 Linux 上使用 xdg-open result.mp3 或类似命令。

  • 使用编程库播放:如果您希望在代码中自动播放音频,可以使用相应语言的音频播放库。例如,在 Python 中可以安装 playsound 库,然后调用 playsound("result.mp3") 播放;Java 中可以使用 JavaFX 或其他音频API来加载 result.mp3 并播放。

在本示例中,我们假定开发者手动打开文件收听。您应该能听到合成的语音朗读了:“今天天气很好,我们来体验一下 OpenAI 的语音合成功能吧!”。恭喜,这表示您已经成功完成了从获取密钥、调用 API 到生成并播放语音的整个流程。


通过上述指南,我们从官方文档出发,逐步介绍了 OpenAI 文本转语音 API 的各个方面:核心概念、如何使用、可调整的参数以及实际的开发流程。希望这些内容对初学者清晰易懂,帮助您顺利将强大的 TTS 功能集成到自己的应用中。祝您在开发中玩转 OpenAI 的语音合成功能!

Last updated