shiftPitch
转换音频音调
描述
的音高变化半音来指定数量的音频输入,audioOut
= shiftPitch (audioIn
,nsemitones
)nsemitones
。
使用一个或多个指定选项audioOut
= shiftPitch (audioIn
,nsemitones
,名称,值
)名称,值
对参数。
例子
Pitch-Shifting适用于时域音频
读入一个音频文件,听它。
[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)
Pitch-Shifting适用于频域音频
读入一个音频文件,听它。
[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
被解释为一个频域的信号。在这种情况下,audioIn
必须是一个l——- - - - - -米——- - - - - -N数组,l是FFT长度,米是个体数量的光谱,N通道的数量。
数据类型:单
|双
复数的支持:万博1manbetx是的
nsemitones
- - - - - -半音来改变音频的数量
真正的标量
半音来改变音频的数量,指定为一个真正的标量。
的范围nsemitones
取决于窗口长度(元素个数(
)和重叠长度(窗口
)OverlapLength
):
-12 * log2(元素个数(
≤窗口
)- - -OverlapLength
)nsemitones
≤-12 * log2((元素个数(
窗口
)- - -OverlapLength
)/元素个数(窗口
))
数据类型:单
|双
名称-值参数
指定可选的双参数作为Name1 = Value1,…,以=家
,在那里的名字
参数名称和吗价值
相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。
R2021a之前,用逗号来分隔每一个名称和值,并附上的名字
在报价。
例子:“窗口”,kbdwin (512)
窗口
- - - - - -应用于时域窗口
√损害(1024年,“周期性”))
(默认)|真正的向量
应用于时域窗口,指定为逗号分隔组成的“窗口”
和一个真正的向量。向量中的元素的数量必须在[1,大小(
]。向量中的元素的数量也必须大于audioIn
,1)OverlapLength
。
请注意
如果使用shiftPitch
与频域输入,您必须指定窗口
同一个窗口用于转换audioIn
频域。
数据类型:单
|双
OverlapLength
- - - - - -数量的样本之间的重叠相邻窗口
轮(0.75 *元素个数(窗口
))
(默认)|标量范围在[0,元素个数(窗口
)
)
窗口
))窗口
)数量的样本之间的重叠相邻窗口,指定为逗号分隔组成的“OverlapLength”
和一个整数范围在[0,元素个数(窗口)
)。
请注意
如果使用shiftPitch
与频域输入,您必须指定OverlapLength
相同的重叠长度用来变换audioIn
时频表示。
数据类型:单
|双
LockPhase
- - - - - -应用身份锁相
假
(默认)|真正的
应用身份锁相,指定为逗号分隔组成的“LockPhase”
和假
或真正的
。
数据类型:逻辑
PreserveFormants
- - - - - -保持共振峰
假
(默认)|真正的
保留了共振峰,指定为逗号分隔组成的“PreserveFormants”
和真正的
或假
。共振峰保存企图用谱包络估计cepstral分析。
数据类型:逻辑
CepstralOrder
- - - - - -Cepstral订单用于共振峰保存
30.(默认)|非负整数
Cepstral订单用于共振峰保存,指定为逗号分隔组成的“CepstralOrder”
和一个非负整数。
依赖关系
要启用这个名称-值对参数,设置PreserveFormants
来真正的
。
数据类型:单
|双
输出参数
audioOut
——Pitch-shifted音频
矩阵列向量|
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。然后,该算法在一个循环中重复这两个步骤:
低通滤波器的cepstral表示EnvX一个得到一个新的估计,EnvXb。的
CepstralOrder
参数控制同态频率带宽。更新当前最佳匹配,该算法将中的元素最大的电流包络谱估计和前面的谱包络估计:
如果一个循环结束最大迭代次数(One hundred.
),或者如果所有箱子的日志包络估计在给定的公差原始日志的光谱。宽容是集日志(10 ^ (1/20))
。
最后,算法尺度的频谱pitch-shifted音频的比率估计信封,element-wise:
引用
[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®编码器™。
GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。
使用笔记和限制:
LockPhase
必须设置为假
。使用
gpuArray
(并行计算工具箱)输入与shiftPitch
只建议GPU的计算能力7.0(“沃尔特”)或以上。其他硬件可能不提供任何性能优势。检查你的GPU计算能力,明白了ComputeCompability
的输出gpuDevice
(并行计算工具箱)函数。有关更多信息,请参见GPU的万博1manbetx支持版本(并行计算工具箱)。
在MATLAB GPU使用量的概述®,请参阅运行在GPU MATLAB函数(并行计算工具箱)。
版本历史
Abrir比如
这种版本modificada德埃斯特比如。害怕Desea abrir埃斯特比如con sus modificaciones吗?
第一de MATLAB
Ha事实clic en联合国围绕此时一个埃斯特第一de MATLAB:
Ejecute el第一introduciendolo en la ventana de第一de MATLAB。洛杉矶navegadores网络没有admiten第一de MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。