唠嗑

这个实现蛮简单的,就是请求一个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()