本教程系统讲解文本转语音(TTS)技术,详细介绍两款主流 TTS 方案:免费在线的 edge-tts 与开源本地的 IndexTTS-2.5。通过完整示例项目 a4voice,你将学会用 Python 调用两种 TTS 引擎,将两者封装为 OpenAI 兼容的 /v1/audio/speech 接口,并构建一个输入文字、点击按钮即可生成并播放语音的前端页面。

前置教程

如想快速开始学习本教程,你可能需要先完成以下前置教程:

资源下载

1. TTS 技术概览

1.1 什么是 TTS

TTS(Text-to-Speech,文本转语音) 是指将文字内容自动转换为自然流畅的人声语音的技术,是人工智能语音领域最基础也最成熟的应用之一。

TTS 的应用场景非常广泛:

  • 语音助手:智能音箱、手机助手的播报能力
  • 有声内容:有声书、播客、新闻朗读的批量合成
  • 视频配音:短视频、自媒体配音,降低配音成本
  • 教育场景:外语学习、课文朗读、无障碍阅读
  • 客服系统:呼叫中心自动应答、车载语音播报

现代 TTS 系统的核心处理流程如下:

graph LR A[输入文本] --> B[文本前端分析] B --> C[声学模型生成特征] C --> D[声码器合成波形] D --> E[输出音频] classDef input fill:#d6eaf8,stroke:#1a6b8a,stroke-width:2px classDef process fill:#d5f5e3,stroke:#1e8449,stroke-width:2px classDef model fill:#ffecd6,stroke:#ca6f1e,stroke-width:2px classDef output fill:#ebdef0,stroke:#6c3483,stroke-width:2px class A input class B process class C,D model class E output
阶段 作用 说明
文本前端分析 分词、注音、标点停顿处理 决定发音是否正确
声学模型 将文本特征映射为声学特征 决定音质与自然度
声码器 将声学特征还原为音频波形 决定听感是否细腻

TTS 的本质是"文本到语音"的映射,其效果取决于声学模型与声码器的质量,而工程上的重点是选择合适的技术方案并把它封装成易于调用的服务。

1.2 在线 TTS 与本地部署 TTS 的对比

调用 TTS 有两种主流方式:调用在线 TTS 服务本地部署 TTS 模型。两者的对比如下:

对比项 在线 TTS 本地部署 TTS(IndexTTS-2.5)
联网要求 需要联网调用服务 无需联网,完全离线可用
调用成本 大部分收费 模型开源免费,需自备硬件
音色定制 服务商定制,音色丰富 支持零样本音色克隆,任意人声
部署门槛 极低,根据服务商提供的接口接入即可 较高,需要 GPU 与较多依赖
稳定可控 依赖第三方服务稳定性 完全自主可控,数据不出本地
合成延迟 受网络环境影响 取决于本机硬件性能

1.3 本教程的选型

  • edge-tts:用来演示"零成本快速接入在线 TTS",安装一条命令、调用几行代码,适合对音质要求不高、需要快速上手的场景。
  • IndexTTS-2.5:用来演示"本地部署高质量 TTS",支持零样本音色克隆与多语种合成,适合对隐私、可控性和音色定制有要求的场景。

选择建议:原型验证、轻量应用选 edge-tts;生产级语音合成、音色克隆需求选本地部署 IndexTTS。两者能力可以互补,本教程的示例项目将它们统一封装为同一套接口,切换引擎只需改一个参数。

2. 在线 TTS:edge-tts

2.1 edge-tts 简介

edge-tts 是一个非官方 Python 库,封装了微软 Edge 浏览器内置的神经网络语音合成引擎。它免费、无需 API Key,即可调用微软的高质量中文语音,支持 40 多种语言、300 多种音色,是快速体验 TTS 最轻量的方案。

主要特点:

  • 免费无密钥:直接调用微软 Edge 在线接口,无需注册与付费
  • 中文自然:内置多款针对中文优化的人声,发音清晰自然
  • 使用简单:异步 API,几行代码即可生成 MP3 音频
  • 参数灵活:支持语速、音量、音调等参数调节

2.2 安装 edge-tts

uv pip install edge-tts

安装后可以查看全部可用音色:

# 查看所有可用音色
edge-tts --list-voices

# 过滤出中文音色(Windows PowerShell 使用 Select-String)
edge-tts --list-voices | Select-String zh-CN

# 或者使用 grep 命令过滤中文音色(Linux/Mac)
edge-tts --list-voices | grep zh-CN

2.3 常用中文音色

查询结果中的 Name 是音色名称,格式为 语言-国家/地区-名字Neural,如 zh-CN-XiaoxiaoNeural 表示简体中文、晓晓音色。常用中文音色如下:

音色名称 性别/风格 特点
zh-CN-XiaoxiaoNeural 自然温暖,最常用
zh-CN-XiaoyiNeural 温柔可爱
zh-CN-XiaohanNeural 抒情柔和
zh-CN-XiaomoNeural 情感丰富,支持多种风格
zh-CN-XiaoruiNeural 成熟专业
zh-CN-YunxiNeural 年轻活泼
zh-CN-YunjianNeural 沉稳叙事
zh-CN-YunyangNeural 新闻播报风格
zh-CN-YunxiaNeural 童声

音色列表会随微软服务更新而扩充,以 edge-tts --list-voices 实时查询结果为准。

2.4 Python 调用示例

edge-tts 基于 asyncio 异步模型,生成音频的核心代码如下:

# 基础调用示例
import asyncio
import edge_tts

TEXT = "你好,欢迎使用 edge-tts 文本转语音服务。"
VOICE = "zh-CN-XiaoxiaoNeural"  # 中文女声

async def main():
    communicate = edge_tts.Communicate(TEXT, VOICE)
    await communicate.save("output.mp3")

if __name__ == "__main__":
    asyncio.run(main())

运行后目录下会生成 output.mp3 文件,使用播放器即可试听。

也可以使用命令行快速合成:

edge-tts --voice zh-CN-YunxiNeural --text "你好,世界" --write-media hello.mp3

2.5 语速与音量调节

Communicate 支持通过 ratevolumepitch 参数调节语速、音量与音调:

async def main():
    # rate 语速(范围约 -50% 到 +200%),volume 音量(范围 -100% 到 +100%)
    communicate = edge_tts.Communicate(
        TEXT, VOICE,
        rate="+20%",     # 语速加快 20%
        volume="+0%",    # 音量保持不变
    )
    await communicate.save("output.mp3")

3. 本地 TTS:IndexTTS-2.5

3.1 IndexTTS 简介

IndexTTS 是由哔哩哔哩 IndexTeam 开源的工业级可控零样本文本转语音系统。最新版本 IndexTTS-2.5 在 IndexTTS-2 的基础上进一步升级,模型约 8 亿参数,原生支持中、英、日、西班牙语、阿拉伯语五种语言混说,推理速度较 IndexTTS-2 提升 2.28 倍,输出 24kHz 高质量语音。

IndexTTS 最突出的能力是零样本音色克隆(Zero-shot Voice Cloning):只需提供一段 5~10 秒的参考音频,即可克隆出与参考音频音色一致的语音,无需针对该音色训练模型。

graph LR A[参考音频 5-10秒] --> B[音色编码器] B --> C[条件编码器] C --> D[自回归解码器] D --> E[声码器] E --> F[24kHz 克隆语音] classDef input fill:#d6eaf8,stroke:#1a6b8a,stroke-width:2px classDef process fill:#d5f5e3,stroke:#1e8449,stroke-width:2px classDef model fill:#ffecd6,stroke:#ca6f1e,stroke-width:2px classDef output fill:#ebdef0,stroke:#6c3483,stroke-width:2px class A input class B,C,D model class E process class F output

本地模型目录:本教程假设 IndexTTS-2.5 模型已放置在 C:\models\IndexTTS-2.5,目录中应包含以下文件:

文件 作用
config.yaml 模型配置(采样率、网络结构等)
gpt.pth 自回归解码器权重,负责生成语音编码序列
codec.pth 语义编解码器权重(2.5 全新音频分词器)
s2mel.pth S2Mel 声学模型权重
feat1.pt / feat2.pt 说话人特征矩阵 / 情感特征矩阵
wav2vec2bert_stats.pt 语音特征提取器统计信息
multilingual_zh_ja_yue_char_del.tiktoken 多语种文本词表
qwen0.6bemo4-merge/ 文本转情感标签的小模型(可选)

模型下载后,还会在首次推理时自动下载四个辅助模型:wav2vec-bert 语音特征提取器、MaskGCT 语义编解码器、campplus 说话人编码器与 BigVGAN 声码器,统一存放在模型目录的 hf_cache/ 子目录中,全程无需手动干预。

请确保模型所在的目录结构与下图一致:

C:\models\IndexTTS-2.5\
├── config.yaml
├── gpt.pth                        # 自回归解码器权重
├── codec.pth                      # 语义编解码器权重
├── s2mel.pth                      # 声学模型权重
├── feat1.pt / feat2.pt            # 说话人 / 情感特征矩阵
├── wav2vec2bert_stats.pt          # 语音特征统计信息
├── multilingual_zh_ja_yue_char_del.tiktoken
├── qwen0.6bemo4-merge/            # 文本情感标签模型(可选)
└── hf_cache/                          # 首次推理自动下载的辅助模型
    ├── w2v-bert-2.0/                  # 语音特征提取器(约 4.4 GB)
    ├── semantic_codec_model.safetensors  # 语义编解码器
    ├── campplus_cn_common.bin         # 说话人编码器
    └── bigvgan/                       # 声码器

3.2 部署环境准备

IndexTTS 需要较完整的深度学习环境,建议按以下步骤准备。本项目推荐使用 Python 3.10NVIDIA GPU(显存不低于 8GB,社区实测 8GB 显存可流畅推理),无 GPU 时也可用 CPU 推理但速度较慢。Python 依赖统一使用 uv 安装,比 pip 快一个数量级。

提示:本教程第 3、4 章共用同一个 conda 环境 a4voice,第 4 章的 a4voice 项目直接复用本环境,无需再单独创建环境。

# 创建并激活本教程统一使用的 conda 环境
conda create -n a4voice python=3.10 -y
conda activate a4voice

# 安装 lzma 运行库(conda 的 Python 可能缺少 _lzma 模块,避免后续报错)
conda install -c conda-forge liblzma -y

# 安装 uv(Python 包管理工具)
pip install uv

用 uv 安装 GPU 版 PyTorch。国内推荐从阿里云镜像直链下载 cu128 的 wheel,速度远快于官方源;网络好的读者也可改用官方源命令:

# 方法一:阿里云镜像直链(国内推荐,速度快)
uv pip install \
  "https://mirrors.aliyun.com/pytorch-wheels/cu128/torch-2.8.0%2Bcu128-cp310-cp310-win_amd64.whl" \
  "https://mirrors.aliyun.com/pytorch-wheels/cu128/torchvision-0.23.0%2Bcu128-cp310-cp310-win_amd64.whl" \
  "https://mirrors.aliyun.com/pytorch-wheels/cu128/torchaudio-2.8.0%2Bcu128-cp310-cp310-win_amd64.whl"

# 方法二:PyTorch 官方源(需能访问 download.pytorch.org)
uv pip install torch==2.8.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

注意:Windows 下使用 wav 参考音频无需安装 ffmpeg 与 pynini,index-tts 使用 wetext 包完成文本规范化(由后续 uv pip install . 自动安装)。如需处理 mp3 等格式的参考音频,可另行安装 ffmpeg。

3.3 安装 index-tts 项目

本教程的示例项目 a4voice 已附带精简后的 index-tts 源码,位于 a4voice/index-tts/ 目录。该源码已同步至支持 IndexTTS-2.5 的上游版本,并裁掉了 1.5 等旧版推理入口与测试、文档等无关文件,仅保留推理所需的 indextts 包与 infer_v2_5.py 推理类。你也可以在任意位置单独获取上游完整源码:

git clone https://github.com/index-tts/index-tts.git
cd index-tts

无论源码位于何处,都进入源码目录后使用 uv 安装项目(自动补齐全部依赖,已安装的 cu128 torch 会被保留):

# 请确保仍然在 a4voice 环境下
# 普通安装(不推荐 -e 可编辑安装):项目路径含中文时,
# 可编辑安装生成的 .pth 文件在中文 Windows 上会因编码问题失效,
# 导致 import 失败,请改用普通安装
uv pip install . --index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,即可在任意 Python 代码中导入 indextts 模块调用模型。modelscope 已作为项目依赖自动安装,无需单独安装。

3.4 下载模型权重

IndexTTS-2.5 模型可通过 ModelScope 或 HuggingFace 下载。国内用户推荐使用 ModelScope:

# 使用 ModelScope 下载(推荐国内用户)
modelscope download --model IndexTeam/IndexTTS-2.5 --local_dir C:/models/IndexTTS-2.5

模型约 5 GB,下载完成后文件即位于 C:\models\IndexTTS-2.5 目录,无需解压。

3.5 交互体验方式

a4voice 附带的 index-tts 源码为精简版,未包含上游的 webui.py 等交互脚本,仅保留推理所需代码。如需体验可视化界面,请直接使用第 4 章 a4voice 项目的前端页面:它通过 indextts.infer_v2_5.IndexTTS2 加载本地 2.5 模型,全程离线推理。

3.6 使用 Python 调用本地模型

在 Python 中调用 IndexTTS-2.5 的核心代码如下:

from indextts.infer_v2_5 import IndexTTS2

# 加载本地模型
tts = IndexTTS2(
    cfg_path="C:/models/IndexTTS-2.5/config.yaml",
    model_dir="C:/models/IndexTTS-2.5",
    device="cuda",        # 无 GPU 时改为 cpu
    use_bf16=True,        # BF16 半精度推理,降低显存占用
)

# 参考音频 + 文本 -> 输出克隆语音
tts.infer(
    spk_audio_prompt="reference_voice.wav",  # 参考音频(5~10 秒人声)
    text="你好,欢迎使用 IndexTTS 文本转语音。",
    lang="ZH",             # 语言:ZH 中文 / EN 英文 / JA 日语 / ES 西班牙语 / AR 阿拉伯语
    output_path="output.wav",                # 输出音频文件
)

核心要点infer() 的关键字参数为参考音频路径 spk_audio_prompt、待合成文本 text、语言 lang 与输出路径 output_path。模型在首次调用时加载权重并自动下载辅助模型,需要一定时间。

4. 综合示例:a4voice 文本转语音服务

4.1 项目目标与架构

示例项目 a4voice 将前面介绍的两款 TTS 引擎整合为一个完整服务,实现以下目标:

  • 用 Python(FastAPI)实现后端服务
  • 调用 edge-tts 在线服务合成语音
  • 调用本地 IndexTTS-2.5 模型合成语音(模型地址 C:\models\IndexTTS-2.5
  • 对外暴露 OpenAI 兼容 APIPOST /v1/audio/speech
  • 构建前端界面:用户输入文字,点击按钮,调用 TTS 服务生成音频文件并播放

整体架构如下:

graph LR U[前端页面
static/index.html] -->|POST /v1/audio/speech| A[FastAPI 后端
main.py] A --> E[edge-tts 在线引擎] A --> I[IndexTTS 本地引擎] E -->|MP3| U I -->|WAV| U E --> S[微软 Edge 语音服务] I --> M[IndexTTS-2.5 模型
C:/models/IndexTTS-2.5] classDef frontend fill:#d6eaf8,stroke:#1a6b8a,stroke-width:2px classDef backend fill:#d5f5e3,stroke:#1e8449,stroke-width:2px classDef engine fill:#ebdef0,stroke:#6c3483,stroke-width:2px classDef model fill:#ffecd6,stroke:#ca6f1e,stroke-width:2px classDef external fill:#fadbd8,stroke:#922b21,stroke-width:2px class U frontend class A backend class E,I engine class M model class S external

4.2 项目结构

a4voice/
├── config.py                  # 服务配置(端口、音色、模型路径)
├── main.py                    # FastAPI 后端,暴露 OpenAI 兼容接口
├── requirements.txt           # 依赖管理
├── index-tts/                 # 附带的 index-tts 源码(用于 IndexTTS 引擎)
├── services/
│   ├── __init__.py
│   ├── edge_tts_service.py    # 在线引擎:调用 edge-tts 服务
│   └── index_tts_service.py   # 本地引擎:调用 IndexTTS-2.5 模型
├── static/
│   └── index.html             # 前端页面
└── reference/                 # IndexTTS 音色克隆参考音频目录

4.3 配置文件 config.py

所有配置统一在 config.py 中修改,包括监听端口、edge-tts 音色列表、IndexTTS 模型路径与注册的克隆音色:

# config.py(核心片段,完整代码请查看 a4voice/config.py)
PORT = 8000

# 在线 TTS(edge-tts)配置
EDGE_TTS_DEFAULT_VOICE = "zh-CN-XiaoxiaoNeural"

# 本地 TTS(IndexTTS-2.5)配置
INDEX_TTS_MODEL_DIR = "C:/models/IndexTTS-2.5"
INDEX_TTS_CFG_PATH = "C:/models/IndexTTS-2.5/config.yaml"
INDEX_TTS_DEVICE = "cuda"          # 推理设备:cuda / cpu
INDEX_TTS_USE_BF16 = True          # BF16 半精度推理

# 注册的克隆音色:音色名 -> 参考音频路径
INDEX_TTS_VOICES = {
    "default": "reference/ref.wav",
}

4.4 在线引擎:调用 edge-tts 服务

services/edge_tts_service.py 封装了 edge-tts 的调用逻辑,将 OpenAI 的 speed 语速参数转换为 edge-tts 的 rate 参数,并把流式音频块写入内存缓冲区:

# services/edge_tts_service.py(核心片段,完整代码请查看 a4voice/services/edge_tts_service.py)
import edge_tts

async def synthesize(text, voice=None, speed=1.0):
    """将文本合成为 MP3 音频,返回 (音频字节流, 音频格式)"""
    voice = voice or EDGE_TTS_DEFAULT_VOICE
    rate = speed_to_rate(speed)      # 将 1.0 映射为 +0%,1.2 映射为 +20%

    communicate = edge_tts.Communicate(text, voice, rate=rate)
    buffer = io.BytesIO()
    async for chunk in communicate.stream():
        if chunk["type"] == "audio":
            buffer.write(chunk["data"])
    return buffer, "mp3"

4.5 本地引擎:调用 IndexTTS-2.5 服务

services/index_tts_service.py 封装了 IndexTTS-2.5 的调用逻辑。考虑到模型加载耗时,采用懒加载方式在首次请求时才加载权重;同时 IndexTTS 模型非线程安全,使用全局锁串行化推理请求:

# services/index_tts_service.py(核心片段,完整代码请查看 a4voice/services/index_tts_service.py)
from indextts.infer_v2_5 import IndexTTS2

def synthesize(text, voice="default"):
    """将文本合成为 WAV 音频,返回输出文件路径"""
    ref_audio = INDEX_TTS_VOICES[voice]          # 参考音频,定义克隆音色
    output_path = os.path.join(OUTPUT_DIR, f"{uuid.uuid4().hex}.wav")

    tts = _get_tts()                             # 懒加载模型
    with _infer_lock:                            # 串行化推理
        tts.infer(                               # 参考音频 + 文本 -> 克隆语音
            spk_audio_prompt=ref_audio,
            text=text,
            lang="ZH",                           # 中文合成
            output_path=output_path,
        )
    return output_path

4.6 对外暴露 OpenAI 兼容接口

main.py 是服务的核心入口,对外暴露 OpenAI 兼容的 POST /v1/audio/speech 接口。该接口根据请求中的 model 参数自动路由到对应的 TTS 引擎:

# main.py(核心片段,完整代码请查看 a4voice/main.py)
class SpeechRequest(BaseModel):
    model: str = "edge-tts"       # 引擎:edge-tts(在线)/ index-tts(本地)
    input: str                    # 待合成的文本
    voice: str | None = None      # 音色
    speed: float = 1.0            # 语速,范围 0.25~4.0
    response_format: str = "mp3"  # 输出格式

@app.post("/v1/audio/speech")
async def text_to_speech(req: SpeechRequest):
    """OpenAI 兼容的文本转语音接口"""
    if req.model == "edge-tts":
        audio, fmt = await edge_tts_service.synthesize(req.input, req.voice, req.speed)
        return Response(content=audio.read(), media_type="audio/mpeg")
    if req.model == "index-tts":
        output_path = index_tts_service.synthesize(req.input, req.voice or "default")
        return FileResponse(output_path, media_type="audio/wav")
    raise HTTPException(status_code=400, detail=f"不支持的模型: {req.model}")

代码要点说明:

功能模块 实现方式 说明
接口路径 POST /v1/audio/speech 与 OpenAI 官方规范一致
参数格式 model + input + voice 请求体使用 OpenAI 标准字段
引擎路由 model 字段分发 edge-tts 走在线,index-tts 走本地
返回格式 音频字节流 edge-tts 返回 MP3,IndexTTS 返回 WAV

4.7 前端界面

前端为单页 HTML 应用,位于 static/index.html。你可以前往 a4voice/static/index.html 查看完整的示例代码。页面主要功能:

  1. 引擎切换:在"edge-tts 在线"与"IndexTTS 本地"之间切换
  2. 音色选择:根据所选引擎加载对应音色列表
  3. 语速调节:edge-tts 引擎支持滑动调节语速
  4. 文本输入:输入待合成的文字内容
  5. 生成播放:点击"生成语音"按钮,通过 fetch 调用 /v1/audio/speech 接口,将返回的音频流以 Blob 方式加载到播放器并自动播放

要点:前端本身就是一个 OpenAI 兼容 API 客户端,它直接调用 /v1/audio/speech 而非自定义接口,验证了该接口的通用兼容性。

4.8 运行与测试

第一步:创建环境并安装依赖

本教程全篇共用一个 conda 环境 a4voice。若已按第 3 章完成环境准备,直接激活即可:

conda activate a4voice

若未按第 3 章创建过该环境(例如仅使用 edge-tts 引擎),则新建:

conda create -n a4voice python=3.10
conda activate a4voice

然后进入项目目录用 uv 安装核心依赖:

cd a4voice

# 安装核心依赖(fastapi、uvicorn、edge-tts),国内可加清华镜像加速
uv pip install -r requirements.txt --index-url https://pypi.tuna.tsinghua.edu.cn/simple

第二步:启用本地 IndexTTS 引擎(可选)

若已按第 3 章完成 index-tts 安装(uv pip install .),此步可跳过。否则执行:

cd a4voice/index-tts
uv pip install . --index-url https://pypi.tuna.tsinghua.edu.cn/simple

然后确保模型位于 C:\models\IndexTTS-2.5(并已在 config.py 中配置对应路径),同时在 reference 目录放置一段参考音频 ref.wav。仅使用 edge-tts 引擎可跳过此步。

第三步:启动服务

python main.py

启动后访问 http://localhost:8000,即可看到语音合成界面。

第四步:验证功能

在界面中输入文字、选择引擎与音色,点击"生成语音",确认能正常生成并播放音频。

安装核心依赖(fastapi、uvicorn、edge-tts),国内可加清华镜像加速示意图

也可使用 curl 直接验证接口:

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model": "edge-tts", "input": "你好,世界", "voice": "zh-CN-XiaoxiaoNeural", "speed": 1.0}' \
  --output test.mp3

4.9 使用 OpenAI SDK 验证接口兼容性

由于服务暴露的是 OpenAI 兼容接口,可以直接使用 openai 官方 Python SDK 调用,无需关心底层引擎细节:

# 使用 openai SDK 调用本地 a4voice 服务
from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8000/v1",  # 本地服务地址
    api_key="not-needed",                 # 本地服务不校验 Key
)

resp = client.audio.speech.create(
    model="edge-tts",
    input="你好,欢迎使用 a4voice 文本转语音服务。",
    voice="zh-CN-XiaoxiaoNeural",
)
resp.stream_to_file("test.mp3")

只要服务实现 OpenAI 兼容接口,任何基于 OpenAI SDK 开发的应用都可以无缝切换到底层 TTS 引擎,这正是兼容接口的价值所在。

5. 总结

5.1 核心内容回顾

  • TTS 技术:文本转语音,核心流程为文本前端分析、声学模型生成特征、声码器合成波形
  • 在线方案 edge-tts:免费、无密钥、使用简单,适合快速接入
  • 本地方案 IndexTTS-2.5:开源、离线可用、支持零样本音色克隆与多语种合成,适合生产级应用
  • 服务封装:FastAPI 实现 /v1/audio/speech OpenAI 兼容接口,按 model 参数路由到不同引擎
  • 前端应用:输入文字、点击按钮、生成并播放音频,前端本身即兼容 API 客户端

5.2 常见问题与解答

问:edge-tts 需要注册或 API Key 吗?

答:不需要。edge-tts 直接调用微软 Edge 在线语音接口,免费使用,但需要联网。

问:IndexTTS 提示"参考音频缺失"怎么办?

答:在 reference 目录放置一段 5~10 秒、无背景噪音、单人说话清晰的参考音频,并在 config.pyINDEX_TTS_VOICES 中配置正确路径。

问:IndexTTS 合成报 CUDA out of memory?

答:显存不足时,可将 config.pyINDEX_TTS_USE_BF16 保持为 True,或缩短输入文本;若无 GPU,将 INDEX_TTS_DEVICE 改为 cpu

问:IndexTTS 引擎加载很慢?

答:模型权重较大,首次请求加载需要一定时间属正常现象。加载完成后缓存于内存,后续请求速度会明显提升。

问:edge-tts 引擎为什么不支持 wav 输出?

答:edge-tts 原生输出 MP3 格式,本示例直接返回其原生格式。如需 wav 需额外使用 ffmpeg 等工具转码。

问:部署 index-tts 需要安装 pynini 吗?

答:不需要。Windows 上 index-tts 使用纯 Python 的 wetext 包完成文本规范化,由 uv pip install . 自动安装;依赖 pynini 的 WeTextProcessing 仅用于 Linux 环境。