【PaddleSpeech】语音合成-男声

环境安装

系统:Ubuntu >= 16.04

源码下载

  • 克隆 PaddleSpeech 仓库
bash 复制代码
# github下载
git clone https://github.com/PaddlePaddle/PaddleSpeech.git
# 也可以从gitee下载
git clone https://gitee.com/paddlepaddle/PaddleSpeech.git

# 进入PaddleSpeech目录
cd PaddleSpeech

安装 Conda

bash 复制代码
使用apt安装 build-essential
sudo apt install build-essential


# 下载 miniconda
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -P tools/
# 安装 miniconda
bash tools/Miniconda3-latest-Linux-x86_64.sh -b
# conda 初始化
$HOME/miniconda3/bin/conda init
# 激活 conda
bash
# 创建 Conda 虚拟环境
conda create -y -p tools/venv python=3.8
# 激活 Conda 虚拟环境:
conda activate tools/venv
# 安装 Conda 包
conda install -y -c conda-forge sox libsndfile swig bzip2 libflac bc

安装 PaddlePaddle

bash 复制代码
#CPU版本安装
python3 -m pip install paddlepaddle- -i https://mirror.baidu.com/pypi/simple

#GPU版本安装,注意:2.4.1 只是一个示例,请按照对paddlepaddle的最小依赖进行选择。
python3 -m pip install paddlepaddle-gpu==2.4.1 -i https://mirror.baidu.com/pypi/simple

用开发者模式安装 PaddleSpeech

bash 复制代码
pip install pytest-runner -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip install -e .[develop] -i https://pypi.tuna.tsinghua.edu.cn/simple

下载预训练模型

bash 复制代码
#下载预训练模型:声学模型、声码器
!mkdir download

#中文男声学模型
!wget -P download https://paddlespeech.bj.bcebos.com/Parakeet/released_models/fastspeech2/fastspeech2_male_zh_ckpt_1.4.0.zip
!unzip -d download download/fastspeech2_male_zh_ckpt_1.4.0.zip

#声码器
!wget -P download https://paddlespeech.bj.bcebos.com/Parakeet/released_models/hifigan/hifigan_male_ckpt_1.4.0.zip
!unzip -d download download/hifigan_male_ckpt_1.4.0.zip

语音合成

脚本命名为:FastSpeech2-hifigan.py

python 复制代码
import argparse
import os
from pathlib import Path
import IPython.display as dp
import matplotlib.pyplot as plt
import numpy as np
import paddle
import soundfile as sf
import yaml
from paddlespeech.t2s.frontend.zh_frontend import Frontend
from paddlespeech.t2s.models.fastspeech2 import FastSpeech2
from paddlespeech.t2s.models.fastspeech2 import FastSpeech2Inference
from paddlespeech.t2s.models.hifigan import HiFiGANGenerator
from paddlespeech.t2s.models.hifigan import HiFiGANInference
from paddlespeech.t2s.modules.normalizer import ZScore
from yacs.config import CfgNode

# 配置预训练模型
fastspeech2_config = "download/fastspeech2_male_zh_ckpt_1.4.0/default.yaml"
fastspeech2_checkpoint = "download/fastspeech2_male_zh_ckpt_1.4.0/snapshot_iter_76000.pdz"
fastspeech2_stat = "download/fastspeech2_male_zh_ckpt_1.4.0/speech_stats.npy"
hifigan_config = "download/hifigan_male_ckpt_1.4.0/default.yaml"
hifigan_checkpoint = "download/hifigan_male_ckpt_1.4.0/snapshot_iter_630000.pdz"
hifigan_stat = "download/hifigan_male_ckpt_1.4.0/feats_stats.npy"
phones_dict = "download/fastspeech2_male_zh_ckpt_1.4.0/phone_id_map.txt"
# 读取 conf 配置文件并结构化
with open(fastspeech2_config) as f:
    fastspeech2_config = CfgNode(yaml.safe_load(f))
with open(hifigan_config) as f:
    hifigan_config = CfgNode(yaml.safe_load(f))
print("========Config========")
print(fastspeech2_config)
print("---------------------")
print(hifigan_config)

# 构造文本前端对象
# 传入 phones_dict 会把相应的 phones 转换成 phone_ids
frontend = Frontend(phone_vocab_path=phones_dict)
print("Frontend done!")

# 调用文本前端
# input = "我每天中午12:00起床"
# input = "我出生于2005/11/08,那天的最低气温达到-10°C"
input = "先生您好,欢迎使用百度飞桨框架进行深度学习!"
input_ids = frontend.get_input_ids(input, merge_sentences=True, print_info=True)
phone_ids = input_ids["phone_ids"][0]
print("phone_ids:%s"%phone_ids)

# 初始化声学模型
with open(phones_dict, "r") as f:
    phn_id = [line.strip().split() for line in f.readlines()]
vocab_size = len(phn_id)
print("vocab_size:", vocab_size)
odim = fastspeech2_config.n_mels
model = FastSpeech2(
    idim=vocab_size, odim=odim, **fastspeech2_config["model"])
# 加载预训练模型参数
model.set_state_dict(paddle.load(fastspeech2_checkpoint)["main_params"])
# 推理阶段不启用 batch norm 和 dropout
model.eval()
stat = np.load(fastspeech2_stat)
# 读取数据预处理阶段数据集的均值和标准差
mu, std = stat
mu, std = paddle.to_tensor(mu), paddle.to_tensor(std)
# 构造归一化的新模型
fastspeech2_normalizer = ZScore(mu, std)
fastspeech2_inference = FastSpeech2Inference(fastspeech2_normalizer, model)
fastspeech2_inference.eval()
print("FastSpeech2 done!")

# 调用声学模型
with paddle.no_grad():
    mel = fastspeech2_inference(phone_ids)
print("shepe of mel (n_frames x n_mels):")
print(mel.shape)
# 绘制声学模型输出的 mel 频谱
#fig, ax = plt.subplots(figsize=(16, 6))
#im = ax.imshow(mel.T, aspect='auto',origin='lower')
#plt.title('Mel Spectrogram')
#plt.xlabel('Time')
#plt.ylabel('Frequency')
#plt.tight_layout()

# 初始化声码器
vocoder = HiFiGANGenerator(**hifigan_config["generator_params"])
# 模型加载预训练参数
vocoder.set_state_dict(paddle.load(hifigan_checkpoint)["generator_params"])
vocoder.remove_weight_norm()
# 推理阶段不启用 batch norm 和 dropout
vocoder.eval()
# 读取数据预处理阶段数据集的均值和标准差
stat = np.load(hifigan_stat)
mu, std = stat
mu, std = paddle.to_tensor(mu), paddle.to_tensor(std)
hifigan_normalizer = ZScore(mu, std)
# 构建归一化的模型
hifigan_inference = HiFiGANInference(hifigan_normalizer, vocoder)
hifigan_inference.eval()
print("HiFiGan done!")

# 调用声码器
with paddle.no_grad():
    wav = hifigan_inference(mel)
print("shepe of wav (time x n_channels):%s"%wav.shape)

# 绘制声码器输出的波形图
wave_data = wav.numpy().T
time = np.arange(0, wave_data.shape[1]) * (1.0 / fastspeech2_config.fs)
fig, ax = plt.subplots(figsize=(16, 6))
plt.plot(time, wave_data[0])
plt.title('Waveform')
plt.xlabel('Time (seconds)')
plt.ylabel('Amplitude (normed)')
plt.tight_layout()

#保存音频
sf.write(
    "output/output-male-hifigan.wav",
    wav.numpy(),
    samplerate=fastspeech2_config.fs)

运行脚本

bash 复制代码
#运行脚本前,确保有output目录,没有就手动创建一下

python3 FastSpeech2-hifigan.py

#运行成功后在output/output-male-hifigan.wav目录可以找到生成的音频文件
  1. 环境安装参考官网:https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/docs/source/install_cn.mdhttps://github.com/PaddlePaddle/PaddleSpeech/blob/develop/docs/source/install_cn.md

2. 飞桨PaddleSpeech语音技术课程 - 飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com)

  1. 更多模型下载

Released Models --- paddle speech 2.1 documentationhttps://paddlespeech.readthedocs.io/en/latest/released_model.html

相关推荐
blues_C3 小时前
Playwright MCP vs Chrome DevTools MCP vs Chrome MCP 深度对比
前端·人工智能·chrome·ai·chrome devtools·mcp·ai web自动化测试
关关长语8 小时前
(三) Dotnet为AI控制台对话添加依赖注入等集成
人工智能·ai·ai dotnet
eve杭19 小时前
解锁数据主权与极致性能:AI本地部署的全面指南
大数据·人工智能·5g·ai
utmhikari1 天前
【测试人生】LLM赋能游戏自动化测试的一些想法
自动化测试·游戏·ai·大模型·llm·游戏测试
Learn Beyond Limits1 天前
Using per-item Features|使用每项特征
人工智能·python·神经网络·算法·机器学习·ai·吴恩达
安娜的信息安全说1 天前
Ollama 使用详解:本地部署大语言模型的指南
人工智能·ai·语言模型·ollama
OopsOutOfMemory2 天前
LangChain源码分析(十三)- 运行时与监控
ai·langchain·aigc·ai编程·ai应用
CoderJia程序员甲2 天前
GitHub 热榜项目 - 日榜(2025-10-03)
ai·开源·大模型·github·ai教程
Elastic 中国社区官方博客3 天前
Elasticsearch MCP 服务器:与你的 Index 聊天
大数据·服务器·人工智能·elasticsearch·搜索引擎·ai·全文检索
CoderJia程序员甲3 天前
GitHub 热榜项目 - 日榜(2025-09-26)
ai·开源·github·ai编程·github热榜