OpenAI TTS,做一个好用的文本转语音工具,支持 macOS + Win

我有一个需求,需要将英语文章的句子,一句句转成音频。我之前使用的网站,一个AI TTS 的在线网站,生成的音频挺拟人的。我对比过好几个类似网站,它家做的最好,而且网站也挺简洁,使用方便。最开始我还想使用微软的 TTS,发现这家做的不错,也懒得折腾了。

image-20240112141213641

一直到今天,发现这网站大改版,竟然不能下载音频了。一时半会还挺头痛,突然想起 OpenAI 好像提供了 TTS 的 API。一搜索还真是,听了网页上的示例音频,卧槽,它生成的音频更真实,而且还有停顿和轻重音,发音速度也刚刚好,没对比就没差距,这个音频比之前的好太多了。

我想着 GitHub 应该有这个 API 的开源项目,可以部署一个 TTS 的在线网站,我到时候只要填入 KEY ,就能网页上使用这个文本转语音功能。结果好像没找到,没办法,只能自己来。花了一个小时,搭配 ChatGPT4 ,实现了一个 Python 脚本,只要在电脑终端上运行这个 Python 脚本,复制粘贴要转写的文本,就能在目录下生成音频。还真不说,挺好用的。

image-20240112143153600

这使用过程也很简单,创建一个 text_to_speech_converter.py 文本,将下面的代码拷贝到文本保存。在目录下打开终端,假设你的电脑有 Python 环境,那接下来只要设置环境变量,设置一个名字叫 OPENAI_API_KEY 的环境变量,值就是 OpenAI 的 KEY(使用 GPT 3.5 就行了)。

关于这环境变量我再多说一句,我们可以配置永久的环境变量,也可以设置临时的(仅对当前终端会话有效)。Windows 和 macOS 的配置方法不一样,Windows 用户自己去搜一下,我也贴一个 GPT 的回答,仅供参考。

Windows
右击“此电脑”或“我的电脑”,选择“属性”。
点击“高级系统设置”。
在“系统属性”窗口中,点击“环境变量”。
在“环境变量”窗口,点击“新建”来创建一个新的系统变量。
在“变量名”中输入OPENAI_API_KEY,在“变量值”中输入您的 API 密钥。
点击“确定”保存。

macOS 就是修改 .bash_profile 文件,在终端打开这个文件,使用 Vim 添加保存。

sudo vim ~/.bash_profile
export OPENAI_API_KEY="您的API密钥"
source ~/.bash_profile

也可以在访达右键编辑添加,记得 source 生效。

上面都是永久配置,只要 KEY 的余额足够就可以一直使用,等有效期过了或者没钱了,重新替换更新。也可以临时设置,每次打开终端都配置一次。

Windows
set OPENAI_API_KEY=您的API密钥

macOS
export OPENAI_API_KEY=您的API密钥

搞定环境变量就直接执行这脚本 python3 text_to_speech_converter.py

我这默认你的电脑是安装了 Python ,如果没有安装,网上找一下教程,我这不分享了。下面是脚本代码。

import os
import random
import string
from pathlib import Path
from openai import OpenAI

def random_filename(extension='mp3'):
    """生成一个随机文件名"""
    return ''.join(random.choices(string.ascii_letters + string.digits, k=9)) + '.' + extension

def main():
    client = OpenAI(api_key=os.environ['OPENAI_API_KEY'])

    # 选择音色
    print("请选择音色:")
    print("1. 正式 (alloy)")
    print("2. 故事 (echo)")
    choice = input("输入序号选择音色:")

    voice = "alloy" if choice == "1" else "echo"
    print(f"音色选择成功:{'正式' if voice == 'alloy' else '故事'}")

    while True:
        # 获取用户输入的文本
        text_to_convert = input("\n请输入要转换的文本(或输入'exit'退出):")
        if text_to_convert.lower() == 'exit':
            break

        # 设置文件路径
        speech_file_path = Path(__file__).parent / random_filename()

        # 使用Text-to-Speech功能
        response = client.audio.speech.create(
            model="tts-1",
            voice=voice,
            input=text_to_convert
        )

        # 将响应流写入文件
        response.stream_to_file(speech_file_path)
        print(f"音频已生成:{speech_file_path}")

if __name__ == "__main__":
    main()

还挺激动的,不是因为其他,而且想起很早看到的一句话,“穷则变,变则通,通则达”,有时碰到一件坏事,也不一定是坏事,很多路走不通时,只能硬着头皮去找突破口。比如这里,要是这网站可以继续使用,我肯定不会找到这个好用的 TTS ,又不贵又好用,之前的网站下载虽然方便,但也没这个脚本方便,真不错。

本文由老郭种树原创,转载请注明:https://guozh.net/make-a-tool-using-openai-tts/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注