OddTTS更新:十年前老笔记本以纯CPU跑中英混合语音合成

上个星期分别测试了一下两个轻量级的语音合成模型,分别是:

其中Kokoro以更低的CPU要求,可完美达成我的小落同学项目的实时语音交互的需求,因此现在我已经将我的小落同学的主打语音合成在OddTTS上切到了kokoro v1.1。

这里要特别感谢一下一位大佬:路遥。因为前面我以为Kokoro不支持中英混合,所以一开始是准备用MeloTTS的(对CPU要求相对较高),在他的提示下才发现原来Kokoro也可以通过将创建英文和中文两个pipeline来实现中英混合。

以下是一些相关的介绍。

一. 安装 OddTTS

pip install -i https://pypi.org/simple/ oddtts

二. 启动 OddTTS

在命令行中输入下面的命令即可启动:

oddtts

启动后,浏览器打开地址:http://127.0.0.1:9001

  • 默认的参数启动:绑定127.0.0.1环回地址,默认使用9001端口。
  • 自定义参数启动:若要允许其他IP访问,请使用以下命令启动服务,将host设置为0.0.0.0,端口也可以改成你自定义的端口。
oddtts --host 0.0.0.0 --port 8080

启动后,浏览器打开地址:http://your_ip_addr:8080

注:

  1. 首先使用需要从huggingface下载模型,模型文件+语音文件大概400M左右,耗时要看你的网速。
  2. 国内访问huggingface.co存在问题,可通过在运行 oddtts 命令前在命令行中输入以下命令来绕过。
    Windows:
set HF_ENDPOINT=https://hf-mirror.com

Linux/MacOS:

export HF_ENDPOINT=https://hf-mirror.com

三. 使用 OddTTS

OddTTS支持自定义协议的API,也支持OpenAI兼容接口的API,一般用户建议用OpenAI兼容接口来使用,三行代码搞定语音合成。

def openai_tts_api_synthesize(voice_id, text_cn_en_mixed):
    print(f"测试使用语音 {voice_id} 合成文本语音")

    client = OpenAI(api_key="dummy", base_url="http://localhost:9001/v1")
    response = client.audio.speech.create(model="oddtts-1", input=text_cn_en_mixed, voice=voice_id, response_format="mp3")
    response.write_to_file("output.mp3")

其他的API接口可以看OddTTS项目的API接口说明。

四、一些测试数据

1. 合成的语音的效果

合成的语音的效果可以看我之前的测试文章:

正常语速wav格式
正常语速mp3格式
3倍语速mp3格式

2. 合成的速度

这个是在我的这台十年前的老笔记本上跑的数据:

  1. 首次运行某一个模型的时间需要下载模型,并初始化模型,可能需要耗时几十秒到几分钟,具体时间跟你的电脑的配置,以及你的网速直接相关。在我的这个老笔记本上首次运行Kokoro耗时42.8秒左右。
  2. 若是加载了模型后,再来合成语音速度就上去了,合成我的一个口号:“关注我的公众号:奥德元,一起学习 AI,一起追赶时代。Good good study, day day up.”,耗时约3.5秒。

注:这个3.5秒可认为是首字时延,后面由于合成的速度比播放的速度要快得多的多,所以在长文(需切句子)合成的情况下,实际体验的时延可以做到趋近到500ms以内。

  1. 若是合成11字的文字,耗时(首字时延)约在1.6秒左右。

具体如下图所示。

3. 切换不同的TTS模型/引擎

OddTTS有集成了多种不同的TTS模型,包括:

  • OddGPT-SoVITS – 基于GPT-SoVITS的语音合成引擎(建议6G以上GPU)
  • EdgeTTS – 微软Edge浏览器的在线TTS服务(无需GPU)
  • ChatTTS – 专为对话场景设计的TTS引擎(建议4G以上GPU)
  • Bert-VITS2 – 基于BERT和VITS的语音合成(已禁用)
  • Bert-VITS2 V2 – Bert-VITS2的升级版本(已禁用)
  • Kokoro – 轻量级多语言TTS引擎(纯CPU,中文)
  • Kokoro V1.1 – Kokoro引擎的1.1版本(纯CPU,中英混合)

OddTTS提供了一个简单的管理、测试界面,在启动了OddTTS后可以在浏览器里打开oddtts,然后动态切换TTS模型/引擎。

五、注意事项

模型下载问题

Kokoro的模型放在huggingface.co上,在国内访问存在问题,解决方案:

  • Windows

set HF_ENDPOINT=https://hf-mirror.com
set HF_HOME=F:/ai_share/models

  • Linux/MacOS

export HF_ENDPOINT=https://hf-mirror.com
export HF_HOME=/opt/ai_share/models

输出wav正常,输出MP3报错

OddTTS的依赖里有加了ffmpeg,但是如果你机器上原先就有安装过ffmpeg有可能会报错,若是报错了,请再手动安装一下ffmpeg即可。

服务启动失败

  • 检查端口是否被占用
  • 确认所有依赖包已正确安装
  • 查看日志文件获取详细错误信息

语音合成失败

  • 检查TTS引擎配置是否正确
  • 确认选择的语音存在于当前TTS引擎中
  • 对于某些需要联网的引擎,确认网络连接正常(如: EdgeTTS)

如何切换TTS引擎

  • 现在可以直接在oddtts的web界面上手动修改、切换TTS引擎/模型了
  • 修改 oddtts_config.py 文件中的 tts_type 配置项
  • 重启服务使配置生效

输出格式

  • 默认输出格式为mp3
  • 可以通过 response_format 参数指定其他格式,如wav、mp3等

环境要求

  • Python 3.12+(低版本也能用,但是建议用3.12+)
  • 至少 2GB 可用磁盘空间(模型350M,再加python依赖,语音合成临时文件)
  • 推荐 4GB+ 内存

若有其他问题,也可提issue到OddTTS的项目里。