主要内容

stretchAudio

Time-stretch音频

描述

例子

audioOut= stretchAudio (audioInα通过TSM因子对输入音频进行时间标度修改α

例子

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

例子

全部折叠

读入音频信号。听音频信号并绘制时间图。

[audioIn, fs] = audioread (“Counting-16-44p1-mono-15secs.wav”);t =(0:大小(audioIn, 1) 1) / fs;情节(t, audioIn)包含(“时间(s)”) ylabel (“振幅”)标题(原始信号的)轴网格

图中包含一个axes对象。标题为Original Signal的axes对象包含一个类型为line的对象。

声音(audioIn fs)

使用stretchAudio应用1.5加速因子。听修改后的音频信号,并绘制其随时间变化的图形。采样率保持不变,但信号的持续时间减少了。

audioOut = stretchAudio (audioIn, 1.5);t =(0:大小(audioOut, 1) 1) / fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题(“修正信号,加速因子= 1.5”)轴网格

图中包含一个axes对象。标题为Modified Signal, Speedup Factor = 1.5的axes对象包含一个类型为line的对象。

声音(audioOut fs)

减慢原始音频信号0.75因子。听修改后的音频信号,并绘制其随时间变化的图形。采样率保持与原始音频相同,但信号的持续时间增加了。

audioOut = stretchAudio (audioIn, 0.75);t =(0:大小(audioOut, 1) 1) / fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('修正信号,加速因子= 0.75')轴网格

图中包含一个axes对象。标题为Modified Signal,加速因子= 0.75的axes对象包含一个类型为line的对象。

声音(audioOut fs)

stretchAudio在使用默认的声码器方法时,支持频域音频上的TSM。将TSM应用于频域音频使您能够对多个TSM因子重用STFT计算。

读入音频信号。听音频信号并绘制时间图。

[audioIn, fs] = audioread (“FemaleSpeech-16-8-mono-3secs.wav”);sound(audioIn,fs) = (0:size(audioIn,1)-1)/fs;情节(t, audioIn)包含(“时间(s)”) ylabel (“振幅”)标题(原始信号的)轴网格

图中包含一个axes对象。标题为Original Signal的axes对象包含一个类型为line的对象。

将音频信号转换到频域。

赢得=√损害(256“周期”));ovrlp = 192;S = stft (audioIn“窗口”,赢了,“OverlapLength”ovrlp,“中心”、假);

将音频信号加快1.4倍。指定用于创建频域表示的窗口和重叠长度。

α= 1.4;audioOut = stretchAudio(年代,α,“窗口”,赢了,“OverlapLength”, ovrlp);t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('修正信号,TSM因子= 1.4')轴网格

图中包含一个axes对象。标题为Modified Signal, TSM Factor = 1.4的axes对象包含一个类型为line的对象。

将音频信号降低0.8倍。指定用于创建频域表示的窗口和重叠长度。

α= 0.8;audioOut = stretchAudio(年代,α,“窗口”,赢了,“OverlapLength”, ovrlp);t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('修正信号,TSM因子= 0.8')轴网格

图中包含一个axes对象。标题为Modified Signal, TSM Factor = 0.8的axes对象包含一个类型为line的对象。

默认的TSM方法(声码器)允许您额外应用锁相以提高原始音频的保真度。

读入音频信号。听音频信号并绘制时间图。

[audioIn, fs] = audioread (“SpeechDFT-16-8-mono-5secs.wav”);sound(audioIn,fs) = (0:size(audioIn,1)-1)/fs;情节(t, audioIn)包含(“时间(s)”) ylabel (“振幅”)标题(原始信号的)轴网格

相位锁定为TSM增加了重要的计算负载,并且并不总是必需的。缺省情况下,锁相功能处于关闭状态。对输入音频信号应用1.8的加速因子。听音频信号并绘制时间图。

α= 1.8;tic audioOut = stretchAudio(audioIn,alpha);processingTimeWithoutPhaseLocking = toc
processingTimeWithoutPhaseLocking = 0.0798
t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含(“时间(s)”) ylabel (“振幅”)标题('Modified Signal, 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 (“振幅”)标题('Modified Signal, alpha = 1.8, LockPhase = true')轴网格

波形相似性重叠添加(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秒。

α= 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);processingTimeWithIncreasedWSOLADelta = toc
processingTimeWithIncreasedWSOLADelta = 25.5306
声音(audioOut (1:10 * fs,:), fs)

输入参数

全部折叠

输入信号,指定为列向量、矩阵或3-D数组。函数如何解释audioIn取决于的复杂性audioIn和价值方法

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

    此语法适用于以下情况:方法被设置为声码器的“wsola”

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

    此语法仅适用于以下情况方法被设置为声码器的

数据类型:|
复数的支持:是的

TSM因子,指定为正标量。

数据类型:|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

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

方法用于计时音频,指定为逗号分隔的对“方法”而且声码器的“wsola”.集“方法”声码器的使用相位声码器方法。集“方法”“wsola”使用WSOLA方法。

如果“方法”被设置为声码器的audioIn可以是真实的,也可以是复杂的。如果“方法”被设置为“wsola”audioIn必须是真实的。

数据类型:|

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

请注意

如果使用stretchAudio对于频域输入,必须指定窗口和用来变换的窗口一样audioIn到频域。

数据类型:|

相邻窗口之间重叠的样本数,用逗号分隔的对表示“OverlapLength”取值范围为[0]的整数,元素个数(窗口)).

请注意

如果使用stretchAudio对于频域输入,必须指定OverlapLength作为相同的重叠长度用于变换audioIn时间频率表示。

数据类型:|

应用身份锁相,指定为逗号分隔的对,由“LockPhase”而且真正的

依赖关系

若要启用此名称-值对参数,请设置方法声码器的

数据类型:逻辑

用于搜索最佳信号对齐的最大样本数,指定为逗号分隔的对,由“WSOLADelta”一个非负的标量。

依赖关系

若要启用此名称-值对参数,请设置方法“wsola”

数据类型:|

输出参数

全部折叠

时间尺度修改的音频,作为独立通道的列向量或矩阵返回。

算法

全部折叠

阶段声码器

相位声码器算法是TSM的一种频域算法[1][2].相位声码器算法的基本步骤为:

  1. 该算法在区间η处对时域信号进行窗口化,其中η=元素个数(窗口) - - -OverlapLength.然后将窗口转换到频域。

  2. 为了保持水平(跨时间)相位相干性,算法将每个bin视为一个独立的正弦信号,其相位通过累积其瞬时频率的估计来计算。

  3. 为了保持垂直相位相干性(跨越单个频谱),该算法将组bin的相位推进锁定到局部峰值的相位推进。此步骤仅适用于以下情况LockPhase被设置为真正的

  4. 该算法将修正后的谱图返回到时域,窗口间隔为δ,其中δ≈η/α。的加速因子α输入参数。

WSOLA

WSOLA算法是TSM的时域方法[1][2].WSOLA是重叠和相加(OLA)算法的扩展。在OLA算法中,时域信号在η区间加窗,其中η=元素个数(窗口) - - -OverlapLength.为了构建时间尺度的修正输出音频,窗口间隔为δ,其中δ≈η/α。的TSM因子α输入参数。

OLA算法能很好地重建幅值谱,但会在窗口之间引入相位跳变。WSOLA算法试图通过搜索来平滑相位跳跃WSOLADeltaη区间附近的采样窗口,使相位跳变最小化。该算法迭代地搜索最佳窗口,因此每个后续窗口都是相对于先前选择的窗口进行选择的。

如果WSOLADelta被设置为0,则算法简化为OLA。

参考文献

[1]德里杰,乔纳森和迈纳德Müller。《音乐信号的时间尺度修正综述》。应用科学.2016年第6卷第2期

[2] Driedger, Johnathan。“音乐音频信号的时间尺度修正算法”,硕士论文,萨尔大学,Saarbrücken,德国,2011。

扩展功能

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

版本历史

介绍了R2019b

Baidu
map