NLP(一百一十一)OpenAI中的语音模型初探

本文将会介绍OpenAI中的模型系列模型,包括语音转文本(Text to Speech),文本转语音(Speech to Text)以及语音多模态(Audio Generation)模型。

笔者初次接触语音模型,因此首先接触下OpenAI中的语音模型。本文将会介绍OpenAI中的模型系列模型,包括语音转文本(Text to Speech, TTS),文本转语音(Speech to Text, STT)以及语音多模态(Audio Generation)模型。

本文中的两个演示音频文件来自网站:https://funaudiollm.github.io/ ,内容截图如下:

audio1.png
audio2.png

语音转文本(TTS)

语音转文本(TTS,Text to Speech)是一种将语音信号转换为对应文本的技术,广泛应用于语音助手、字幕生成和智能客服等领域。

OpenAI官方TTS API只有Whisper-1模型可以使用。

Python代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))


audio_file = open("./style6.wav", "rb")
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)

print(transcription.text)

laughter2.wav 输出文本:

他搞的一个恶作剧 让大家人尽不尽

style6.wav 输出文本:

I win really struggling to stay calm right now because what you did was totally out of line.

文本转语音(STT)

文本转语音(TTS,Text-to-Speech)是一种将文本转换为自然语音的技术,广泛应用于语音助手、无障碍阅读和智能播报等领域。

OpenAI的STT API内置了六种语音(voice)模式。

Python代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

text = "Hi, Nice weather today. Shall we go out for a walk?"

response = client.audio.speech.create(
model="tts-1",
voice="alloy",
input=text,
)

response.write_to_file("output.mp3")

语音多模态(Audio Generation)

OepnAI的语音多模态模型(GPT-4o audio系列)接受语音输入或输出,支持多模态(语音、文本)。它支持的模式如下:

  • Text in → text + audio out
  • Audio in → text + audio out
  • Audio in → text out
  • Text + audio in → text + audio out
  • Text + audio in → text out

Text + audio in → text out模式为例,Python代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# -*- coding: utf-8 -*-
# 用途: 使用OpenAI的gpt-4o-audio-preview模型对音频文件进行打分
import os
import base64
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

# Fetch the audio file and convert it to a base64 encoded string
audio_file = "style6.wav"
with open(audio_file, "rb") as f:
wav_data = f.read()
encoded_string = base64.b64encode(wav_data).decode("utf-8")
# encoded_string = base64.b64encode(wav_data).decode('utf-8')

completion = client.chat.completions.create(
model="gpt-4o-audio-preview",
modalities=["text"],
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "对下面的音频文件进行打分,综合考虑音频说话内容和情感语气等因素,给出你的评价。"
"分数为0-1之间的一位小数,0代表消极评价,1代表积极评价。"
"输出结果为json格式,里面包含score和reason字段,其中score为评分,reason为评价理由。"
},
{
"type": "input_audio",
"input_audio": {
"data": encoded_string,
"format": "wav"
}
}
]
},
]
)

print(completion.choices[0].message.content)

输出结果如下:

{"score": 0.3, "reason": "The speaker expressed strong negative emotions and frustration, indicating a negative experience or interaction."}

以``模式为例,Python代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# -*- coding: utf-8 -*-
# @place: Pudong, Shanghai
# @file: audio_generation_audio_out.py
# @time: 2025/3/1 21:55
# 用途: 使用OpenAI的gpt-4o-audio-preview模型对音频文件进行打分
import os
import base64
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

# Fetch the audio file and convert it to a base64 encoded string
audio_file = "laughter2.wav"
with open(audio_file, "rb") as f:
wav_data = f.read()
encoded_string = base64.b64encode(wav_data).decode("utf-8")
# encoded_string = base64.b64encode(wav_data).decode('utf-8')

completion = client.chat.completions.create(
model="gpt-4o-audio-preview",
modalities=["text", "audio"],
audio={"voice": "alloy", "format": "wav"},
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "这段音频文件中的内容和说话语气是怎样的?"
},
{
"type": "input_audio",
"input_audio": {
"data": encoded_string,
"format": "wav"
}
}
]
},
]
)

# save to audio file
audio_file_out = "audio_out.wav"
with open(audio_file_out, "wb") as f:
wav_bytes = base64.b64decode(completion.choices[0].message.audio.data)
f.write(wav_bytes)

将此段语音转化为文本,内容如下:

这段音频文件中的内容是描述某人搞了一个恶作剧 出乎意料地让大家陷入惊讶的情景 从语气来看 应该是略带调侃和幽默的感觉

总结

本文介绍了OpenAI的语音模型,包括语音转文本(TTS)、文本转语音(STT)以及语音多模态(Audio Generation)。

其中,TTS使用Whisper-1模型将音频转换为文本,STT则利用OpenAI的API将文本合成自然语音,并支持多种语音模式。此外,文章还探讨了GPT-4o audio系列的多模态能力,能够接受文本和音频输入,并生成文本或语音输出。通过具体的Python代码示例,展示了如何调用这些模型进行语音转换、评分和语气分析等任务。

欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。


NLP(一百一十一)OpenAI中的语音模型初探
https://percent4.github.io/NLP(一百一十一)OpenAI中的语音模型初探/
作者
Jclian91
发布于
2025年4月27日
许可协议