【项目实战】FastSpeech 代码解析 —— ljspeech.py

FastSpeech 代码解析 —— ljspeech.py

  简介

       本项目一个基于 FastSpeech 模型的语音转换项目,它是使用 PyTorch 实现的(项目地址)。
       
        FastSpeech 基于 Transformer 的前馈网络,用于并行生成 TTS 梅尔谱图。 FastSpeech 模型与自回归 Transformer TTS 相比,梅尔谱图生成速度加快了 270 倍,端到端语音合成速度加快了 38 倍。(详情请参阅 FastSpeech 的详细介绍)。
       
       由于 FastSpeech 项目较大,代码较多,为了方便学习与整理,对主要代码进行依次介绍。
       
       本文将介绍项目中的 ljspeech.py 文件: LJSpeech 数据集处理。
       

  函数解析

    build_from_path

          该函数的作用是: 为 LJSpeech 数据集制作 mel 谱图,并返回语音文本列表。

          输入参数:

		in_dir	:	LJSpeech数据集路径
		out_dir	:	mel谱图输出路径

          输出参数:

		texts	:	LJSpeech数据集语音文本列表

          代码详解:

		def build_from_path(in_dir, out_dir):
		    # 计数器
		    index = 1
		    # 语音文本列表
		    texts = []
		
		    # 根据输入的 LJSpeech 数据集所在路径打开 metadata.csv 文件
		    with open(os.path.join(in_dir, 'metadata.csv'), encoding='utf-8') as f:
		        # 按行读取语音文本内容
		        for line in f.readlines():
		            # 每处理 100 个文件打印进度
		            if index % 100 == 0:
		                print("{:d} Done".format(index))
		            # 删除前后空格后进行分段
		            parts = line.strip().split('|')
		            # 第一段为语音路径
		            wav_path = os.path.join(in_dir, 'wavs', '%s.wav' % parts[0])
		            # 第三段为语音文本
		            text = parts[2]
		            # 处理音频文件,保存转换的 mel 谱图,添加语音文本至列表
		            texts.append(_process_utterance(out_dir, index, wav_path, text))
		
		            # 计数器更新
		            index = index + 1
		
		    # 返回语音文本列表
		    return texts

    _process_utterance

          该函数的作用是:

          输入参数:

		out_dir		:	mel谱图输出路径
		index		:	计数器
		wav_path	:	音频文件路径
		text		:	文本内容

          输出参数:

		texts	:	LJSpeech数据集语音文本列表

          代码详解:

		def _process_utterance(out_dir, index, wav_path, text):
		    # 将语音波形转换为 mel 频谱图:
		    mel_spectrogram = audio.tools.get_mel(wav_path).numpy().astype(np.float32)
		
		    # 将 mel 频谱图保存至文件
		    mel_filename = 'ljspeech-mel-%05d.npy' % index
		    np.save(os.path.join(out_dir, mel_filename),
		            mel_spectrogram.T, allow_pickle=False)
		
		    # 返回文本内容
		    return text
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值