前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用PaddlePaddle轻松实现语音合成

使用PaddlePaddle轻松实现语音合成

作者头像
夜雨飘零
发布2022-09-07 16:56:40
1.2K0
发布2022-09-07 16:56:40
举报
文章被收录于专栏:CSDN博客CSDN博客

前言

使用PaddlePaddle轻松实现语音合成,提供了简单的示例代码,GUI界面操作,还有Flask的Web接口,可以给Android调用。

源码地址:点击下载

视频教程地址:哔哩哔哩

  1. 首先来写一个简单的程序,通过下面的代码就可以实现语音合成。
代码语言:javascript
复制
import os
import warnings
import wave

import paddle
import pyaudio
import soundfile as sf

warnings.filterwarnings("ignore")
from paddlespeech.t2s.frontend.zh_frontend import Frontend


# 声学模型路径
am_model_path = 'models/fastspeech2/model'
# 模型的发声字典
phones_dict_path = 'models/fastspeech2/phone_id_map.txt'

# 声码器模型路径
voc_model_path = 'models/wavegan/model'

# 要合成的文本
text = '我是夜雨飘零,我爱深度学习!'
# 输出文件的保持路径
output_path = 'output/1.wav'

# 获取文本前端
frontend = Frontend(g2p_model='g2pM', phone_vocab_path=phones_dict_path)

# 声学模型
am_inference = paddle.jit.load(am_model_path)
# 声码器模型
voc_inference = paddle.jit.load(voc_model_path)

# 文本转模型输入
input_ids = frontend.get_input_ids(text, merge_sentences=False)
phone_ids = input_ids['phone_ids']
print(phone_ids)

# 模型输出结果拼接
wav_all = None
for i in range(len(phone_ids)):
    part_phone_ids = phone_ids[i]
    # 获取声学模型的输出
    mel = am_inference(part_phone_ids)
    # 获取声码器模型输出
    wav = voc_inference(mel)
    if wav_all is None:
        wav_all = wav
    else:
        wav_all = paddle.concat([wav_all, wav])

# Tensor转numpy
wav = wav_all.numpy()
os.makedirs(os.path.dirname(output_path), exist_ok=True)
sf.write(output_path, wav, samplerate=24000)
print(f'音频已保存:{output_path}')

chunk = 1024
wf  = wave.open(output_path, 'rb')
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(width=wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

# 读取音频
data = wf.readframes(chunk)

# 循环读取音频
while len(data) > 0:
    stream.write(data)
    data = wf.readframes(chunk)

stream.stop_stream()
stream.close()
p.terminate()
  1. 提供了gui.py界面程序,可以通过界面进行语音合成。
GUI界面
GUI界面
  1. 另外还提供了server.py,该程序使用Flask提供了Web接口,可以提供给Android应用或者小程序调用,实现语音合成。
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
相关产品与服务
语音合成
语音合成(Text To Speech,TTS)满足将文本转化成拟人化语音的需求,打通人机交互闭环。提供多场景、多语言的音色选择,支持 SSML 标记语言,支持自定义音量、语速等参数,让发音更专业、更符合场景需求。语音合成广泛适用于智能客服、有声阅读、新闻播报、人机交互等业务场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档