python 音频变调不变速方法

变调的方法也可以分为三类:时域法、频域法、参量法

1. 时域法

时域法中,Crochiere等人于1983年提出了重采样的方法,该方法是实现变速变调最简单、最常用的方法之一。
实际应用中,librosa的pitch_shift就是用这个原理。

python很容易实现:

y, sr = librosa.load(librosa.ex('choice'))
y_third = librosa.effects.pitch_shift(y, sr, n_steps=4) #升高大三度

其中n_step中一个step为一个半音。

具体的原理为:

假设重采样因子为P/Q,其中,P为上采样因子,Q为下采样因子。

上采样过程就是往原始信号相邻两点间内插P-1个采样点,这样使得基音周期变为原来的P倍,频谱压缩为原来的1/P倍,时长变为原来的P倍,即基频变为原来的1/P倍,音调降为原来的1/P倍,语速变为原来的1/P倍。

同样地,下采样过程就是每隔Q-1个点进行抽取,这样会使得基音周期长度为原来的1/Q倍,频谱扩展为原来的Q倍,时长变为原来的1/Q倍,即基频变为原来的Q倍,音调升为原来的Q倍,语速变为原来的Q倍。

综合上述两个过程,通过P/Q倍的重采样后,保持播放速率不变,重采样语音语速和音调都变为原来的Q/P倍。

为了实现变调不变速,可以通过各种变速不变调处理与重采样相结合的方法。变速不变调处理使语速变为原来的P/Q倍,得到输出信号y(n),然后对y(n)进行P/Q倍重采样处理,这样就得到语速正常,音调变为原来Q/P倍的最终输出语音z(n)。

2. 频域法

频域法中比较简单的处理就是直接对信号频谱进行插值或者抽取,实现各频率分量的扩展或者压缩。

这种方法的缺点在于:内插会引入不需要的频率,从而大大影响音质,变调后会有部分失真。
另外,比较典型的方法是利用短时傅里叶变换原理,估计出短时帧的瞬时频率,再乘以伸缩系数进行频谱伸缩。

3. 参量法

参量法中最具代表性的方法是基于正弦模型原理。
正弦模型是由Quatier等人在1980年提出,它是目前应用最广泛的语音模型。该模型将信号看作是一系列随时间变化的正弦信号叠加。
很显然,时间规整后瞬时频率不变,保证了音调不变,但是时间过程扩展为原来的倍。
变调不变速处理后,各个频率成分随系数拉伸或者收缩。
对应于浊音,为随时间变化的第一谐波,即基频;其他频率成分对应于其它谐波。
由上分析可知,基于正弦模型的变调方法最大难点在于提高谐波分析的精确度,降低参数估计的复杂度。

参考:
https://www.cnblogs.com/welen/p/3782896.html
https://librosa.org/doc/latest/generated/librosa.effects.pitch_shift.html?highlight=pitch_shift

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dr. 卷心菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值