Pocket TTS:本地轻量化文本转语音工具

Pocket TTS:本地轻量化文本转语音工具

GitHub: github.com/kyutai-labs/pocket-tts
由 Kyutai Labs 开发,1亿参数模型,纯 CPU 运行,支持声音克隆


💡 核心特点

Pocket TTS 是一款轻量级文本转语音应用,专为 CPU 高效运行而设计:

特性 说明
🖥️ 纯 CPU 运行 无需 GPU,仅需 2 个 CPU 核心
📦 模型小巧 仅 1 亿参数
低延迟 首段音频约 200ms
🚀 速度快 MacBook Air M4 上约 6 倍实时速度
🎵 音频流式 支持流式输出
🎤 声音克隆 支持使用任意音频克隆声音
🌐 长文本 可处理无限长文本输入
🇬🇧 语言 目前仅支持英语

🚀 快速开始

方式一:在线体验(无需安装)

访问 Kyutai 官网 直接在浏览器中试用,输入文本、选择声音、生成语音。

方式二:CLI 命令行使用

安装

推荐使用 uv(自动在隔离环境中安装依赖):

# 安装 uv(如果还没有)
# 详见: https://docs.astral.sh/uv/getting-started/installation/

# 使用 uvx 直接运行(无需安装)
uvx pocket-tts generate

或使用 pip 安装:

pip install pocket-tts

支持 Python 3.10 - 3.14,需要 PyTorch 2.5+(不需要 GPU 版本)

生成语音

# 默认生成(使用默认文本和声音)
uvx pocket-tts generate
# 或
pocket-tts generate

# 指定声音和文本
pocket-tts generate --voice alba --text "Hello, this is a test."

内置声音列表:

声音名称 描述
alba 女性声音
marius 男性声音
javert 男性声音
jean 男性声音
fantine 女性声音
cosette 女性声音
eponine 女性声音
azelma 女性声音

声音示例和许可信息:Hugging Face Voices


🎤 声音克隆

Pocket TTS 支持使用任意音频文件克隆声音:

方式一:直接使用音频文件

pocket-tts generate --voice ./my_voice.wav --text "Hello, I'm using my own voice."

建议: 使用前先用 Adobe Podcast 等工具清理音频样本,音频质量会直接影响克隆效果。

方式二:导出声音嵌入(推荐)

处理音频文件进行声音克隆相对较慢,但加载预转换的 safetensors 文件非常快:

# 导出声音嵌入
pocket-tts export-voice ./my_voice.wav --output my_voice.safetensors

# 使用导出的声音
pocket-tts generate --voice my_voice.safetensors --text "Hello!"

更多详情:export-voice 文档

从 Hugging Face 使用声音

pocket-tts generate \
  --voice "hf://kyutai/tts-voices/expresso/ex01-ex02_default_001_channel2_198s.wav" \
  --text "Hello from Hugging Face voice."

🌐 启动 Web 服务

运行本地 HTTP 服务,通过 Web 界面生成音频:

uvx pocket-tts serve
# 或
pocket-tts serve

访问 http://localhost:8000 使用 Web 界面。

优点: 模型在请求之间保持在内存中,比命令行更快。

更多详情:serve 文档


🐍 Python API 使用

基础用法

from pocket_tts import TTSModel
import scipy.io.wavfile

# 加载模型(只需一次)
tts_model = TTSModel.load_model()

# 获取声音状态(可缓存)
voice_state = tts_model.get_state_for_audio_prompt("alba")

# 生成音频
audio = tts_model.generate_audio(
    voice_state, 
    "Hello world, this is a test."
)

# 保存为 WAV
scipy.io.wavfile.write(
    "output.wav", 
    tts_model.sample_rate, 
    audio.numpy()
)

声音克隆(Python)

from pocket_tts import TTSModel
import scipy.io.wavfile

tts_model = TTSModel.load_model()

# 使用本地音频文件克隆声音
voice_state = tts_model.get_state_for_audio_prompt("./my_voice.wav")

# 或使用 Hugging Face 上的声音
voice_state = tts_model.get_state_for_audio_prompt(
    "hf://kyutai/tts-voices/expresso/ex01-ex02_default_001_channel2_198s.wav"
)

audio = tts_model.generate_audio(
    voice_state, 
    "This is a cloned voice speaking."
)

scipy.io.wavfile.write("cloned_output.wav", tts_model.sample_rate, audio.numpy())

性能优化建议

load_model()get_state_for_audio_prompt() 是相对较慢的操作,建议:
- 保持模型和声音状态在内存中
- 重复使用同一个 voice_state 生成多段音频
- 可以维护多个声音状态以支持多种声音

更多详情:Python API 文档


📝 对比:Pocket TTS vs Edge TTS

对比项 Pocket TTS Edge TTS
运行方式 本地运行 依赖微软服务
网络需求 首次下载后离线可用 需要网络连接
声音自然度 ⭐⭐⭐⭐⭐ 非常自然 ⭐⭐⭐ 一般
声音克隆 ✅ 支持任意声音克隆 ❌ 不支持
隐私 ✅ 数据本地处理 ⚠️ 依赖云端
延迟 ⭐⭐⭐⭐⭐ 低(200ms首音) ⭐⭐⭐ 依赖网络
多语言 ❌ 目前仅英语 ✅ 多语言支持

🔧 相关项目

项目 描述
lukasmwerner/pocket-reader 浏览器屏幕阅读器
ikidd/pocket-tts-wyoming Docker 容器,支持 Wyoming 协议,可用于 Home Assistant
slaughters85j/pocket-tts Mac 桌面应用 + macOS 快捷操作
IceFog72/pocket-tts-openapi 兼容 OpenAI API 的 TTS 服务器,支持声音克隆

🌐 浏览器实现

Pocket TTS 足够小巧,可以在浏览器中通过 WebAssembly/JavaScript 运行。社区实现:

项目 技术 演示
babybirdprd/pocket-tts Candle (Rust) + WebAssembly -
ekzhang/jax-js jax-js Demo
KevinAHM/pocket-tts-onnx-export ONNX Runtime Web Demo

📚 资源链接

资源 链接
GitHub 仓库 https://github.com/kyutai-labs/pocket-tts
在线演示 https://kyutai.org/pocket-tts
Hugging Face 模型 https://huggingface.co/kyutai/pocket-tts
声音库 https://huggingface.co/kyutai/tts-voices
技术报告 https://kyutai.org/blog/2026-01-13-pocket-tts
论文 https://arxiv.org/abs/2509.06926
Colab 示例 Notebook

⚠️ 使用限制

  • 🌐 仅支持英语(目前)
  • 🚫 禁止用途:未经明确合法同意的声音模仿/克隆;错误信息、虚假信息或欺骗;生成非法、有害、诽谤、滥用、骚扰、歧视、仇恨或侵犯隐私的内容。

整理时间:2026-02-02