本地部署EmotiVoice多音色情感TTS
EmotiVoice是一款支持中英文的开源TTS引擎,具备2000+音色和情感语音合成功能。通过简单步骤可完成本地部署,提供Web界面与脚本接口,实现多音色、多情感的语音生成。
本地部署 EmotiVoice 多音色情感 TTS
在语音合成技术飞速发展的今天,用户早已不满足于“机器朗读”式的冰冷输出。无论是虚拟主播的情绪起伏、游戏角色的愤怒呐喊,还是智能助手的一句温柔安慰,有情感的声音才真正具备感染力。而 EmotiVoice 的出现,正是为了解决这一痛点——它不仅支持中英文双语合成,还能精准控制音色与情绪,甚至仅凭几秒钟音频就能克隆出你的声音,并让“你”以开心、悲伤或愤怒的语气说话。
这听起来像科幻?其实已经在开源社区成为现实。
EmotiVoice 是由网易有道团队推出的高表现力开源 TTS(Text-to-Speech)系统,其最大亮点在于实现了 多音色 + 多情感 + 零样本声音克隆 的三位一体能力。不同于传统 TTS 模型需要大量数据训练才能模仿某个声音,EmotiVoice 只需 3~5 秒的目标说话人音频,无需任何微调即可完成音色复现。更进一步,它允许你通过简单的提示词控制生成语音的情感色彩,比如“愤怒地说‘你怎么敢这样!’”,或者“平静地读一段诗”。
整个项目完全支持本地部署,所有推理过程可在自有设备上完成,保障了隐私安全。同时提供命令行和 Web 界面两种交互方式,既适合批量处理任务,也方便开发者调试体验。
如果你正在寻找一个功能强大、中文友好、且真正能“动情”的语音合成方案,那 EmotiVoice 很可能是目前最值得尝试的选择。
要运行 EmotiVoice,首先需要准备合适的环境。推荐使用 Linux 系统(如 Ubuntu 20.04+),Windows 用户可通过 WSL2 实现兼容。核心依赖包括 Python 3.9~3.10、CUDA 加速(建议 11.8 或 12.1)、至少 16GB 内存以及 8GB 显存的 NVIDIA 显卡。当然,如果没有 GPU,也可以用 CPU 推理,只是速度会慢不少,适合初步测试。
部署流程并不复杂:
git clone https://github.com/netease-youdao/EmotiVoice.git
cd EmotiVoice
接着创建 Conda 虚拟环境并激活:
conda create -n emotivoice python=3.10 -y
conda activate emotivoice
然后根据是否有 GPU 安装对应的 PyTorch 版本。若使用 CUDA 12.1:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
无 GPU 则安装 CPU 版本:
pip install torch torchvision torchaudio
验证是否成功启用 CUDA:
python -c "import torch; print(torch.cuda.is_available())"
返回 True 即表示配置正确。
接下来安装其他必要依赖:
pip install numpy numba scipy transformers==4.26.1 soundfile yacs g2p_en jieba pypinyin gradio
这里有几个关键点需要注意:transformers 必须锁定为 4.26.1 版本,否则可能因接口变更导致模型加载失败;jieba 和 pypinyin 负责中文分词与拼音转换,是中文语音前端的重要组件;而 gradio 则用于启动可视化界面。
模型文件部分不能直接通过 Git 克隆完整获取,因为体积较大,项目采用了 Git LFS(Large File Storage)管理。因此需先安装并初始化 LFS:
git lfs install
此外,还需手动下载 SimBERT 风格编码基础模型,该模型用于提取参考音频的语义风格特征:
git clone https://huggingface.co/WangZeJun/simbert-base-chinese WangZeJun/simbert-base-chinese
这个模型会被 Style Encoder 自动调用,路径必须保持一致。
主模型权重则需从官方 Google Drive 下载:
🔗 https://drive.google.com/drive/folders/1y6Xwj_GG9ulsAonca_unSGbJ4lxbNymM
你需要下载以下几类文件:
g_*.pth:主 TTS 模型生成器权重do_*.pth:判别器权重(推理时可忽略)checkpoint_*:风格编码器检查点
下载后创建对应目录结构并将文件放入:
mkdir -p outputs/style_encoder/ckpt
mkdir -p outputs/prompt_tts_open_source_joint/ckpt
mv g_*.pth do_*.pth outputs/prompt_tts_open_source_joint/ckpt/
mv checkpoint_* outputs/style_encoder/ckpt/
注意保留原始文件名不变,避免加载时报错。一旦这些模型就位,系统就可以开始合成语音了。
EmotiVoice 支持两种主要使用方式:命令行批量处理和 Web 交互界面。对于自动化脚本或批量生成任务,推荐使用前者;而对于新手用户或希望实时调试效果的场景,Web 界面更为直观。
先来看命令行模式。输入格式为:
<speaker_id>|<emotion_prompt>|<phoneme_placeholder>|<text_content>
例如,在 data/test.txt 中写入:
8051|开心|<sos/eos> sp0 n i3 h ao3 h ua2 sp1 k ai1 x in1 sp0 l e le <sos/eos>|你好啊,很开心见到你
9876|愤怒|<sos/eos> sp0 n i3 z en4 me4 g an4 zh en4 yang4 sp1 a <sos/eos>|你怎这么搞?
custom_audio|悲伤||听我说完这句话,我真的很难过
其中 <speaker_id> 可以是内置音色编号(如 8051),也可以是 custom_audio 表示启用零样本克隆。<emotion_prompt> 支持多种情感关键词,如“开心”、“愤怒”、“悲伤”、“惊讶”、“害怕”、“平静”等。第三个字段通常是音素序列,如果为空,可以通过前端脚本自动生成:
python frontend.py data/test.txt > data/test_with_phonemes.txt
该脚本会自动完成中文转拼音、英文 G2P 转换、音素对齐等预处理步骤。
准备好文本后,执行推理命令:
TEXT=data/test_with_phonemes.txt
python inference_am_vocoder_joint.py \
--logdir prompt_tts_open_source_joint \
--config_folder config/joint \
--checkpoint outputs/prompt_tts_open_source_joint/ckpt/g_00140000.pth \
--test_file $TEXT \
--device cuda
结果将保存在 outputs/prompt_tts_open_source_joint/test_audio/ 目录下,每个句子生成独立的 .wav 文件,命名包含序号和时间戳。
相比之下,Web 界面更加友好。只需运行:
streamlit run demo_page.py
浏览器打开提示地址(通常是 http://localhost:8501),即可进入图形化操作页面。界面简洁明了,包含以下几个核心功能区:
- 文本输入框:输入你想合成的内容;
- 音色选择:下拉菜单选择内置 speaker ID,或选择
custom_audio并上传参考音频; - 情感选择:指定输出语音的情绪类型;
- 参考音频上传:当使用自定义音色时,上传一段 3~10 秒的清晰语音(WAV 格式,16kHz,单声道);
- 生成按钮:点击后立即合成并播放结果。
我试过上传自己念的一段话,设置情感为“兴奋”,然后输入一句“今天真是个好日子”,回放时听到自己的声音带着明显激动语调说出来,那种感觉真的很奇妙——仿佛 AI 真的学会了“我的语气”。
这种零样本克隆的能力,意味着你可以轻松实现很多创意应用:比如用亲人声音录制睡前故事,让游戏角色说出演员原声但带有不同情绪的台词,或是构建一个语气随心情变化的个性化语音助手。
值得一提的是,虽然 EmotiVoice 功能强大,但在实际使用中仍有一些细节值得注意。
首先是性能问题。如果你遇到显存不足的情况,可以强制使用 CPU 推理(--device cpu),但速度会显著下降。另一种方法是降低 batch size 或关闭不必要的后台程序释放资源。对于长文本,建议拆分为短句分别合成后再拼接,单次输入最好不要超过 50 字,否则可能出现发音不准或节奏混乱的问题。
其次是音质优化。如果发现某些词语发音错误,尤其是中文多音字或英文专有名词,可以尝试手动修正音素序列,或更换不同的 speaker ID 进行对比。有时候换一个音色反而能让整体自然度提升不少。
还有一个常被忽视的点是参考音频的质量。做声音克隆时,背景噪音、录音距离、麦克风质量都会影响最终效果。理想情况下应使用安静环境下录制的清晰语音,避免混响和爆音。
至于扩展性方面,目前 EmotiVoice 不支持动态添加新音色到内置库中,但零样本克隆机制已经足够灵活,基本覆盖了绝大多数应用场景。如果想将其集成进现有系统,完全可以基于 inference_am_vocoder_joint.py 封装成 API 服务,结合 FastAPI 或 Flask 实现远程调用,打造专属语音合成平台。
Mac 用户也能运行,Apple Silicon(M1/M2)芯片需安装适配版 PyTorch:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
并在推理时指定 --device mps 使用 Apple 的 Metal Acceleration。
EmotiVoice 的意义不仅仅在于技术先进,更在于它把原本属于大厂的高阶语音能力带到了普通开发者手中。过去,要实现类似功能往往需要庞大的训练数据、昂贵的算力投入和复杂的工程架构。而现在,一台带独显的笔记本电脑就能跑起来。
更重要的是,它让我们重新思考“声音”的边界:当 AI 不仅能模仿你的嗓音,还能理解你的情绪,甚至表达出喜怒哀乐时,人机交互的本质正在悄然改变。也许不久的将来,我们不再只是“听 AI 讲话”,而是“感受 AI 的情绪”。
而这一步,你现在就可以迈出。
“技术的魅力,正在于让机器不仅‘能说’,更能‘动情’。”
—— 当你第一次听见“另一个自己”笑着说“我很想你”时,或许就会懂这句话的分量。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)