主要内容

stretchAudio

Time-stretch音频

描述

例子

audioOut= stretchAudio (audioInα通过TSM因子对输入音频应用时间刻度修改(TSM)α

例子

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

例子

全部折叠

读取音频信号。听音频信号,并绘制它的时间。

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

Figure包含一个轴对象。标题为“原始信号”的轴对象包含一个类型为line的对象。

声音(audioIn fs)

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

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

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

声音(audioOut fs)

将原始音频信号降低0.75倍。倾听修改后的音频信号,并绘制出它随时间的变化。采样率与原始音频保持不变,但信号持续时间增加。

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

Figure包含一个轴对象。标题为Modified Signal, Speedup Factor = 0.75的轴对象包含一个类型为line的对象。

声音(audioOut fs)

stretchAudio万博1manbetx当使用默认的声码器方法时,支持在频域音频上的TSM。将TSM应用于频域音频,可以为多个TSM因子重用STFT计算。

读取音频信号。听音频信号,并绘制它的时间。

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

Figure包含一个轴对象。标题为“原始信号”的轴对象包含一个类型为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’)轴网格

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

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

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

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

缺省的TSM方法(声码器)允许您附加地应用锁相以提高原始音频的保真度。

读取音频信号。听音频信号,并绘制它的时间。

[audioIn, fs] = audioread (“SpeechDFT-16-8-mono-5secs.wav”);t = (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 (“振幅”)标题('修改的信号,alpha = 1.8, LockPhase = false')轴网格

对输入音频信号应用相同的1.8加速因子,这次启用锁相。听音频信号,并绘制它的时间。

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) 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;audioOut = stretchAudio(audioIn,alpha,“方法”“wsola”);processingTimeWithDefaultWSOLADelta = toc
processingTimeWithDefaultWSOLADelta = 19.4403
声音(audioOut (1:10 * fs,:), fs)

对输入音频信号应用0.75的TSM因子,这次将WSOLA增量增加到1024。听产生的音频信号的前10秒。

audioOut = stretchAudio(audioIn,alpha,“方法”“wsola”“WSOLADelta”, 1024);processingTimeWithIncreasedWSOLADelta = toc
processingTimeWithIncreasedWSOLADelta = 25.5306
声音(audioOut (1:10 * fs,:), fs)

输入参数

全部折叠

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

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

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

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

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

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

TSM因子,指定为正标量。

数据类型:|

名称-值参数

指定可选的逗号分隔对名称,值参数。的名字参数名是和吗价值对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“窗口”,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. 为了保持垂直(跨单个光谱)的相位一致性,该算法将箱组的相位前进锁定为局部峰值的相位前进。此步骤仅适用于ifLockPhase被设置为真正的

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

WSOLA

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

OLA算法在重建幅度谱方面做得很好,但会引入窗口间的相位跳跃。WSOLA算法试图通过搜索来平滑相位跳转WSOLADelta样本在η区间的一个窗口,使相位跳跃最小化。该算法迭代搜索最佳窗口,使每个连续窗口相对于之前选择的窗口被选择。

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

参考文献

[1] Driedger, Johnathan和Meinard Müller。音乐信号的时标修正研究进展应用科学.2016年第2期第6卷。

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

扩展功能

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

介绍了R2019b