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 之前,请确保您拥有: ```` bas h
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(文本,speaker_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)
|
💬 留言讨论