shiftPitch

转换音频音调

描述

音频输出= shiftPitch(AUDIOINnsemitones将音频输入的音高移动指定数量的半音,nsemitones

音频输出= shiftPitch(AUDIOINnsemitones名称,值使用一个或多个指定的选择名称,值对参数。

例子

全部收缩

在读取音频文件,听它。

[AUDIOIN,FS] = audioread('计数-16-44p1单 -  15secs.wav');声音(AUDIOIN,FS)

通过3个半音增加间距,听的结果。

nsemitones = 3;AUDIOOUT = shiftPitch(AUDIOIN,nsemitones);声音(AUDIOOUT,FS)

通过3个半音降低了原始音频的音调,听的结果。

nsemitones = -3;AUDIOOUT = shiftPitch(AUDIOIN,nsemitones);声音(AUDIOOUT,FS)

在读取音频文件,听它。

[AUDIOIN,FS] = audioread(“SpeechDFT-16-8-单5secs.wav”);声音(AUDIOIN,FS)

使用转换所述音频信号以一个时间 - 频率表示STFT。使用512点kbdwin用75%的重叠。

赢= kbdwin(512);overlapLength = 0.75 * numel(WIN);S = STFT(AUDIOIN,...“窗口”,赢得,...“OverlapLength”,overlapLength,...“中心”,假);

由8个半音增加俯仰,听的结果。指定用于计算STFT窗和重叠长度。

nsemitones =8;lockPhase =;AUDIOOUT = shiftPitch(S,nsemitones,...“窗口”,赢得,...“OverlapLength”,overlapLength,...“LockPhase”,lockPhase);声音(AUDIOOUT,FS)

由8个半音降低原始音频的音调,听的结果。指定用于计算STFT窗和重叠长度。

nsemitones =-8;lockPhase =;AUDIOOUT = shiftPitch(S,nsemitones,...“窗口”,赢得,...“OverlapLength”,overlapLength,...“LockPhase”,lockPhase);声音(AUDIOOUT,FS)

在读取音频文件,听它。

[AUDIOIN,FS] = audioread('FemaleSpeech-16-8-单3secs.wav');声音(AUDIOIN,FS)

由6个半音增加俯仰,听的结果。

nsemitones = 6;lockPhase = FALSE;AUDIOOUT = shiftPitch(AUDIOIN,nsemitones,...“LockPhase”,lockPhase);声音(AUDIOOUT,FS)

为了增加逼真度,组LockPhase真正。应用音高转换,并听取结果。

lockPhase = TRUE;AUDIOOUT = shiftPitch(AUDIOIN,nsemitones,...“LockPhase”,lockPhase);声音(AUDIOOUT,FS)

阅读音频文件的前11.5秒,然后听。

[AUDIOIN,FS] = audioread('彩虹-16-8-单114secs.wav'[1,8e3 * 11.5]);声音(AUDIOIN,FS)

通过4个半音增加俯仰和应用阶段锁定。听结果。得到的音频有一个听起来不自然了“花栗鼠效应”。

nsemitones =4;lockPhase =真正;AUDIOOUT = shiftPitch(AUDIOIN,nsemitones,...“LockPhase”,lockPhase);声音(AUDIOOUT,FS)

为了增加逼真度,组PreserveFormants真正。使用默认的倒谱序三十。听结果。

cepstralOrder =三十;AUDIOOUT = shiftPitch(AUDIOIN,nsemitones,...“LockPhase”,lockPhase,...“PreserveFormants”,真正,...“CepstralOrder”,cepstralOrder);声音(AUDIOOUT,FS)

输入参数

全部收缩

输入信号,指定为列向量,矩阵,或3-d阵列。如何解释功能AUDIOIN依赖于复杂AUDIOIN

  • 如果AUDIOIN是真实的,AUDIOIN被解释为一个时域信号。在这种情况下,AUDIOIN必须是一个列向量或矩阵。列被解释为单独的通道。

  • 如果AUDIOIN是复杂的,AUDIOIN被解释为一个频域信号。在这种情况下,AUDIOIN必须是大号——- - - - - -中号——- - - - - -ñ阵列,其中大号是FFT长度,中号是个人频谱的数量,和ñ是信道的数目。

数据类型:|
复数支持:万博1manbetx

半音数转向由音频,指定作为一个真正的标量。

范围nsemitones取决于窗口长度(numel(窗口)且重叠长度(OverlapLength):

-12 * LOG 2(numel(窗口) -OverlapLengthnsemitones-12 *的log 2((numel(窗口) -OverlapLength)/ numel(窗口))

数据类型:|

名称 - 值对参数

指定可选的用逗号分隔的对名称,值参数。名称是参数的名称和是对应的值。名称必须出现引号内。您可以按照任何顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:'窗口',kbdwin(512)

窗口在时域中应用,指定为逗号分隔的一对组成的'窗口'和一个真正的载体。在矢量元素的数量必须是在范围[1,尺寸(AUDIOIN,1)]。元件的载体中的数量也必须大于OverlapLength

注意

如果使用shiftPitch与频域输入,您必须指定窗口作为同一个窗口用于转化AUDIOIN到频域。

数据类型:|

相邻窗口之间重叠的样本数,指定为由'OverlapLength'和在范围[0的整数,numel(窗口))。

注意

如果使用shiftPitch与频域输入,您必须指定OverlapLength作为相同的重叠长度用于转化AUDIOIN到一个时频表示。

数据类型:|

应用身份锁相,指定为逗号分隔的一对组成的“LockPhase”要么真正

数据类型:合乎逻辑

蜜饯共振峰,指定为逗号分隔的一对组成的'PreserveFormants'真正要么。共振峰保存使用频谱包络估计与倒频谱分析尝试。

数据类型:合乎逻辑

倒谱为了用于共振峰保存,指定为逗号分隔的一对组成的'CepstralOrder'和一个非负整数。

依赖

为了使这个名字 - 值对参数,设置PreserveFormants真正

数据类型:|

输出参数

全部收缩

音高改变音频,返回作为独立信道的一个列向量或矩阵。

算法

全部收缩

采用间距移,shiftPitch修改使用相位声码器,然后音频的时标重新采样修改的音频。在时间比例修改算法是基于[1][2]并实现为stretchAudio

时标修改后,shiftPitch使用内插系数执行采样率转换等于分析跳跃长度和抽取因子等于合成跳长度。重采样阶段的内插和抽取因子被选择如下:分析跳跃长度被确定为analysisHopLength =元素个数(窗口) -OverlapLength。的shiftPitch函数假定有在一个八度12个半音,所以加速因子用来拉伸该音频是speedupFactor = 2 ^( -nsemitones/ 12)。加速比和分析跳长度确定时标修改作为合成跳长度synthesisHopLength = ROUND((1 / SpeedupFactor)* analysisHopLength)

可达到的音高移位由窗口长度决定(numel(窗口)和OverlapLength。要查看的关系,请注意,加速比公式可改写为:nsemitones= -12 *的log 2(speedupFactor)和用于合成跳跃长度的方程可以改写为speedupFactor = analysisHopLengh / synthesisHopLength。使用简单的替换,nsemitones = -12 *的log 2(analysisHopLength / synthesisHopLength)。合成跳跃长度的实际范围为[1,numel(窗口]。可实现的间距偏移的范围是:

  • 半音的最大数目降低:-12 * LOG 2(numel(窗口) -OverlapLength

  • 半音的最大数量提出:-12 *的log 2((numel(窗口) -OverlapLength)/ numel(窗口))

共振峰保存

移调可改变音高改变信号的频谱包络。为了减少这种效果,你可以设置PreserveFormants真正。如果PreserveFormants被设置为真正中,该算法试图在倒谱域中使用迭代过程估计频谱包络线,如在[3][4]。对于原来的频谱上,X和变距谱,ÿ中,该算法估计频谱包络线如下。

对于第一次迭代,EnvX一个被设置为X。然后,算法重复循环这两个步骤:

  1. 低通滤波器的倒谱表示EnvX一个得到一个新的估计,EnvXb。的CepstralOrder参数控制逆频带宽。

  2. 为了更新当前的最佳拟合,算法取当前的谱包络估计和之前的谱包络估计的逐元素最大值:

    Ë ñ v X 一个 = 最大 Ë ñ v X 一个 Ë ñ v X b

的循环结束,如果任一迭代的最大数目(100)达到,或者如果估计数包络的所有纸槽是原始日志给光谱公差范围内。容差设置为日志(10 ^(1/20))

最后,该算法缩放音高改变音频的由估计信封,逐元素的比例光谱:

ÿ = ÿ × Ë ñ v X b Ë ñ v ÿ b

参考文献

[1] Driedger,乔纳森,和Meinard穆勒。“回顾音乐信号的时标修改的。”应用科学。卷。6,第2期,2016。

[2] Driedger,乔纳森。“时标修改算法音乐音频信号。”硕士论文。萨尔大学,德国萨尔布吕肯,2011。

[3] Axel Roebel和Xavier Rodet。有效的谱包络估计及其在基音偏移和包络保存中的应用。International Conference on Digital Audio Effects, pp. 30–35. Madrid, Spain, September 2005. hal-01161334

[4] S.今井,和Y.安倍。“改良倒谱法谱包络提取”。电子。和COMMUN。在日本。卷。62-A,第4期,1997年,第10-17。

扩展功能

C / C ++代码生成
生成使用MATLAB®编码器™C和C ++代码。

介绍了在R2019b