stretchAudio
Time-stretch音频
描述
例子
使用TSM
读入音频信号。听音频信号,并绘制它随着时间的变化。
[audioIn,fs] = audioread(“Counting-16-44p1-mono-15secs.wav”);t = (0:size(audioIn,1)-1)/fs;情节(t, audioIn)包含(“时间(s)”) ylabel (“振幅”)标题(原始信号的)轴紧网格在
声音(audioIn fs)
使用stretchAudio
要应用1.5加速因子。听修改后的音频信号,并将其绘制成随时间变化的图。采样率保持不变,但信号的持续时间减少了。
audioOut = stretchAudio(audioIn,1.5);t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('修正信号,加速因子= 1.5')轴紧网格在
声音(audioOut fs)
将原始音频信号减慢0.75倍。听修改后的音频信号,并将其绘制成随时间变化的图。采样率保持与原始音频相同,但信号的持续时间增加了。
audioOut = stretchAudio(audioIn,0.75);t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题(修正信号,加速因子= 0.75)轴紧网格在
声音(audioOut fs)
将TSM应用于频域音频
stretchAudio
金宝app当使用默认的声码器方法时,支持频域音频的TSM。将TSM应用于频域音频使您可以对多个TSM因子重用STFT计算。
读入音频信号。听音频信号,并绘制它随着时间的变化。
[audioIn,fs] = audioread(“FemaleSpeech-16-8-mono-3secs.wav”);sound(audioIn,fs) t = (0:size(audioIn,1)-1)/fs;情节(t, audioIn)包含(“时间(s)”) ylabel (“振幅”)标题(原始信号的)轴紧网格在
将音频信号转换到频域。
Win =√(hann(256,“周期”));Ovrlp = 192;S = stft(audioIn,“窗口”,赢了,“OverlapLength”ovrlp,“中心”、假);
将音频信号加快1.4倍。指定用于创建频域表示的窗口和重叠长度。
Alpha = 1.4;audioOut = stretchAudio(S,alpha,“窗口”,赢了,“OverlapLength”, ovrlp);t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题(修改后的信号,TSM因子= 1.4)轴紧网格在
将音频信号放慢0.8倍。指定用于创建频域表示的窗口和重叠长度。
Alpha = 0.8;audioOut = stretchAudio(S,alpha,“窗口”,赢了,“OverlapLength”, ovrlp);t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('修正信号,TSM因子= 0.8')轴紧网格在
使用锁相提高保真度
默认的TSM方法(声码器)允许您额外应用锁相来提高原始音频的保真度。
读入音频信号。听音频信号,并绘制它随着时间的变化。
[audioIn,fs] = audioread(“SpeechDFT-16-8-mono-5secs.wav”);sound(audioIn,fs) t = (0:size(audioIn,1)-1)/fs;情节(t, audioIn)包含(“时间(s)”) ylabel (“振幅”)标题(原始信号的)轴紧网格在
锁相给TSM增加了不小的计算负荷,而且并不总是必需的。缺省情况下,锁相功能处于关闭状态。对输入音频信号应用1.8的加速因子。听音频信号,并绘制它随着时间的变化。
Alpha = 1.8;tic audioOut = stretchAudio(audioIn,alpha);processingTimeWithoutPhaseLocking = toc
processingTimeWithoutPhaseLocking = 0.0798
t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('修正信号,alpha = 1.8, LockPhase = false')轴紧网格在
对输入音频信号应用相同的1.8加速因子,这次启用锁相。听音频信号,并绘制它随着时间的变化。
tic audioOut = stretchAudio(audioIn,alpha,“LockPhase”,真正的);processingTimeWithPhaseLocking = toc
processingTimeWithPhaseLocking = 0.1154
t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('修正信号,alpha = 1.8, LockPhase = true')轴紧网格在
使用WSOLA Delta增加保真度
波形相似性重叠-添加(WSOLA) TSM方法使您能够指定最大样本数以搜索最佳信号对齐。默认情况下,WSOLA delta是分析窗口中的样本数量减去相邻分析窗口之间重叠的样本数量。增加WSOLA增量会增加计算负荷,但也可能提高保真度。
读入音频信号。请听音频信号的前10秒。
[audioIn,fs] = audioread(“rockguitar - 16 - 96立体声- 72 secs.flac”);声音(audioIn (1:10 * fs,:), fs)
使用WSOLA方法对输入音频信号应用0.75的TSM因子。听音频信号的前10秒。
Alpha = 0.75;tic audioOut = stretchAudio(audioIn,alpha,“方法”,“wsola”);processingTimeWithDefaultWSOLADelta = toc
processingTimeWithDefaultWSOLADelta = 19.4403
声音(audioOut (1:10 * fs,:), fs)
对输入音频信号应用0.75的TSM因子,这次将WSOLA增量增加到1024。听音频信号的前10秒。
tic audioOut = stretchAudio(audioIn,alpha,“方法”,“wsola”,“WSOLADelta”, 1024);processingtimewithincreedwsoladelta = toc
processingtimewithincreedwsoladelta = 25.5306
声音(audioOut (1:10 * fs,:), fs)
输入参数
audioIn
- - - - - -输入信号
列向量|矩阵|三维数组
输入信号,指定为列向量、矩阵或3-D数组。函数如何解释audioIn
取决于的复杂程度audioIn
而价值方法
:
如果
audioIn
是真实的,audioIn
被解释为时域信号。在这种情况下,audioIn
必须是列向量或矩阵。列被解释为单独的通道。此语法适用于以下情况:
方法
设置为声码器的
或“wsola”
.如果
audioIn
是复杂的,audioIn
被解释为频域信号。在这种情况下,audioIn
一定是l——- - - - - -米——- - - - - -N数组,l为FFT长度,米单个光谱的数量,和N是通道数。此语法仅适用于
方法
设置为声码器的
.
数据类型:单
|双
复数支持:金宝app是的
α
- - - - - -TSM因素
积极的标量
TSM因子,指定为正标量。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:“窗口”,kbdwin (512)
方法
- - - - - -用于时间尺度音频的方法
声码器的
(默认)|“wsola”
方法用于时间刻度音频,指定为由逗号分隔的对组成“方法”
而且声码器的
或“wsola”
.集“方法”
来声码器的
使用相位声码器方法。集“方法”
来“wsola”
使用WSOLA方法。
如果“方法”
设置为声码器的
,audioIn
可以是真实的,也可以是复杂的。如果“方法”
设置为“wsola”
,audioIn
一定是真的。
数据类型:单
|双
窗口
- - - - - -窗口应用于时域
√损害(1024年,“周期性”))
(默认)|真正的向量
窗口,指定为逗号分隔的对,由“窗口”
一个实向量。向量中的元素个数必须在[1,大小(
].向量中的元素个数也必须大于audioIn
,1)OverlapLength
.
请注意
如果使用stretchAudio
对于频域输入,必须指定窗口
与用于转换的窗口相同audioIn
到频域。
数据类型:单
|双
OverlapLength
- - - - - -相邻窗口之间重叠的样本数
轮(0.75 *元素个数(窗口
))
(默认)|在[0]范围内的标量元素个数(窗口
)
)
窗口
))窗口
)相邻窗口之间重叠的样本数,指定为由逗号分隔的对组成的“OverlapLength”
和一个范围为[0,元素个数(窗口)
).
请注意
如果使用stretchAudio
对于频域输入,必须指定OverlapLength
作为相同的重叠长度用于变换audioIn
到一个时频表示。
数据类型:单
|双
LockPhase
- - - - - -应用身份锁相
假
(默认)|真正的
WSOLADelta
- - - - - -用于搜索最佳信号对齐的最大样本
元素个数(窗口
)-OverlapLength
(默认)|负的标量
窗口
)-OverlapLength
输出参数
audioOut
-时间尺度修改音频
列向量|矩阵
时间尺度修改音频,返回为列向量或矩阵的独立频道。
算法
阶段声码器
WSOLA
WSOLA算法是TSM的时域方法[1][2].WSOLA是重叠和添加(OLA)算法的扩展。在OLA算法中,时域信号在η区间上加窗,其中η =数(
.为了构造时间尺度的修正输出音频,窗口间隔为δ,其中δ≈η/α。类型指定的TSM因子窗口
) -OverlapLength
α
输入参数。
OLA算法在重建幅度谱方面做得很好,但会在窗口之间引入相位跳变。WSOLA算法试图通过搜索来平滑相位跳跃WSOLADelta
在η区间附近进行采样,以使相跳最小化。该算法迭代搜索最佳窗口,因此每个后续窗口都是相对于先前选择的窗口选择的。
如果WSOLADelta
设置为0
,则算法简化为OLA。
参考文献
[1]德里杰,乔纳森,迈纳德Müller。音乐信号的时间尺度修改综述应用科学.2016年第2期第6卷
[2]德里杰,乔纳森。“音乐音频信号的时间尺度修改算法”,硕士论文,萨尔大学,Saarbrücken,德国,2011。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
版本历史
R2019b引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。