文字转语音
快速开始
音频API提供了基于TTS(文本到语音)模型的语音端点。它配备了6种内置语音,可用于:
- 叙述书面博客文章
- 生成多种语言的口头音频
- 使用流式处理提供实时音频输出
from openai import OpenAI
from pathlib import Path
client = OpenAI(
api_key="sk-#############################",
)
# 设置路径为当前文件夹
speech_file_path = Path(__file__).parent / "speech.mp3"
response = client.audio.speech.create(
model="tts-1",
voice="alloy",
input="床前明月光,疑是地上霜"
)
response.stream_to_file(speech_file_path)
请求参数
参数 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
model | string | 必填 | 可用的TTS模型之一:tts-1 或 tts-1-hd | |
input | string | 必填 | 要生成音频的文本,最大长度为4096个字符 | |
voice | string | 必填 | 生成音频时要使用的语音,支持的语音有:alloy、echo、fable、onyx、nova、shimmer,您可以在文本到语音指南中预览这些语音 | |
response_format | string | 可选 | 默认为mp3 | 音频格式。支持的格式有mp3、opus、aac和flac |
speed | number | 可选 | 默认为1 | 生成音频的速度,选择一个从0.25到4.0的值 |
支持格式
默认情况下,生成 MP3 文件,还提供其他格式,如"opus"、“aac"或"flac”
- Opus:用于互联网流媒体和通信,低延迟。
- AAC:用于数字音频压缩,Android、iOS首选。
- FLAC:用于无损音频压缩,音频爱好者用于存档。
音频质量
对于实时应用程序,tts-1
模型提供了最低的延迟,质量比tts-1-hd
模型低。由于音频生成的方式,tts-1
在某些情况下可能生成具有比tts-1-hd
更多静态的内容。在某些情况下,根据您的听音设备和个人感受,音频可能没有明显的差异。
语音选项
尝试不同的语音(合金、回声、寓言、缟、新星和闪烁),找到一个与您期望的语气和受众相匹配的语音。当前的语音经过了针对英语的优化。
支持的语言
TTS模型通常在语言支持方面遵循Whisper模型。Whisper支持以下语言,并且尽管当前的语音经过了英语的优化,但性能仍然良好:
阿非利卡语、阿拉伯语、亚美尼亚语、阿塞拜疆语、白俄罗斯语、波斯尼亚语、保加利亚语、加泰罗尼亚语、中文、克罗地亚语、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、加利西亚语、德语、希腊语、希伯来语、印地语、匈牙利语、冰岛语、印度尼西亚语、意大利语、日语、卡纳达语、哈萨克语、韩语、拉脱维亚语、立陶宛语、马其顿语、马来语、马拉地语、毛利语、尼泊尔语、挪威语、波斯语、波兰语、葡萄牙语、罗马尼亚语、俄语、塞尔维亚语、斯洛伐克语、斯洛文尼亚语、西班牙语、斯瓦希里语、瑞典语、他加禄语、泰米尔语、泰语、土耳其语、乌克兰语、乌尔都语、越南语和威尔士语。
可以通过以选择的语言提供输入文本来生成这些语言的口头音频。
实时音频流
支持使用块传输编码进行实时音频流,这意味着音频可以在完整文件生成并变得可访问之前就能播放。
response = client.audio.speech.create(
model="tts-1",
voice="alloy",
input="Hello world! This is a streaming test.",
)
response.stream_to_file("output.mp3")
常见问题
- 目前没有直接的机制来控制生成音频的情感输出。一些因素可能会影响输出音频,如大写或语法。
- 不支持这个功能创建自己声音的自定义副本
语音转文字
音频API提供了两个语音转文本的端点,分别是转录(transcriptions)和翻译(translations),基于我们最先进的开源大型Whisper模型。它们可以用于:
- 将音频转录为音频所在的任何语言。
- 将音频翻译并转录成英语。
文件上传目前限制为25 MB,支持以下输入文件类型:mp3、mp4、mpeg、mpga、m4a、wav和webm。
转录
将音频文件转为文字表述
audio_file= open("output.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="text"
)
print(transcript);
Transcription(text='Hello, world. This is a streaming test.')
请求参数
参数 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
file | file | 必填 | 要转录的音频文件,格式如下:flac、mp3、mp4、mpeg、mpga、m4a、ogg、wav或webm | |
model | string | 必填 | 要使用的模型的ID。目前只有whisper-1可用 | |
language | string | 可选 | 输入音频的语言。以ISO-639-1格式提供输入语言将提高准确性和延迟 | |
prompt | string | 可选 | 用于指导模型风格或继续上一音频片段的可选文本。提示应与音频语言匹配 | |
response_format | string | 可选 | 转录输出的格式,选项如下:json、text、srt、verbose_json或vtt | |
temperature | number | 可选 | 默认为0 | 采样温度,在0和1之间。较高的值(如0.8)会使输出更随机,而较低的值(如0.2)会使其更集中和确定性。如果设置为0,模型将使用对数概率自动增加温度,直到达到一定的阈值。 |
翻译
audio_file= open("output.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
print(transcript);
Transcription(text='Hello, world. This is a streaming test.')
目前仅支持翻译成英文。
支持的语言
目前,通过转录和翻译端点,我们支持以下语言:
- 阿非利卡语、阿拉伯语、亚美尼亚语、阿塞拜疆语、白俄罗斯语、波斯尼亚语、保加利亚语、加泰罗尼亚语、中文、克罗地亚语、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、加利西亚语、德语、希腊语、希伯来语、印地语、匈牙利语、冰岛语、印度尼西亚语、意大利语、日语、卡纳达语、哈萨克语、韩语、拉脱维亚语、立陶宛语、马其顿语、马来语、马拉地语、毛利语、尼泊尔语、挪威语、波斯语、波兰语、葡萄牙语、罗马尼亚语、俄语、塞尔维亚语、斯洛伐克语、斯洛文尼亚语、西班牙语、斯瓦希里语、瑞典语、他加禄语、泰米尔语、泰语、土耳其语、乌克兰语、乌尔都语、越南语和威尔士语。
- 虽然底层模型是在98种语言上训练的,但我们只列出了超过50%的词错误率(WER)的语言,这是语音到文本模型准确性的行业标准基准。模型将返回未在以上列表中列出的语言的结果,但质量将较低。
更长的输入
默认情况下,Whisper API仅支持小于25 MB的文件。如果您有一个超过这个大小的音频文件,您需要将其分成小于或等于25 MB的块,或者使用压缩的音频格式。为了获得最佳性能,建议避免在句子中途分割音频,因为这可能导致一些上下文的丢失。
处理这种情况的一种方法是使用PyDub
开源Python包
来拆分音频:
from pydub import AudioSegment
song = AudioSegment.from_mp3("good_morning.mp3")
# PyDub handles time in milliseconds
ten_minutes = 10 * 60 * 1000
first_10_minutes = song[:ten_minutes]
first_10_minutes.export("good_morning_10.mp3", format="mp3")
不保证 PyDub 等第三方软件的可用性或安全性。
提示
可以使用提示来提高Whisper API生成的转录质量。模型将尝试匹配提示的风格,因此如果提示使用大写和标点符号,模型更有可能使用它们。然而,当前的提示系统比我们的其他语言模型更有限,对生成的音频只提供有限的控制。以下是提示如何在不同场景中发挥作用的一些示例:
- 对于模型经常在音频中错误识别的特定单词或缩写词,提示可能非常有帮助。
- 例如,以下提示改善了单词DALL·E和GPT-3的转录,之前它们被写成了“GDP 3”和“DALI”:“这份记录是关于OpenAI的,OpenAI制造了像DALL·E、GPT-3和ChatGPT这样的技术,希望有一天建立一个造福全人类的AGI系统”。
- 为了保留分成段的文件的上下文,您可以用前一段的转录提示模型。这将使转录更准确,因为模型将使用先前音频的相关信息。模型仅会考虑提示的最后224个标记,忽略任何更早的内容。对于多语言输入,Whisper使用自定义分词器。对于仅英语输入,它使用标准GPT-2分词器,两者都可以通过开源的
Whisper Python
包访问。 - 有时模型在转录中可能会跳过标点符号。您可以通过使用包含标点符号的简单提示来避免这种情况:“你好,欢迎来到我的讲座。”
- 模型在音频中还可能省略常见的填充词。如果您想在转录中保留这些填充词,可以使用包含它们的提示:“嗯,让我想想,嗯…好吧,这就是我在想的。”
- 一些语言可以以不同的方式书写,例如简体或繁体中文。模型可能不总是默认使用您想要的转录写作风格。您可以通过使用您首选的写作风格的提示来改进这一点。
提高可用性
使用Whisper
时经常面临的最常见挑战之一是模型通常无法识别不常见的单词或缩写。为了解决这个问题,通过下面不同的技巧提高Whisper
的可靠性:
- 使用可选的提示参数,以传递正确拼写的字典
- 由于
Whisper
没有使用遵循指令的技术进行训练,它更像一个基本的GPT模型。Whisper
只考虑提示的前244个标记。transcribe(filepath, prompt="ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T.")
- 缺点是这种技术仅限于244个字符,因此 SKU列表 需要相对较小,以使其成为可扩展的解决方案。
- 由于
- 使用 GPT-4 进行后处理
- 第二种方法使用 GPT-4 或 GPT-3.5-Turbo 进行后处理,首先通过
system_prompt
变量为 GPT-4 提供指令。system_prompt = "You are a helpful assistant for the company ZyntriQix. Your task is to correct any spelling discrepancies in the transcribed text. Make sure that the names of the following products are spelled correctly: ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T. Only add necessary punctuation such as periods, commas, and capitalization, and use only the context provided." def generate_corrected_transcript(temperature, system_prompt, audio_file): response = client.chat.completions.create( model="gpt-4", temperature=temperature, messages=[ { "role": "system", "content": system_prompt }, { "role": "user", "content": transcribe(audio_file, "") } ] ) return response['choices'][0]['message']['content'] corrected_text = generate_corrected_transcript(0, system_prompt, fake_company_filepath)
- GPT-4 好处
- 能够在转录中纠正许多拼写错误。
- 较大的上下文窗口,比使用
Whisper
的提示参数更具可扩展性,并且更可靠 - 相对于
Whisper
,可以对 GPT-4 进行指导和引导。
- 第二种方法使用 GPT-4 或 GPT-3.5-Turbo 进行后处理,首先通过