stretchAudio

Time-stretch音频

描述

例子

音频输出= stretchAudio (AUDIOIN,α)通过TSM因子对输入音频应用时间尺度修改(TSM)α

例子

音频输出= stretchAudio (AUDIOIN,α,名称,值)使用一个或多个指定的选择名称,值对参数。

例子

全部折叠

读取音频信号。听音频信号,并绘制它随时间推移。

[AUDIOIN,FS] = audioread(“Counting-16-44p1-mono-15secs.wav”);T =(0:尺寸(AUDIOIN,1)-1)/ FS;情节(T,AUDIOIN)xlabel('时间(s)')ylabel(“振幅”)标题(原始信号的)轴网格

声音(audioIn fs)

使用stretchAudio申请1.5加速的因素。听修改后的音频信号,并随着时间的推移绘制它。采样率保持相同,但信号的持续时间减少了。

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

声音(AUDIOOUT,FS)

减慢原始音频信号的0.75倍。听修改后的音频信号,并随着时间的推移绘制它。采样率与原始音频保持一致,但信号的持续时间增加了。

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

声音(AUDIOOUT,FS)

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

读取音频信号。听音频信号,并绘制它随时间推移。

[AUDIOIN,FS] = audioread(“FemaleSpeech-16-8-mono-3secs.wav”);声音(AUDIOIN,FS)T =(0:尺寸(AUDIOIN,1)-1)/ FS;情节(T,AUDIOIN)xlabel('时间(s)')ylabel(“振幅”)标题(原始信号的)轴网格

转换音频信号到频域。

赢=开方(汉恩(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’)轴网格

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

α= 0.8;audioOut = stretchAudio(年代,α,'窗口',赢了,'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”);声音(AUDIOIN,FS)T =(0:尺寸(AUDIOIN,1)-1)/ FS;情节(T,AUDIOIN)xlabel('时间(s)')ylabel(“振幅”)标题(原始信号的)轴网格

锁相给TSM增加了相当大的计算负载,而且并不总是必需的。默认情况下,锁相是禁用的。对输入音频信号施加1.8的加速因子。听音频信号,并绘制它随时间推移。

α= 1.8;拉伸音频(audioIn,alpha);processingTimeWithoutPhaseLocking = toc
processingTimeWithoutPhaseLocking = 0.0798
t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含('时间(s)')ylabel(“振幅”)标题('修改的信号,α-= 1.8,LockPhase =假')轴网格

应用相同的1.8加速因子对输入音频信号,此时使相位锁定。听音频信号,并绘制它随时间推移。

抽动AUDIOOUT = stretchAudio(AUDIOIN,α,“LockPhase”,真正);processingTimeWithPhaseLocking = TOC
processingTimeWithPhaseLocking = 0.1154
t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含('时间(s)')ylabel(“振幅”)标题('修改的信号,α-= 1.8,LockPhase =真')轴网格

波形相似性的重叠相加(WSOLA)TSM方法,可以指定样品的最大数量来搜索最佳信号对准。默认情况下,WSOLA delta是样本的分析窗口的数量减相邻分析窗口之间重叠的样本数目。增加WSOLA三角洲增加了计算量,但也可能增加保真度。

读取音频信号。听音频信号的前10秒。

[AUDIOIN,FS] = audioread(“rockguitar - 16 - 96立体声- 72 secs.flac”);声音(audioIn (1:10 * fs,:), fs)

应用0.75 TSM因子使用WSOLA方法对输入音频信号。听得到的音频信号的第一个10秒。

α= 0.75;抽动AUDIOOUT = stretchAudio(AUDIOIN,α,“方法”,“WSOLA”);processingTimeWithDefaultWSOLADelta = toc
processingTimeWithDefaultWSOLADelta = 19.4403
声音(AUDIOOUT(1:10 * fs的,:),FS)

应用0.75 TSM因子对输入音频信号,此时增加了WSOLA增量为1024听得到的音频信号的第一个10秒。

抽动AUDIOOUT = stretchAudio(AUDIOIN,α,“方法”,“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'

数据类型:|

输出参数

全部折叠

时标修正的音频,返回作为独立信道的一个列向量或矩阵。

算法

全部折叠

阶段声码器

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

  1. 在间隔η,其中该算法的窗口的时域信号η=元素个数(窗口) -OverlapLength。然后窗口被转换到频域。

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

  3. 为了保持垂直(横跨单个谱)相一致,该算法锁定仓到的局部峰值的相位超前的基团的相位超前。此步骤只适用于LockPhase被设置为真正

  4. 该算法将修改后的谱图返回到时域,窗口间距为约,其中的≈sampling /样本抽样。参数指定的加速因子α输入参数。

WSOLA

WSOLA算法是一种求解TSM的时域方法[1][2]。WSOLA是重叠和添加(OLA)算法的扩展。在OLA算法中,时域信号的加窗时间为间隔时间η=元素个数(窗口) -OverlapLength。构造时间尺度修改的输出音频时,窗口被在间隔δ,其中δ≈η/α隔开。α是由指定的TSM因子α输入参数。

该OLA算法确实重现振幅谱的一个很好的工作,但可以介绍窗口之间的相位跳跃。该WSOLA算法试图平滑相位跳跃通过搜索WSOLADelta对最小化相位跳跃的窗口的时间间隔进行抽样。该算法迭代地搜索最佳窗口,以便每个后续窗口都相对于之前选择的窗口进行选择。

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

参考文献

德里杰、乔纳森和米纳德·穆勒。“回顾音乐信号的时间尺度修改。”应用科学。卷。6,第2期,2016。

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

扩展功能

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

介绍了R2019b