上个星期分别测试了一下两个轻量级的语音合成模型,分别是:
- Kokoro: 加入Kokoro语音合成支持,完全纯本地CPU跑语音合成
- MeloTTS: 轻量级TTS:MeloTTS纯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
注:
- 首先使用需要从huggingface下载模型,模型文件+语音文件大概400M左右,耗时要看你的网速。
- 国内访问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. 合成的速度
这个是在我的这台十年前的老笔记本上跑的数据:
- 首次运行某一个模型的时间需要下载模型,并初始化模型,可能需要耗时几十秒到几分钟,具体时间跟你的电脑的配置,以及你的网速直接相关。在我的这个老笔记本上首次运行Kokoro耗时42.8秒左右。
- 若是加载了模型后,再来合成语音速度就上去了,合成我的一个口号:“关注我的公众号:奥德元,一起学习 AI,一起追赶时代。Good good study, day day up.”,耗时约3.5秒。
注:这个3.5秒可认为是首字时延,后面由于合成的速度比播放的速度要快得多的多,所以在长文(需切句子)合成的情况下,实际体验的时延可以做到趋近到500ms以内。
- 若是合成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的项目里。