唠嗑
这个实现蛮简单的,就是请求一个API而已,然后我就用claude协助我做了个语音生成的插件,主要是我自己python没怎么学的,全靠大模型在支撑着,但还好,基本都能看懂,慢慢来~
插件代码直接去仓库,然后我这里放一个简单的demo代码~
本来我想用那个说话很好听的音色的..但发现API就支持这几种~
没用官方库做的原因,好像是我用的版本0.28.0没有适配,哈哈,所以直接API请求吧,懒得切版本~
项目地址:https://github.com/uluckyXH/VoiceReply-plugins
官方文档(音色介绍和库调用文档):https://platform.openai.com/docs/guides/text-to-speech/quickstart
官方文档(API文档):https://platform.openai.com/docs/api-reference/audio/createSpeech
效果
代码(demo)
import requests
import os
from datetime import datetime
# 设置你的 OpenAI API 密钥
API_KEY = ''
# 配置baseurl
API_BASE = ""
# 可用的音色列表
VOICES = ['alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer']
def generate_speech(text, voice='alloy'):
"""
使用 OpenAI 的 TTS API 生成语音
:param text: 要转换为语音的文本
:param voice: 要使用的音色
:return: 生成的音频文件路径
"""
if voice not in VOICES:
raise ValueError(f"无效的音色。请从以下选项中选择: {', '.join(VOICES)}")
# 创建输出目录(如果不存在)
output_dir = 'generated_audio'
os.makedirs(output_dir, exist_ok=True)
# 生成唯一的文件名
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
output_file = os.path.join(output_dir, f"speech_{voice}_{timestamp}.mp3")
# 准备请求数据
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "tts-1",
"input": text,
"voice": voice
}
# 发送请求到 OpenAI API
response = requests.post(f"{API_BASE}/audio/speech", headers=headers, json=data)
if response.status_code == 200:
# 保存音频文件
with open(output_file, 'wb') as f:
f.write(response.content)
return output_file
else:
raise Exception(f"API 请求失败: {response.status_code} - {response.text}")
def main():
print("欢迎使用 OpenAI TTS 生成器!")
print(f"可用的音色: {', '.join(VOICES)}")
while True:
text = input("\n请输入要转换为语音的文本(输入 'exit' 退出): ")
if text.lower() == 'exit':
break
voice = input(f"请选择音色 ({', '.join(VOICES)}),默认为 alloy: ").lower() or 'alloy'
try:
output_file = generate_speech(text, voice)
print(f"音频文件已生成: {output_file}")
except Exception as e:
print(f"生成音频时发生错误: {str(e)}")
if __name__ == "__main__":
main()