主要内容

shiftPitch

转换音频音调

描述

实例

audioOut= shiftPitch (audioIn,米托酮)将音频输入的音高转换为指定数量的半音,米托酮

实例

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

例子

全部崩溃

读一个音频文件并听它。

[audioIn, fs] = audioread (“计数-16-44p1-mono-15秒波形”);声音(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...“窗口”,赢了,...“重叠长度”,重叠长度,...“中心”、假);

将音高增加8个半音,然后聆听结果。指定用于计算STFT的窗口和重叠长度。

nsemitones =8.;锁定阶段=错误的;nsemitones audioOut = shiftPitch(年代,...“窗口”,赢了,...“重叠长度”,重叠长度,...“锁定阶段”,锁定相位);声音(音频输出,fs)

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

nsemitones =-8;锁定阶段=错误的;nsemitones audioOut = shiftPitch(年代,...“窗口”,赢了,...“重叠长度”,重叠长度,...“锁定阶段”,锁定相位);声音(音频输出,fs)

读一个音频文件并听它。

[audioIn, fs] = audioread (“FemaleSpeech-16-8-mono-3sec.wav”);声音(audioIn fs)

将音高提高6个半音,然后听结果。

nsemitones = 6;lockPhase = false;audioOut = shiftPitch (audioIn nsemitones,...“LockPhase”,锁定相位);声音(音频输出,fs)

要增加保真度,请设置LockPhase真正的.应用音高转换,并听取结果。

lockPhase = true;audioOut = shiftPitch (audioIn nsemitones,...“LockPhase”,锁定相位);声音(音频输出,fs)

读入音频文件的前11.5秒并听它。

[audioIn, fs] = audioread (“彩虹- 16 - 8 mono - 114 secs.wav”,[1,8e3*11.5]);声音(音频输入,fs)

将音高增加4个半音并应用锁相。聆听结果。产生的音频有一种听起来不自然的“花栗鼠效应”。

nsemitones =4.;锁定阶段=真正的;audioOut = shiftPitch (audioIn nsemitones,...“锁定阶段”,锁定相位);声音(音频输出,fs)

要增加保真度,请设置PreserveFormants真正的.使用的默认倒谱顺序为30..听结果。

cepstralOrder =30.;audioOut = shiftPitch (audioIn nsemitones,...“锁定阶段”lockPhase,...“共振峰”,真的,...“CepstralOrder”,倒谱仪);声音(音频输出,fs)

输入参数

全部崩溃

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

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

  • 如果audioIn是复杂的,,audioIn被解释为频域信号。在这种情况下,audioIn一定是一个L——- - - - - -M——- - - - - -N数组,L为FFT长度,M是单个光谱的数目,和N是通道数。

数据类型:|
复数支持:金宝app是的

将音频移动的半音数,指定为实标量。

范围米托酮取决于窗长(努梅尔(窗口))及重叠长度(OverlapLength):

-12*log2(努梅尔)(窗口)-OverlapLength)米托酮-12 * log2((元素个数(窗口)-OverlapLength)/努梅尔(窗口))

数据类型:|

名称值参数

指定可选的逗号分隔的字符对名称、值参数。的名字是参数名和价值为对应值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:Name1, Value1,…,的家

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

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

笔记

如果使用shiftPitch对于频域输入,您必须指定窗口与用于变换的窗口相同audioIn到频域。

数据类型:|

相邻窗口之间重叠的样本数,指定为由逗号分隔的对组成“OverlapLength”和一个范围为[0,努梅尔(窗口)).

笔记

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

数据类型:|

应用标识锁相,指定为逗号分隔对,由“LockPhase”错误的真正的

数据类型:必然的

保留共振峰,指定为逗号分隔对,由“共振峰”真正的错误的.尝试用倒谱分析的谱包络估计来保存共振峰。

数据类型:必然的

倒谱顺序用于共振峰保留,指定为逗号分隔对,包括“倒谱仪”和一个非负整数。

依赖关系

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

数据类型:|

输出参数

全部崩溃

音高偏移音频,返回为独立通道的列向量或矩阵。

算法

全部崩溃

要应用调距,shiftPitch使用相位声码器修改音频的时间尺度,然后对修改后的音频重新采样。时间尺度修正算法是基于[1][2]并按中所示实施stretchAudio

时间尺度修改后,shiftPitch使用等于分析跳长的插值因子和等于合成跳长的抽取因子执行采样率转换。重采样阶段的插值因子和抽取因子选择如下:分析跳长确定为analysisHopLength =元素个数(窗口)-OverlapLength.的shiftPitch函数假定一个八度音阶中有12个半音,因此用于拉伸音频的加速因子为speedupFactor = 2 ^ (-米托酮/ 12).加速因子和分析跳长确定时间尺度修正的综合跳长为synthesisHopLength =圆((1 / SpeedupFactor) * analysisHopLength)

可实现的节距偏移由窗长(努梅尔(窗口)),OverlapLength.要查看关系,请注意加速系数的方程式可以改写为:米托酮=-12*log2(加速系数),合成跳长的方程可以改写为加速系数=分析跳跃长度/跳跃长度.使用简单的替换,nsemitones = -12 * log2 (analysisHopLength / synthesisHopLength).合成跳距的实际范围为[1,努梅尔(窗口)].可实现的音高转换范围为:

  • 降低最大半音数:-12*log2(努梅尔)(窗口)-OverlapLength)

  • 最大升半音数:-12 * log2((元素个数(窗口)-OverlapLength)/努梅尔(窗口))

共振峰保存

节距偏移可以改变节距偏移信号的谱包络。要减少这种效果,可以设置PreserveFormants真正的.如果PreserveFormants被设置为真正的,该算法尝试使用倒谱域中的迭代程序估计谱包络,如中所述[3][4].对于原始光谱,X,和pitch-shift频谱,Y,该算法估计光谱包络,如下所示。

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

  1. 低通滤波器的倒谱表示EnvXA.为了得到一个新的估计,EnvXB.的CepstralOrder参数控制频率带宽。

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

    E N v X A. = 最大值 ( E N v X A. , E N v X B )

如果最大迭代次数(One hundred.),或者估计的日志包络的所有箱子都在原始日志谱的给定容忍范围内。公差设置为日志(10^(1/20))

最后,该算法根据估计的包络线的比率缩放音调偏移音频的频谱,在元素方面:

Y = Y × ( E N v X B E N v Y B )

参考文献

[1] 《音乐信号的时间尺度修正评论》应用科学2016年第6卷第2期。

[2] 音乐音频信号的时间尺度修正算法〉,硕士论文,德国萨尔兰大学,萨尔布吕肯,2011年。

[3] Axel Roebel和Xavier Rodet。高效谱包络估计及其在俯仰移动和包络保存中的应用。数字音频效果国际会议,第30-35页。2005年9月,西班牙马德里。哈尔- 01161334

S. Imai和Y. Abe。改进倒谱法的光谱包络提取日本的电子和公社.第62-A卷,第4期,1997年,10-17页。

扩展功能

C / c++代码生成
使用Matlab®编码器生成C和C++代码™.

在R2019b中引入