音乐信号时域压扩综述(上)

本文翻译自Jonathan Driedger和Meinard Müller的经典文章《A Review of Time-Scale Modification of Music Signals》,受个人水平所限未能精确传达原文内容,建议优先查阅原文。

摘要:时域压扩(Time-scale modification,TSM)用于加速或减慢音频信号的播放速度而不改变它的音调。在数字音乐制作中,TSM已经成为不可或缺的工具,被广泛集成在各类音乐制作软件中。音乐信号成分复杂,包含和声、敲击、瞬态等成分。由于声音与音乐特征过于广泛,并不存在一种TSM方法能对所有类型的音频信号都有良好的效果。本文的主要目标是让大家更好的理解TSM方法的能力和限制。为达到此目的,我们将回顾基础的TSM方法,讨论典型的挑战,并指出由多种策略组成的潜在解决方案。另外我们会讨论一种由和声-打击声(harmonic-percussive)分离、时域TSM、频域TSM融合而成的方法。


1. 引言

TSM用于拉伸或压缩给定音频信号的时长。理想情况下,TSM处理后的音频信号速度改变,但音调和音色不变。TSM被应用于各种场景,譬如简化了音乐混音的创作过程。音乐创作者或DJ利用TSM调整音乐时长以实现同步。现在TSM会被集成在音乐制作软件和硬件设备中。TSM的另一类应用场景是视频剪辑中调整音频流时长,譬如生成慢镜头视频时,通常需要放慢对应音频的节拍,这类场景中TSM可以用来实现音频素材与视频画面的同步。

TSM面临的主要挑战是音乐信号由各种声音混音而成,譬如小提琴搭配响板演奏的录音,对这种信号进行TSM处理时,既希望保留小提琴的和声,又希望保留响板的打击声。为还原小提琴的声音,需要保留它的音高和音色。另一方面,响板的音高并不重要,重要的是保留每次敲击的清脆响声和敲击的相对时间,从而保留它的节奏。保留这些截然不同的音频特性往往需要不同的TSM方法。譬如经典的基于波形相似叠加(WSOLA)或相位声码器(PV-TSM)的TSM方法可以很好地保留和声信号,但处理打击乐时会引入明显的失真。这些失真可以通过融合不同的TSM方法得到缓解,譬如先将给定的音频裁成和声片段和打击乐片段并用不同的TSM方法处理,然后再拼接得到最终输出的信号。

本文首先回顾经典的TSM方法并讨论它们的优缺点,以此加深对TSM算法和它所面临的挑战的理解;然后指出这些经典方法的关键缺陷,并通过例子展示如何结合不同的算法来改进效果。本文先介绍被多种TSM方法引用的基础TSM策略(第2节)并讨论一种基于重叠相加(overlap-add,第3节)的简单TSM方法。然后我们回顾两种概念迥异的TSM方法:时域的WSOLA(第4节)和频域的PV-TSM(第5节)。接着我们分析一种结合了和声-打击声分离技术(第6节)从而提升WSOLA与PV-TSM效果的先进TSM方法。最后我们指出TSM的应用场景(譬如音乐同步与变调)并介绍一些可免费获取的TSM实现(第7节)。

2. TSM基础

如上文所述,TSM的关键需求是调整给定音频的时长而不改变音调。为达此目的,许多TSM方法都会遵循如下图1所示的策略。其关键思想是将输入信号分离成若干帧,这些帧长度相同,一般为50~100ms,每帧包含信号的音调信息。然后在时间轴上对这些帧进行重排,从而调整音频的时长而不改变音调。

图1 TSM的一般处理流程

该过程可以更精确地表述如下:TSM的输入信号为离散的时域信号x:Z\to R,以采样率F_{s}等间隔采样。音频信号一般长度有限,长度为L\in N个采样点, 对于x(r)r\in [0:L - 1]:=\{0,1,...,L-1\}, 为简单起见,我们将它定义为无限长度信号,当r\in Z \setminus [0:L - 1]时,x(r)=0。TSM处理的第一步是将x分离成多个短时分析帧x_{m}, m\in Z,每个短时分析帧长度为N个采样点。帧间隔由分析间隔(Analysis hopsize)H_{a}决定:x_{m}(r)=\begin{cases} x(r+mH_{a}), \space if\space r \in [-N/2:N/2-1], \\ 0,\qquad \qquad \quad otherwise \end{cases} \qquad (1)
在第二步中,这些帧在时间轴上按合成间隔(synthesis hopsize)H_{s}重排。重排操作将导致输入信号的长度按a=H_{s}/H_{a}的比例伸缩。重排操作中帧与帧重叠的比例一般是固定,因此H_{s}往往也是固定的(常见取值为H_{s}=N/2或H_{s}=N/4),H_{a}H_{s}a决定,即H_{a}=H_{s}/a。然而简单的重排操作往往会引入失真,譬如帧边界上的相位不连续或幅度波动。因此在重建信号前,分析帧会经过适当的调整以形成合成帧y_{m}。最后一步是将合成帧重排以得到TSM的输出信号y:Z\to R:y(r)=\sum_{m\in Z}^{} y_{m}(r-mH_{s})\qquad \qquad \qquad (2)
尽管该策略看起来简单易懂,但其中有不少陷阱和设计选择会强烈影响TSM输出信号的感知质量。其中最显而易见的问题是如何调整分析帧x_{m}以形成合成帧y_{m},该问题的不同处理思路得出不同的TSM方法,下面将介绍其中的几种方法。

3. 基于重叠相加(OLA)的TSM

3.1. 处理过程

在上一节描述的处理过程中,最简单的方法是定义合成帧y_{m}与分析帧x_{m}相等,不对分析帧作任何处理。该方法会导致图2所示的两个问题。问题1:用公式(2)重建信号得到的波形在帧边界处不连续,这会引起可感知的咔嗒声。问题2:一般会选择H_{s}大小让合成帧发生重叠,重叠部分会引起幅度的增加。

图2 当合成帧和分析帧相同会出现的典型缺陷。输入信号x按a=1.8的比例拉伸。输出信号y波形不连续(蓝色椭圆处),且幅度波动(见蓝色直线)

一个基本的TSM方法应该确保拼接处平滑过渡,且抑制幅度波动。重叠相加(OLA)的TSM方法在重建输出信号y前对分析帧应用窗函数w。窗函数的目的是移除分析帧边缘的波形不连续,w的典型选择是汉宁窗w(r)=\begin{cases} 0.5(1-cos(\frac{2\pi(r+N/2)}{N-1} )),\space if\space r\in [-N/2:N/2-1]\\0 \qquad \qquad \qquad \qquad \qquad otherwise \end{cases}\qquad (3)

汉宁窗有一个很好的属性\sum_{n\in Z}^{}w(r-n\frac{N}{2} )=1 \qquad (4)
图3展示了这种迭代的OLA过程。对于帧索引m\in Z,我们首先利用公式1计算出第m个分析帧x_{m}(图3a)。然后通过以下公式计算出合成帧y_{m} y_{m}(r)=w(r)x_{m}(r)/\sum_{n\in Z}^{}w(r-nH_{s}) \qquad \qquad (5)

公式5的分子由分析帧与窗函数逐点相乘得到,分母通过将重叠的窗函数相加对分析帧规范化,从而避免输出信号幅度波动。值得一提的是当w选择汉宁窗且H_{s}=N/2,根据公式4可知分母一直是1。这就是图3b展示的例子,合成帧的幅度在加到输出信号y前不会被调整。处理到下一个分析帧x_{m+1}时(图3c),该分析帧也被加窗,与上一个合成帧重叠相加,得到输出信号(图3d)。图3展示了对信号压缩的情况(H_{a}>H_{s}),拉伸信号(H_{a}<H_{s})原理与此相同。在拉伸的场景下,分析帧重叠的部分比合成帧多。

图3 基于OLA的TSM原理。(a)输入信号x与分析帧xm,输出信号y按帧迭代生成;(b)应用汉宁窗w到分析帧xm得到合成帧ym;(c)两个分析帧的间隔为Ha;(d)合成帧按Hs的间隔叠加

OLA是时域TSM方法的例子,它对分析帧的修改作用在时域。一般而言,时域TSM方法不仅高效,而且能很好地保留输入信号的音色,而缺点则是输出信号包含各种失真,接下来我们介绍这些失真。

3.2. 失真

OLA方法无法保留输入信号的周期性结构。如图4所示,周期性输入信号xa=1.8的系数用OLA方法拉伸。重排分析帧时,x的周期性结构在分析帧上不再保持对齐。结果输出信号y上的周期结构已经发生畸变。这些畸变也被称作相位跳变失真(phase jump artifacts)。由于输入信号的周期性波形对应和声(harmonic sounds),OLA并不适合用于修改包含谐波成分的信号,当OLA作用于这类信号,输出信号会包含一种独特的颤音。因为音乐信号总会包含若干谐波源(如歌声、钢琴、小提琴、吉他),OLA通常并不适合用来修改音乐信号。

图4 OLA修改音频信号引起的典型失真示例。输入信号x以a=1.8的系数拉伸。OLA处理过程通过两个由窗函数标记的帧展示。输出信号y并未保留输入信号x中的周期性结构。

3.3. 处理技巧

OLA并不适合用于修改包含谐波内容的音频信号,但它能很好地还原鼓或响板产生的敲击信号。这是因为敲击信号几乎没有周期性结构,因此输出信号中由OLA引起的相位跳变失真难以被察觉。该场景下,选择小的帧长N(大约10ms)从而降低transient重复失真的影响很重要,这种失真我们将在4.2小节详细介绍。

4. 基于波形相似重叠相加(WSOLA)的TSM

4.1. 处理过程

OLA的一个问题是它缺乏对信号的感知:加窗的分析帧从输入信号的固定位置拷贝到输出信号的固定位置。换句话说,输入信号并不影响处理过程。一种时域上减小OLA引起的相位跳变失真影响的策略是在TSM处理过程中允许分析帧或合成帧位置适当偏移从而引入一些灵活性。其主要思想是调整连续的合成帧的位置以保证每帧时域波形的周期性结构在重叠部分是连续的,因此输入信号中的周期性结构得以保留到输出信号中。许多该思想的变种在文献中被描述,如同步OLA(SOLA),时域音高同步(*time-domain pitch-synchronized *)OLA,以及一些基于自相关的方法。


图5 WSOLA的基本原理。(a)输入信号x与调整后的分析帧x'm。帧被加窗并拷贝到输出信号y;(b,c)从扩展帧区域(蓝色实线矩形框)中找出一个和调整后的分析帧x'm的后续帧(蓝色虚线矩形框)最相似的帧;(d)调整后的分析帧x'm+1加窗并拷贝到输出信号y

另一种著名的方法叫基于波形相似重叠相加法(waveform similarity-based OLA, WSOLA)。该方法的主要思想是允许分析帧位置进行轻微偏移(不超过\pm \Delta _{max} \in Z个采样点)。图5展示了WSOLA的主要原理。与OLA类似,WSOLA以迭代方式处理。假设第m次迭代中分析帧x_{m}的位置偏移了\Delta _{m} \in [-\Delta _{max}:\Delta _{max}]个采样点。我们将调整后的分析帧称作{x}' _{m}(图5a):
{x}' _{m}(r)=\begin{cases} x(r+mH_{a}+\Delta _{m}),\quad if\space r\in [-N/2:N/2-1],\\0,\qquad \qquad \qquad \qquad otherwise \end{cases} \qquad (6)

和OLA一样,调整后的分析帧{x}' _{m}加窗并拷贝到输出信号y(图5a)。现在我们需要调整下一个分析帧x_{m+1}的位置。该任务可看作约束最优化问题。我们的目标是找到最佳偏移索引\Delta _{m+1} \in [-\Delta _{max}:\Delta _{max}],让调整后的分析帧{x}' _{m+1}的周期性结构与上一个合成帧y_{m}的周期性结构在以H_{s}为分析步长产生的重叠区域上尽可能对齐。在无约束场景下,调整后的分析帧{x}' _{m+1}的最佳选择是调整后的分析帧{x}' _{m}的后续帧\tilde{x} _{m}((图5b中的蓝色虚线矩形框)):
\tilde{x} _{m}\begin{cases} x(r+mH_{a}+\Delta _{m}+H_{s}),\quad if\space r\in [-N/2:N/2-1],\\0,\qquad \qquad \qquad \qquad \qquad \quad otherwise \end{cases} \qquad (7)
此时调整后的分析帧{x}' _{m}和合成帧y_{m}是相同的,因此后续帧\tilde{x} _{m}和分析帧y_{m}按分析间隔H_{s}叠加时其结构也是完美对齐的(图5b)。然而由于条件\Delta _{m+1} \in [-\Delta _{max}:\Delta _{max}]的约束,调整后的分析帧{x}' _{m+1}必须位于扩展帧区域x^{+} _{m+1}(图5b的蓝色实线矩形框)内:
x^{+} _{m+1}\begin{cases} x(r+(m+1)H_{a}),\quad if\space r\in [-N/2-\Delta _{max}:N/2-1+\Delta _{max}],\\0,\qquad \qquad \qquad \qquad \qquad \quad otherwise \end{cases} \qquad (8)
因此,在区域x^{+} _{m+1}中找到波形和\tilde{x} _{m}最相似的帧就是调整后的分析帧{x}' _{m+1}。为达到此目的,我们需要一种方法衡量帧与帧的相似性。一种可能的衡量标准是互相关
c(q,p,\Delta )=\sum_{r\in Z}^{} q(r)p(r+\Delta )\qquad (9)
其中信号q和信号p偏移了\Delta个采样点。通过最大化\tilde{x} _{m}x^{+} _{m+1}的互相关,我们可以算出最佳偏移索引\Delta _{m+1}
\Delta _{m+1}=\underset{\Delta \in [-\Delta _{max}:\Delta _{max}]}{argmax} \quad c(\tilde{x} _{m},x_{m+1}^{+} ,\Delta )\qquad (10)

偏移索引\Delta _{m+1}定义了调整后的分析帧{x}' _{m+1}位于扩展帧区域x^{+} _{m+1}(图5c)。与OLA类似,最后我们通过以下公式算出合成帧y_{m+1}
y_{m+1}(r)=\frac{w(r)x(r+(m+1)H_{a}+\Delta _{m+1})}{\sum w(r-nH_{s})} \qquad (11)
再利用公式2即可重建输出信号y(图5d)。在实践中,我们在帧索引m=0处开始最优迭代处理,并假设\Delta _{0}=0

4.2. 失真

如图6(WSOLA)和图4(OLA)所示,WSOLA能改善OLA的一些缺陷,但它仍然会引入时域TSM导致的典型失真。


图6 WSOLA能保留周期性结构。输入信号x与图4相同,拉伸系数同样为a=1.8
图7 通常由WOSOLA引起的transient重复失真

类WSOLA方法的一个显著问题被称作transient重复stuttering(口吃)。该失真如图7所示,我们可以看到输入信号x的一个transient(瞬态变化)位于两个连续分析帧{x}' _{m}{x}' _{m+1}的重叠区域内。当这些帧被拷贝并重排到输出信号,transient重复出现,我们将听到两个连续的transient信号。一个相关的失真叫transient丢失,指由于没有分析帧包含该transient,该transient经过处理后丢失。拉伸信号(a>1)时容易出现transient重复,而transient丢失一般出现在压缩信号(a<1)时。该失真在修改包含打击成分的信号时(如鼓、钢琴等乐器的录音)容易出现。

另外,使用WSOLA修改复调(polyphonic)的输入信号时(如管弦乐)常常会引入颤音。这是因为WSOLA从设计上就只能保留输入波形中最明显的周期性结构,当修改包含多个谐波声源的信号时,只有占主导地位的声源被保留下来,其余的声源则会引起相位跳变失真。因此WSOLA适合修改单声调的信号,而不适合修改更复杂的信号。

4.3. 处理技巧

为了确保WSOLA能适应输入波形中最显著的周期性结构,一帧至少包含完整的一个周期。另外\Delta _{max}需要足够大以支持适当的偏移,因此它至少是周期长度的一半。假设人耳能听到的最低频率为20Hz,一个常见的帧长N的选择是50ms,\Delta _{max}为25ms。

减少WSOLA的transient重复transient丢失失真的一种方法是应用transient保留策略。其主要思想是先检测出transient的位置,用WSOLA处理transient附近的信号时将分析间隔H_{a}和合成间隔H_{s}暂时设置成一样,这样transient及其附近的信号会被不加修改地拷贝到输出信号,从而避免transient重复transient丢失失真。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容