WaveRNN语音对齐问题(未解决)

记录一下对WaveRNN语音对齐问题(输出语音和原语音尺度不一致)的尝试。现在还没有解决这个问题。。

项目地址:https://github.com/fatchord/WaveRNN

这个项目实现了TTS的功能,不过整个模型架构不仅仅是一个WaveRNN。

模型会先通过一个tacotron模块对文本进行编解码,然后获得文本信息的Mel特征。之后再将mel特征输入至WaveRNN网络,进而获得语音输出。而这个mel特征的尺度直接决定了我们生成的音频的尺度大小。那么是否可以生成指定大小的mel特征呢?

 

这个mel特征是在文本信息编码后,通过prenet,attention rnn,decoder rnn三个网络(之前文章中介绍过)来进行采样,解码获得mel。整个网络每次的输出都是(80,2)维的特征。那么关键就在于这个特征生成多少次或者每次生成多少。通过控制次数或个数来使总的mel向量维度和原语音相同。

源代码中采用静音阈值控制是否继续生成mel特征。  当本次生成的特征值都小于静音阈值,也就是表面特征提取已经结束,然后终止生成mel,这个生成mel的总维度决定了之后的语音大小。

那么我们可以采用控制次数来使mel尺度达到预定目标,结果显示,mel尺度是可以达到预想值。但是整个输出语音的后段均为静音,所以对齐问题仍然没有解决。

那么改变每次输出mel维度是否可以?  源代码中的mel维度为80,修改mel维度后,模型将会报错。因为模型是在mel维度为80的情况下进行训练的,修改维度会使模型各处的参数维度不匹配,无法正常运行。而且这种方式下每次的音频不一样,使得每次需要修改的mel维度也不一样,这样修改来达到尺度一致方式不太现实。

如果模型只是单纯的WaveRNN或者Wavenet的网络模型的话,要想修改为尺度一致稍容易些,可以将原音频的mel特征直接变换为音频,这样得到的音频能同时保证和原音频、输出音频的一致性。

这里正是因为tacotron的mel提取结果不可控,导致生成的语音长度无法控制。

其实有另一种方法来实现尺度一致。通过Adobe audition来对语音进行伸缩变换。

下图中 从上到下分别是输出音频,缩短原音频,伸长输出音频,原音频。可以看到音频经过伸缩变化后,可以达到指定的尺度。

但是这种方法还不是最有效的解决方式,这样还是不能准确的使音频对应起来,扔会出现pesq评分低的现象。

所以上述方式都未能解决输出语音的尺度问题。。。。。

是否有更好的解决方案?   还在继续尝试。。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值