小蜗牛语音工坊:从 0 到 1 搭建一个免费 TTS 网站

一、为什么要做这个网站?

我一直在找一个免费、免登录、无广告的语音合成网站,但市面上的工具要么收费,要么需要注册,要么广告满天飞。于是决定自己做一个。

二、技术选型

| 模块 | 选型 | 理由 | |------|------|------| | 后端 | Spring Boot 3.3 | 熟悉的栈 | | TTS | Edge TTS | 微软神经网络语音,免费 | | 声音克隆 | 小米 MiMo | 国内可用,支持自定义音色 | | 前端 | 原生 HTML/CSS/JS | 无框架,秒开 | | 部署 | Nginx + systemd | 简单可靠 |

三、核心功能实现

1. 语音合成

调用 Edge TTS 的 WebSocket 接口:

public byte[] synthesize(String text, String voice) {
    // 建立 WebSocket 连接
    // 发送 SSML 请求
    // 接收音频流并合并
    return audioBytes;
}

2. 声音克隆

调用小米 MiMo API,关键点是音频格式必须为 16kHz 单声道 WAV

// 用户上传的音频需要重采样
AudioSample sample = AudioResampler.resampleTo16kMonoWav(upload);

3. 特色音色

内置了孙悟空、猪八戒、喜羊羊等预设音色,用户下拉选择即可:

  • 🐵 孙悟空 - 激昂有力的男声
  • 🐷 猪八戒 - 憨厚低沉的男声
  • 🐑 喜羊羊 - 活泼可爱的童声

四、流程图

用 mermaid 画的架构图:

graph TD
    A[用户访问网站] --> B{选择功能}
    B -->|语音合成| C[输入文字]
    B -->|声音克隆| D[选音色/上传音频]
    C --> E[调用 Edge TTS]
    D --> F[调用 MiMo API]
    E --> G[返回 MP3]
    F --> G
    G --> H[用户播放/下载]

五、部署上线

部署到腾讯云轻量服务器:

# 上传 JAR
scp target/small-snail-tts.jar root@1.13.192.102:/opt/small_snail_tts/

# 重启服务
ssh root@1.13.192.102 "systemctl restart small-snail-tts"

六、踩过的坑

  1. Edge TTS 不支持的音色要从前端删除,不能让用户选了之后报错
  2. MiMo 声音克隆对音频格式要求严格,MP3 44.1kHz 立体声会 500 错误
  3. 浏览器缓存导致更新不生效,加版本号 ?v=20260802 强制刷新

七、最终效果

访问 www.tnysnail.com 即可体验。

完全免费、免登录、无广告。

💡 这篇文章由 AI 分析:价值度 85/100 · AI 生成率 65% · 原创度 78%