Fish Audio 免费 TTS API 从调研到脚本化:一款真正免费的 AI 语音合成

2026-07-04

背景:免费的 TTS 这么难找吗?

做 AI 语音合成的时候,我经常需要把文字转成语音。TTS 服务的收费模式很统一——按字符计费,免费额度少得可怜:

  • ElevenLabs:10,000 积分/月,大概能合成 6-10 分钟的语音
  • OpenAI TTS:没有免费层,直接按量计费
  • Google Gemini TTS:也没有免费层
  • 阿里云百炼 TTS:有月度免费额度,但用完了需要手动申请

直到看到一条消息:Fish Audio(鱼声)在 2026 年 6 月 23 日宣布将旗舰模型 S2.1 Pro 作为免费 API 开放。

这和其他服务最大的区别是——它把旗舰模型免费开放,公平使用下没有硬性字符上限。这在所有主流 TTS 服务商里是独一份。

是什么:Fish Audio S2.1 Pro Free

Fish Audio 是开源语音技术社区,他们的 S2.1 Pro 是他们最强的 TTS 模型。

核心参数

项目 数值
API 端点 POST https://api.fish.audio/v1/tts
免费模型 ID s2.1-pro-free
定价 $0.00 / M UTF-8 bytes(同模型付费版 $15)
首句延迟 ~70-90ms
语言 83 种语言(含中文、英语、日语、韩语等)
输出格式 WAV / MP3(64/128/192kbps)/ Opus
情感标签 [angry] [sad] [whispering] [laughing] [excited]
声音库 2,000,000+ 预设声音
声音克隆 免费层可用

和竞品的对比直观一些:

服务 免费模式 免费额度 模型层级
Fish Audio 完全免费 无硬性上限 旗舰模型
ElevenLabs 积分制 ~6-10 分钟/月 基础模型
OpenAI TTS 无免费层
阿里云百炼 TTS 月度额度 有限 独立免费模型

怎么做:从注册到脚本化

第一步:注册

注册流程比较简单:

  1. 打开 https://fish.audio/auth/signup
  2. 输入邮箱(支持 QQ 邮箱等国内邮箱)
  3. 查收验证码邮件(标题:”Fish Audio: Your One-Time Password”,10 分钟有效)
  4. 填入验证码完成注册
  5. 登录后到 https://fish.audio/app/api-keys 生成 API Key

第二步:直接调 API

拿 Key 后的最简单的测试——一行 curl:

curl -X POST https://api.fish.audio/v1/tts \
  -H "Authorization: Bearer 你的API_KEY" \
  -H "model: s2.1-pro-free" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "你好,欢迎关注 Fish Audio 免费 TTS。",
    "format": "mp3",
    "reference_id": "zh-female"
  }' \
  --output hello.mp3

关键细节:模型 ID 必须在 Header 中传递--header 'model: s2.1-pro-free'),不是 JSON body。这是 Fish Audio API 的设计,容易忽略。

第三步:脚本化

每次用 curl 太麻烦,写个 Python 脚本封装一下。项目结构如下:

my-tts-project/
├── scripts/
│   └── fish_tts.py       # 主脚本
├── test_data/
│   └── demo_cn.mp3       # 中文合成示例
├── env/
│   └── requirements.txt  # httpx
└── README.md

核心调用逻辑:

import httpx

def call_tts(api_key, text, model="s2.1-pro-free",
             reference_id="zh-female", format="mp3", proxy=None):

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}",
        "model": model,  # 模型在 header,不是 body!
    }

    payload = {
        "text": text,
        "format": format,
        "temperature": 0.7,
        "top_p": 0.9,
        "prosody": {
            "speed": 1.0,
            "volume": 1.0,
            "normalize_loudness": True,
        },
    }

    client_kwargs = {"headers": headers, "timeout": 60}
    if proxy:
        client_kwargs["proxy"] = proxy  # httpx: proxy=url,不是 proxies={}

    with httpx.Client(**client_kwargs) as client:
        response = client.post("https://api.fish.audio/v1/tts", json=payload)
        response.raise_for_status()
        return response.content

脚本预设了 6 个精选声音——sarah(英文女声)、adrian(英文男声)、egirl(活力女声)、energetic(活力男声)、zh-female(中文女声)、zh-male(中文男声),支持命令行参数和环境变量两种方式传参:

# 方式1:环境变量
export FISH_API_KEY=***
python3 fish_tts.py "你好,世界" --reference zh-female --output hello.mp3

# 方式2:指定代理
python3 fish_tts.py "你好" --reference zh-female --proxy http://127.0.0.1:7890

# 方式3:列出可选声音
python3 fish_tts.py --list-voices

技术选型用了 httpx 而非 requests:因为 httpx 支持原生代理参数 proxy=(传递 URL 字符串),而 requests 用的是 proxies=(传递字典)。如果你在代理环境下工作,httpx 更顺手。

第四步:集成到工具链

脚本验证通过后,可以根据自己的需求集成到自动化流程中。脚本支持通过环境变量或命令行参数运行,可以配合定时任务、自动化脚本、API 网关等场景使用。

踩坑记录

1. GFW 阻断(最大障碍)

现象:国内直连 api.fish.audio 直接超时。更准确地说——DNS 解析正常(108.160.169.55),但 TCP 连接被阻断。同时 fish.audio 官网也被墙,注册也需要代理环境。

解决方案(按推荐顺序):

方案 适用场景 优缺点
本地代理(Clash/Mihomo) 日常开发 配置简单,全局生效
Cloudflare Worker 中转 生产环境 零成本,需域名
海外服务器反向代理 高频调用 需要服务器,延迟最低

脚本中已经内置了 --proxy 参数,配合本地代理一行搞定:

python3 fish_tts.py "你好" --proxy http://127.0.0.1:7890

2. 代理选型踩坑

不是所有代理都能顺利连通 Fish Audio API。实际测试中:

  • 直连:完全超时(TCP 被阻断)
  • HTTP/HTTPS 代理:部分代理能解析域名,但 TLS 握手阶段失败(exit 35)
  • SOCKS5 代理:可以正常连通

如果你的代理是 Clash/Mihomo 系,注意检查是否开启了 UDP 转发和完整的 TLS 支持。如果是自建代理,建议优先用 SOCKS5 协议。

3. httpx 代理参数 vs requests

如果你是 requests 老用户,迁移到 httpx 时注意一个 API 差异:

# requests 写法
requests.get(url, proxies={"http": "...", "https": "..."})

# httpx 写法(更简洁)
httpx.Client(proxy="http://127.0.0.1:7890")  # 统一代理,URL 字符串

对于只需要一个统一代理的场景,httpx 更干净。

适用场景

该用 Fish Audio 的时候

  • 中文语音合成:因为中文是 Fish Audio 的主要优化方向之一,效果很好
  • 需要情感表现力:标签系统可以让语音带上情绪
  • 原型开发和测试:免费无上限,适合初期验证
  • 多语言内容:一个模型覆盖 83 种语言

不建议的场景

  • 超低延迟要求(<50ms):首句延迟 70-90ms,比本地方案慢
  • 需要 SLA 保障的线上服务:免费层无 SLA
  • 大规模商业应用:ARR > $100 万需联系官方

总结

Fish Audio 把旗舰模型免费开放,是 TTS 市场的一个大动作。如果你有语音合成需求,值得花 10 分钟注册拿 Key 试试——成本和风险都几乎为零。

几条核心建议收尾:

  1. API Key 存环境变量(不要硬编码到代码里)
  2. 模型 ID 放 Header(这是最容易忽略的地方)
  3. 国内用户准备好代理(API 被墙,脚本中已内置 --proxy 参数)
  4. 关注官方动态:免费期可能调整,但即使转为收费,也大概率会有合理的免费层
  5. 先测中文效果:同文本对比多个参考声音,找到最适合你场景的音色
标签: AI TTS API 教程 Python