MeloTTS:7.4K+ 星标 — 2026 年多语言 TTS 基准对比 Coqui TTS、ChatTTS、Bark

MeloTTS is a high-quality multi-lingual text-to-speech library with 7.4K+ stars. Compare benchmarks with Coqui TTS, ChatTTS, and Bark. Covers Python setup, Docker deployment, real-time inference, and production hardening.

  • MIT
  • 更新于 2026-05-19

{{< 资源信息 >}} 大多数开源 TTS 库都会迫使您做出选择:高质量需要 GPU,而 CPU 友好的选项听起来很机械。 由麻省理工学院和 MyShell.ai 研究人员开发的 MeloTTS 打破了这种权衡。 它拥有 7,400 多个 GitHub star 和 MIT 许可证,可在 CPU 上提供跨 6 种语言和多种英语口音的实时多语言语音合成。 本指南将介绍完整的 MeloTTS 设置,针对 Coqui TTS、ChatTTS 和 Bark 进行基准测试,并提供生产就绪的部署配置。 ## MeloTTS 是什么? MeloTTS 是一个基于 VITS、VITS2 和 Bert-VITS2 架构构建的高质量多语言文本转语音库。 它支持英语(美式、英式、印度式、澳大利亚式、默认口音)、西班牙语、法语、中文(中英混合)、日语和韩语。 该项目由 MyShell.ai 维护,并得到麻省理工学院研究人员的贡献,整个代码库都在麻省理工学院的许可下 - 免费用于商业和非商业用途。 主要区别:

  • CPU 实时推理,在 Intel i7-12700 上 RTF(实时系数)低至 0.41
  • 模型大小 ~180-300MB,足够小以进行边缘部署
  • 混合语言支持 - 中文使用者可以内联处理英语单词,无需切换模型
  • 速度控制从 0.5x 到 2.0x,无音高失真
  • 单流合成需要零 GPU ## MeloTTS 的工作原理 MeloTTS 使用源自 VITS2 的非自回归端到端神经架构以及基于 BERT 的文本编码。 该管道有四个阶段: 1. 文本处理:对于大多数语言,通过“espeak-ng”进行 G2P(字素到音素)转换; 适用于中文日语的 BERT 分词器(通过“unidic”)。 混合的中英文文本被分段并路由到适当的音素提取器。 2. BERT 编码器:轻量级 MiniLM 编码器从输入文本中提取上下文表示,捕获韵律和语义细微差别。 3. 基于流的声学模型:深度可分离卷积将 BERT 特征转换为梅尔声谱图。 这是大部分计算,并通过优化的卷积核在 CPU 上高效运行。 4. HiFi-GAN 声码器:使用预先训练的声码器将梅尔频谱图转换为 22kHz 采样率的原始音频。
    MeloTTS 徽标
    Hugging Face 上的 MeloTTS Web UI
    整个管道是非自回归的,这意味着模型并行处理全文,而不是逐个令牌生成音频。 这种架构选择实现了亚实时推理速度。 ## 安装和设置 ### 先决条件 在安装 MeloTTS 之前,请确保您拥有: ```` bas h
Ubuntu/Debian #

sudo apt-get update && sudo apt-get install -y espeak-ng libsndfile1 ffmpeg # macOS 酿造安装 espeak libsndfile ffmpeg # 验证 espeak-ng espeak-ng –版本 ### 选项 1:pip 安装 (Linux/macOS) bas h

创建虚拟环境 #

python -m venv melotts-env 源 melotts-env/bin/activate # 安装 MeloTTS pip 安装 melotts # 下载日语词典(JA 支持所需) python -m unidic 下载 ### 选项 2:从源安装 bas h git 克隆 https://github.com/myshell-ai/MeloTTS.git cd 梅洛TTS pip install -e 。 python -m unidic 下载 ### 选项 3:Docker(推荐用于 Windows) bas h git 克隆 https://github.com/myshell-ai/MeloTTS.git cd 梅洛TTS docker build -t melotts 。 docker run -it -p 8888:8888 melotts 对于 GPU 加速: bas h docker run –gpus all -it -p 8888:8888 melotts 打开“http://localhost:8888”以访问内置 Web UI。 ### Verify Installation蟒蛇 from melo.api import TTS # Speed is adjustable speed = 1.0 device = ‘auto’ # 自动检测 GPU,回退到 CPU text = “MeloTTS is working correctly on this machine.” model = TTS(language=‘EN’, device=device) speaker_ids = model.hps.data.spk2id output_path = ’test_output.wav’ model.tts_to_file(text, speaker_ids[‘EN-Default’], output_path, speed=speed) print(f"Audio saved to {output_path}") ### First Synthesis bas h

CLI usage (after pip install) #

melo “Hello, this is MeloTTS speaking.” output.wav -l EN –speaker EN-US # List available speakers melo –list-speakers ## 与流行工具集成 ### Python API — English with Multiple Accents蟒蛇 from melo.api import TTS speed = 1.0 device = ‘auto’ text = “Did you ever hear a folk tale about a giant turtle?” model = TTS(language=‘EN’, device=device) speaker_ids = model.hps.data.spk2id # American accent model.tts_to_file(文本,speaker_ids[‘EN-US’],’en-us.wav’,速度=速度) # British accent model.tts_to_file(文本,speaker_ids [‘EN-BR’],’en-br.wav’,速度=速度) # Indian accent model.tts_to_file(文本,speaker_ids [‘EN_INDIA’],’en-india.wav’,速度=速度) # Australian accent model.tts_to_file(text, speaker_ids[‘EN-AU’], ’en-au.wav’, speed=speed) ### Chinese with Mixed English蟒蛇 from melo.api import TTS speed = 1.0 device = ‘cpu’ # Chinese speaker handles English words seamlessly text = “我最近在学习machine learning,希望能够在未来的artificial intelligence领域有所建树。” model = TTS(language=‘ZH’, device=device) 扬声器_ids = model.hps.data.spk2id 输出路径 = ‘zh-mixed.wav’ model.tts_to_file(文本,speaker_ids [‘ZH’],output_path,速度=速度) ### 日本人蟒蛇 从 melo.api 导入 TTS 速度=1.0 设备=‘CPU’ text = “こんにちは、これは日本语の音声合成テsutoです。” 模型= TTS(语言=‘JA’,设备=设备) 扬声器_ids = model.hps.data.spk2id 输出路径 = ‘ja.wav’ model.tts_to_file(文本,speaker_ids [‘JA’],output_path,速度=速度) ### FastAPI REST API蟒蛇 从 fastapi 导入 FastAPI,HTTPException 从 pydantic 导入 BaseModel 从 melo.api 导入 TTS 导入临时文件 导入操作系统 应用程序 = FastAPI() # 预加载支持语言的模型 型号={} 对于 [‘EN’, ‘ZH’, ‘ES’, ‘FR’, ‘JA’, ‘KO’] 中的 lang: 模型[lang] = TTS(语言=lang, 设备=‘auto’) 类 TTSRequest(BaseModel): 文本:str 语言:str = ‘EN’ 扬声器:str = ‘EN-默认’ 速度:浮动= 1.0 @app.post(“/tts”) 异步 def text_to_speech(req: TTSRequest): 如果 req.language 不在模型中: 引发 HTTPException(status_code=400,detail=f“不支持语言 {req.language}”) 模型=模型[要求.语言] 扬声器_ids = model.hps.data.spk2id 如果req.speaker不在speaker_ids中: 引发 HTTPException(status_code=400,detail=f“未找到扬声器 {req.speaker}”) 输出路径 = tempfile.mktemp(后缀=’.wav’) model.tts_to_file(req.text,speaker_ids [req.speaker],output_path,speed=req.speed) 返回{“音频文件”:输出路径} 运行API: bas h uvicorn tts_api:app –主机 0.0.0.0 –端口 8000 –workers 2 ### 用于生产的 Docker Compose yam l 版本:‘3.8’ 服务: 梅洛特: 建造: 语境: 。 dockerfile: Dockerfile 端口: - “8888:8888” 环境: - NVIDIA_VISIBLE_DEVICES=全部 部署: 资源: 预订: 设备: - 驱动程序:nvidia 数量:1 能力:[GPU] 重新启动:除非停止 健康检查: 测试:[“CMD”,“curl”,“-f”,“http://localhost:8888”] 间隔:30秒 超时时间:10秒 重试次数:3 ### 使用 WebSocket 流式传输 TTS蟒蛇 导入异步 导入网络套接字 导入 json 从 melo.api 导入 TTS 从 melo.utils 导入 get_streaming_tts 型号= TTS(语言=‘EN’,设备=‘自动’) 扬声器_ids = model.hps.data.spk2id 异步 def tts_stream(websocket, 路径): Websocket 中的消息异步: 数据 = json.loads(消息) 文本 = data.get(‘文本’, ‘’) 扬声器 = data.get(‘扬声器’, ‘EN-默认’) 速度 = data.get(‘速度’, 1.0) # 流式传输音频块 对于 model.stream_tts(text, seller_ids[speaker], speed=speed) 中的块: 等待 websocket.send(块) start_server = websockets.serve(tts_stream, ‘0.0.0.0’, 8765) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() ### 渐变网页用户界面蟒蛇 将渐变导入为 gr 从 melo.api 导入 TTS 型号= TTS(语言=‘EN’,设备=‘自动’) 扬声器_ids = model.hps.data.spk2id 扬声器名称 = 列表(speaker_ids.keys()) def 合成(文本、扬声器、速度): 输出路径 = ‘/tmp/gradio_output.wav’ model.tts_to_file(文本,s​​peaker_ids [扬声器],output_path,速度=浮点(速度)) 返回输出路径 iface = gr. 接口( fn=合成, 输入=[ gr.Textbox(label=“Text”, value=“来自 MeloTTS 的你好!”), gr.Dropdown(choices=speaker_names, label=“Speaker”, value=“EN-Default”), gr.Slider(0.5, 2.0, 值=1.0, 标签=“速度”) ], 输出=gr.Audio(标签=“生成的音频”), title =“MeloTTS Web UI”, description=“实时多语言文字转语音” ) iface.launch(server_name=‘0.0.0.0’, server_port=7860)

|

📦 出现在以下合集中

💬 留言讨论