sanoTTS是一个极小的神经网络语音合成(TTS)模型家族,参数规模从29万到230万不等,最大的特点是可以运行在3美元的ESP32-S3芯片或浏览器中。

部署方式非常灵活,主要取决于你的目标平台和使用场景:


🐍 Python环境部署(最通用)

这是最快捷的体验方式,适合在电脑上通过命令行或Python脚本使用。

1. 安装Python包

1
pip install sanotts

2. 命令行快速使用
安装后,可以通过 sanotts 命令直接合成语音。语音模型会在首次使用时自动从Hugging Face下载到 ~/.cache/sanotts/ 目录。

1
2
3
4
5
6
7
8
# 基本用法,使用默认的amy声音
sanotts say "Hello from a two megabyte voice." --voice amy -o hello.wav

# 使用中文语音
sanotts say "你好,世界" --voice chinese -o nihao.wav

# 查看所有可用语音
sanotts --help

3. 在Python代码中调用

1
2
3
4
5
6
7
import sanotts

# 合成语音,返回numpy音频数组(采样率22.05kHz)
audio_array = sanotts.synthesize("Hello world", voice="amy")

# 你还可以指定其他参数,如语速等(具体参数请查阅官方文档)
# 保存为wav文件可使用scipy或soundfile等库

可用语音列表(参数从大到小):
heart (2.27M), hfc / amy-1p8m (1.8M), amy / kristin / vi / id (~1.46M), amy-1p1m (1.1M), heart-nano (294k)。


🌐 Web / 浏览器部署(无需后端服务器)

sanoTTS的浏览器版本完全在客户端运行(通过WebAssembly),因此部署就是托管静态文件。

方式A:使用npm包(推荐开发者)

  1. 安装npm包

    1
    npm install sanotts-web
  2. 在代码中使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import { SanoTTS, playAudio } from 'sanotts-web';

    const tts = await SanoTTS.load({
    assetBase: 'https://你的CDN地址/sanotts/', // 存放dist/目录的位置
    });
    const result = await tts.synthesize('Hello from my own server.', {
    voice: 'amy',
    voiceBase: 'https://你的CDN地址/sanotts/', // 存放voices/目录的位置
    });
    playAudio(result); // 在浏览器中播放
  3. 托管静态文件:将node_modules/sanotts-web/dist/目录(WASM运行时)和项目根目录下web/voices/目录(各语音的权重文件)复制到你自己的静态托管服务(如CDN、对象存储)上,并确保上面代码中的assetBasevoiceBase指向正确。

方式B:纯静态HTML部署(无需构建工具)

这种方式更直接,适合不想用npm的开发者。

  1. 从本项目web/目录中复制以下文件到你的静态服务器:
    • snt_g2p.js, snt_g2p.wasm, nt_g2p.data (音素转换)
    • snt_voice.js, snt_voice.wasm (语音合成)
    • voices/ 整个目录 (包含所有声音的权重)
  2. 在你的HTML中引用并初始化,具体加载逻辑可以参考项目web/index.html的完整示例。

重要提示

  • 文件大小:WASM运行时约700KB(gzip压缩后),每个语音的权重文件在4-7MB之间(FP32格式),会在首次使用时按需加载。
  • CSP策略:如果你的网站有内容安全策略(CSP),需要在script-src指令中允许'wasm-unsafe-eval'(或旧浏览器的'unsafe-eval'),以允许WASM执行。

📱 移动端与嵌入式设备部署

Arduino / PlatformIO (ESP32-S3等微控制器)

这是sanoTTS最独特的应用场景。

  1. 在Arduino IDE中:将arduino/目录下载为ZIP库,并通过项目 -> 加载库 -> 添加.ZIP库导入。

  2. 在PlatformIO中:在platformio.ini文件中添加依赖:

    1
    lib_deps = https://github.com/Ampixa/sanoTTS.git
  3. 具体使用:请参考项目arduino/README.md,其中详细说明了支持的开发板(ESP32-S3)、内存配置以及如何将模型文件(如mcu-kristin-745k-q8.tar.gz)烧录到设备中。

Android / iOS / 桌面

项目在mobile/目录提供了用于移动端的C语言API绑定,支持Swift (iOS)、Kotlin (Android) 和 Dart (Flutter)。这属于更高级的集成,需要从源码编译,具体参考mobile/README.md(若存在)。


⚙️ 高级选项与注意事项

  1. 语音模型存储位置:Python包默认从Hugging Face下载模型。你可以通过设置环境变量 SANOTTS_VOICE_SOURCE=hfSANOTTS_VOICE_SOURCE=github 来固定从GitHub Releases获取(作为备用源)。
  2. 训练自己的声音:项目提供了完整的训练工具链(在docs/目录下)。需要准备数据集,并按照docs/中的配方(先训练时长模型、声学模型,再联合微调)进行操作。这需要较强的机器学习和Python开发能力。
  3. 许可证注意
    • 核心推理运行时mcu/src/snt_*.c等)是 MIT 许可证,非常宽松。
    • 整个项目因为包含了espeak-ng(用于G2P转换)的代码,整体是 GPL-3.0 许可证。这意味着如果你修改或分发包含espeak-ng部分的完整项目代码,需要遵守GPL。

你是想在Python环境中快速试用,还是计划将其集成到网站或嵌入式设备中?可以告诉我你的具体目标平台,我来提供针对性的指导。