大家好,我是渔夫。
今天分享主题,闲着没事找事,使用 Rust 来开发文字转语音这样一个简单需求。
非常简单,我们直接使用 OpenAI 的 Audio 接口,它是可以文本生成对应语音的,直接看代码。
添加环境依赖
开发之前,你需要确保在 Cargo.toml 文件中添加 reqwest 和 serde_json 两个依赖,可以复制粘贴到你的文件中,内容如下。
[dependencies]
serde_json = "1.0"
tokio = { version = "1.36.0", features = ["full"] }
reqwest = { version = "0.12.1", features = ["blocking", "json"] }
也可以使用 cargo 命令来添加依赖,执行以下命令:
cargo add reqwest --features blocking,json
cargo add serde_json
cargo add tokio --features full
快速编码吧
端点speech
接受三个关键输入:模型、应转换为音频的文本以及用于生成音频的语音。
use reqwest::Client;
use serde_json::json;
use std::fs::File;
use std::io::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
// 替换为你的 OpenAI API 密钥
let api_key = "sk-xxx";
let text = "大家好,我是渔夫。很高兴与你一起学习 Rust 语言,加我微信一起讨论吧!";
// TTS 模型: tts-1(普清)、tts-1-hd(高清)
// input: 需要转换成语音的文本,最长支持4096字节
let response = client
.post("https://api.openai.com/v1/audio/speech")
.header("Content-Type", "application/json")
.header("Authorization", format!("Bearer {}", api_key))
.json(&json!({
"model": "tts-1",
"input": text,
"voice": "alloy", // 音色
"speed": 1.5,
}))
.send()
.await?;
let bytes = response.bytes().await?.to_vec();
let mut file = File::create("speech_create_demo.mp3")?;
file.write_all(&bytes)?;
println!("Speech file created successfully!");
Ok(())
}
默认情况下,终端将输出语音音频的 MP3 文件,可以配置为输出当前支持的格式。如使用“opus”、“aac”、“flac”和“pcm”等其他格式,可以参考官网。
输出不同音色
你还可以输出不同的音色,GPT 提供了 6 种,你可以修改 voice 来实现,alloy、echo、fable、onyx、nova、shimmer 开发过程根据自己喜欢来选择吧!
输出不同语速
OpenAI 的 Audio 接口是可以调节不同语速的,可以根据实际情况来选择。提供的语速取值范围:0.25 - 4.0,默认为 1.0,你只需要添加 speed 属性即可实现。
.json(&json!({
"model": "tts-1",
"input": text,
"voice": "shimmer",
"speed": 1.5,
}))
其他语言版本
如果你是使用 Python,可以参考以下代码:
import openai
# 设置 OpenAI API 密钥
api_key = "sk-xxxx"
openai.api_key = api_key
# 指定需要转换为语音的文本和语音模型
text = "안녕하세요, 저는 어부입니다!" # 您想要转换为语音的文本,使用韩语
voice = "alloy" # 选择语音模型,可以是 "alloy" 或其他合适的语音模型
# 调用 OpenAI TTS API,生成语音文件
speech_response = openai.Audio.create_speech(
model="tts-1", # TTS模型:tts-1(普清)、tts-1-hd(高清)
input=text,
voice=voice,
)
# 将生成的语音文件保存到本地
with open("speech_create_demo3.mp3", "wb") as file:
file.write(speech_response.content)
推荐阅读:
参考资料:
-
https://platform.openai.com/docs/guides/speech-to-text/quickstart
-
https://platform.openai.com/docs/guides/text-to-speech
我是渔夫,现在在国内某某云程序员,业余独立开发者,探索副业,生活、技术、非科班转码经验等相关文章,欢迎关注,和渔夫一起成长。