主要内容

shiftPitch

转换音频音调

描述

例子

audioOut= shiftPitch (audioIn,nsemitones)的音高变化半音来指定数量的音频输入,nsemitones

例子

audioOut= shiftPitch (audioIn,nsemitones,名称,值)使用一个或多个指定选项名称,值对参数。

例子

全部折叠

读入一个音频文件,听它。

[audioIn, fs] = audioread (“Counting-16-44p1-mono-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-mono-5secs.wav”);声音(audioIn fs)

将音频信号转换为使用时频表示stft。使用512点kbdwin有75%的重叠。

赢得= kbdwin (512);overlapLength = 0.75 *元素个数(赢得);S = stft (audioIn“窗口”,赢了,“OverlapLength”overlapLength,“中心”、假);

球场增加8半音来听结果。指定窗口用于计算STFT和重叠长度。

nsemitones =8;lockPhase =;nsemitones audioOut = shiftPitch(年代,“窗口”,赢了,“OverlapLength”overlapLength,“LockPhase”,lockPhase);声音(audioOut fs)

由8个半音来减少螺距的原始音频,听结果。指定窗口用于计算STFT和重叠长度。

nsemitones =8;lockPhase =;nsemitones audioOut = shiftPitch(年代,“窗口”,赢了,“OverlapLength”overlapLength,“LockPhase”,lockPhase);声音(audioOut fs)

读入一个音频文件,听它。

[audioIn, fs] = audioread (“FemaleSpeech-16-8-mono-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 mono - 114 secs.wav”,1,8 e3 * 11.5);声音(audioIn fs)

增加球场4半音来锁定和应用阶段。听结果。由此产生的音频有“花栗鼠效应”,听起来不自然。

nsemitones =4;lockPhase =真正的;audioOut = shiftPitch (audioIn nsemitones,“LockPhase”,lockPhase);声音(audioOut fs)

增加忠诚,集PreserveFormants真正的。使用默认cepstral秩序30.。听结果。

cepstralOrder =30.;audioOut = shiftPitch (audioIn nsemitones,“LockPhase”lockPhase,“PreserveFormants”,真的,“CepstralOrder”,cepstralOrder);声音(audioOut fs)

输入参数

全部折叠

输入信号,指定为一个列向量,矩阵,或三维数组。函数如何解释audioIn取决于的复杂性audioIn:

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

  • 如果audioIn是复杂的,audioIn被解释为一个频域的信号。在这种情况下,audioIn必须是一个l——- - - - - -——- - - - - -N数组,l是FFT长度,是个体数量的光谱,N通道的数量。

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

半音来改变音频的数量,指定为一个真正的标量。

的范围nsemitones取决于窗口长度(元素个数(窗口))和重叠长度(OverlapLength):

-12 * log2(元素个数(窗口)- - -OverlapLength)nsemitones-12 * log2((元素个数(窗口)- - -OverlapLength)/元素个数(窗口))

数据类型:|

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:“窗口”,kbdwin (512)

应用于时域窗口,指定为逗号分隔组成的“窗口”和一个真正的向量。向量中的元素的数量必须在[1,大小(audioIn,1)]。向量中的元素的数量也必须大于OverlapLength

请注意

如果使用shiftPitch与频域输入,您必须指定窗口同一个窗口用于转换audioIn频域。

数据类型:|

数量的样本之间的重叠相邻窗口,指定为逗号分隔组成的“OverlapLength”和一个整数范围在[0,元素个数(窗口))。

请注意

如果使用shiftPitch与频域输入,您必须指定OverlapLength相同的重叠长度用来变换audioIn时频表示。

数据类型:|

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

数据类型:逻辑

保留了共振峰,指定为逗号分隔组成的“PreserveFormants”真正的。共振峰保存企图用谱包络估计cepstral分析。

数据类型:逻辑

Cepstral订单用于共振峰保存,指定为逗号分隔组成的“CepstralOrder”和一个非负整数。

依赖关系

要启用这个名称-值对参数,设置PreserveFormants真正的

数据类型:|

输出参数

全部折叠

Pitch-shifted音频,返回的列向量或矩阵独立通道。

算法

全部折叠

应用转移,shiftPitch使用一个阶段声码器修改时间尺度的音频,然后重新取样修改后的音频。修改算法是基于时间尺度[1][2]和实现stretchAudio

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

可实现的音高变化是由窗口长度(元素个数(窗口)),OverlapLength。的关系,注意,加速系数的方程可以写成:nsemitones= -12 * log2 (speedupFactor)合成跳,方程可以写成长度speedupFactor = analysisHopLengh / synthesisHopLength。使用简单的替换,nsemitones = -12 * log2 (analysisHopLength / synthesisHopLength)。合成跳长度的实用范围是[1,元素个数(窗口)]。可实现的音高变化的范围是:

  • 最大数量的半音来降低:-12 * log2(元素个数(窗口)- - -OverlapLength)

  • 马克思提出半音来的数量:-12 * log2((元素个数(窗口)- - -OverlapLength)/元素个数(窗口))

共振峰保存

音高变化可以改变pitch-shifted信号包络谱。为了减少这种效果,你可以设置PreserveFormants真正的。如果PreserveFormants被设置为真正的,该算法试图估计谱包络cepstral域使用一个迭代过程,所述[3][4]。对原始光谱,Xpitch-shifted频谱,Y,该算法估计谱包络如下。

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

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

  2. 更新当前最佳匹配,该算法将中的元素最大的电流包络谱估计和前面的谱包络估计:

    E n v X 一个 = 马克斯 ( E n v X 一个 , E n v X b )

如果一个循环结束最大迭代次数(One hundred.),或者如果所有箱子的日志包络估计在给定的公差原始日志的光谱。宽容是集日志(10 ^ (1/20))

最后,算法尺度的频谱pitch-shifted音频的比率估计信封,element-wise:

Y = Y × ( E n v X b E n v Y b )

引用

[1]Driedger, Johnathan, Meinard穆勒。“回顾时标修改音乐信号。”应用科学。问题2卷。6日,2016年。

[2]Driedger, Johnathan。“时间尺度修正算法对音乐音频信号。”米一个ster's Thesis. Saarland University, Saarbrücken, Germany, 2011.

[3]Axel Roebel和泽维尔Rodet。“高效频谱包络估计及其应用沥青转移和信封保存。”International Conference on Digital Audio Effects, pp. 30–35. Madrid, Spain, September 2005. hal-01161334

安倍[4]美国Imai, y。“谱包络提取改进cepstral方法。”电子。和Commun。在日本。卷。62年,问题4,1997 - 17页。

扩展功能

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

版本历史

介绍了R2019b