使用OpenAI文本转语音(Text to Speech)详解

使用OpenAI文本转语音(Text to Speech)详解

学习如何将文本转换为逼真的语音音频。

音频API提供了一个基于GPT-4o mini TTS(文本到语音)模型的speech端点。它内置了11种声音,可用于:

  • 为书面博客文章配音
  • 生成多种语言的语音音频
  • 使用流式传输提供实时音频输出

以下是"alloy"声音的示例效果:

根据我们的使用政策,您需要向最终用户明确披露他们听到的TTS语音是AI生成的,而非人类声音。

快速入门

speech端点需要三个关键输入:

  1. 您正在使用的模型
  2. 要转换为音频的文本
  3. 用于输出语音的声音

在开始使用之前,您可以通过API中转站网站了解更多相关配置和使用技巧。

下面是一个简单的请求示例:

从输入文本生成语音音频

import fs from "fs";
import path from "path";
import OpenAI from "openai";

const openai = new OpenAI({
  baseURL: "https://api.aaaaapi.com/v1"
});
const speechFile = path.resolve("./speech.mp3");

const mp3 = await openai.audio.speech.create({
  model: "gpt-4o-mini-tts",
  voice: "coral",
  input: "今天是个很棒的日子,可以去创造一些人们喜爱的东西!",
  instructions: "用愉快和积极的语气说话。",
});

const buffer = Buffer.from(await mp3.arrayBuffer());
await fs.promises.writeFile(speechFile, buffer);
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    base_url="https://api.aaaaapi.com/v1"
)
speech_file_path = Path(__file__).parent / "speech.mp3"

with client.audio.speech.with_streaming_response.create(
    model="gpt-4o-mini-tts",
    voice="coral",
    input="今天是个很棒的日子,可以去创造一些人们喜爱的东西!",
    instructions="用愉快和积极的语气说话。",
) as response:
    response.stream_to_file(speech_file_path)
curl https://api.aaaaapi.com/v1/audio/speech \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini-tts",
    "input": "今天是个很棒的日子,可以去创造一些人们喜爱的东西!",
    "voice": "coral",
    "instructions": "用愉快和积极的语气说话。"
  }' \
  --output speech.mp3

默认情况下,该端点输出语音音频的MP3格式,但您可以将其配置为输出任何支持的格式

文本转语音模型

对于智能实时应用,使用gpt-4o-mini-tts模型,这是我们最新、最可靠的文本转语音模型。您可以通过提示来控制语音的各个方面,包括:

  • 口音
  • 情感范围
  • 语调
  • 印象
  • 语速
  • 语气
  • 低语

我们的其他文本转语音模型是tts-1tts-1-hdtts-1模型提供较低的延迟,但质量低于tts-1-hd模型。

声音选项

TTS端点提供11种内置声音,用于控制文本到语音的渲染方式。您可以在OpenAI.fm(我们的交互式演示,用于尝试OpenAI API中最新的文本转语音模型)中聆听和试用这些声音。目前这些声音针对英语进行了优化。

  • alloy
  • ash
  • ballad
  • coral
  • echo
  • fable
  • nova
  • onyx
  • sage
  • shimmer

如果您使用实时API,请注意可用的声音集略有不同——请参阅实时对话指南了解当前的实时声音。

流式实时音频

语音API支持使用分块传输编码进行实时音频流式传输。这意味着可以在生成完整文件并可访问之前播放音频。

将输入文本的语音音频直接流式传输到扬声器

import OpenAI from "openai";
import { playAudio } from "openai/helpers/audio";

const openai = new OpenAI({
  baseURL: "https://api.aaaaapi.com/v1"
});

const response = await openai.audio.speech.create({
  model: "gpt-4o-mini-tts",
  voice: "coral",
  input: "今天是个很棒的日子,可以去创造一些人们喜爱的东西!",
  instructions: "用愉快和积极的语气说话。",
  response_format: "wav",
});

await playAudio(response);
import asyncio

from openai import AsyncOpenAI
from openai.helpers import LocalAudioPlayer

openai = AsyncOpenAI(
    base_url="https://api.aaaaapi.com/v1"
)

async def main() -> None:
    async with openai.audio.speech.with_streaming_response.create(
        model="gpt-4o-mini-tts",
        voice="coral",
        input="今天是个很棒的日子,可以去创造一些人们喜爱的东西!",
        instructions="用愉快和积极的语气说话。",
        response_format="pcm",
    ) as response:
        await LocalAudioPlayer().play(response)

if __name__ == "__main__":
    asyncio.run(main())
curl https://api.aaaaapi.com/v1/audio/speech \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini-tts",
    "input": "今天是个很棒的日子,可以去创造一些人们喜爱的东西!",
    "voice": "coral",
    "instructions": "用愉快和积极的语气说话。",
    "response_format": "wav"
  }' | ffplay -i -

为了获得最快的响应时间,我们建议使用wavpcm作为响应格式。

支持的输出格式

默认响应格式是mp3,但也支持其他格式,如opuswav

  • MP3:适用于一般用例的默认响应格式。
  • Opus:用于互联网流式传输和通信,延迟低。
  • AAC:用于数字音频压缩,被YouTube、Android、iOS优先采用。
  • FLAC:用于无损音频压缩,受到音频爱好者的青睐,适合存档。
  • WAV:未压缩的WAV音频,适用于低延迟应用,可避免解码开销。
  • PCM:与WAV类似,但包含24kHz(16位有符号,小端)的原始样本,没有头部。

支持的语言

TTS模型在语言支持方面通常遵循Whisper模型。Whisper支持以下语言,并且表现良好,尽管声音是针对英语优化的:

Afrikaans、阿拉伯语、亚美尼亚语、阿塞拜疆语、白俄罗斯语、波斯尼亚语、保加利亚语、加泰罗尼亚语、中文、克罗地亚语、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、加利西亚语、德语、希腊语、希伯来语、印地语、匈牙利语、冰岛语、印度尼西亚语、意大利语、日语、卡纳达语、哈萨克语、韩语、拉脱维亚语、立陶宛语、马其顿语、马来语、马拉地语、毛利语、尼泊尔语、挪威语、波斯语、波兰语、葡萄牙语、罗马尼亚语、俄语、塞尔维亚语、斯洛伐克语、斯洛文尼亚语、西班牙语、斯瓦希里语、瑞典语、他加禄语、泰米尔语、泰语、土耳其语、乌克兰语、乌尔都语、越南语和威尔士语。

您可以通过提供所选语言的输入文本,生成这些语言的语音音频。

定制化和所有权

自定义声音

我们不支持自定义声音或创建您自己声音的副本。

谁拥有输出?

与我们API的所有输出一样,创建它们的人拥有输出。您仍然需要告知最终用户,他们听到的是AI生成的音频,而不是真人在与他们交谈。

posted @ 2025-08-04 13:07  大A就是我  阅读(197)  评论(0)    收藏  举报