利用频谱分析实现音乐无缝隙过度

  在网文 Algorithm Uses Math to Blend Musical Notes Seamlessly [Video] 中介绍了一篇 MIT 学生 Henderson发表的一篇国际会议论文: AUDIO TRANSPORT: A GENERALIZED PORTAMENTO VIA OPTIMAL TRANSPORT , 实现将两段音乐进行平滑过渡的滑音音效(portamento)。 这篇论文在国际数字音效会议中被评为“最佳学生论文”奖。

  通常情况下, 在两个信号 f ( t ) , g ( t ) f\left( t \right),g\left( t \right) f(t),g(t) 之间进行切换,只需要使用一个插值因子 r ∈ ( 0 , 1 ) r \in \left( {0,1} \right) r(0,1) ,通过线性插值也可以实现两个信号之间的平滑过渡。 h ( t ) = r ⋅ f ( t ) + ( 1 − r ) ⋅ g ( t ) h\left( t \right) = r \cdot f\left( t \right) + \left( {1 - r} \right) \cdot g\left( t \right) h(t)=rf(t)+(1r)g(t) 这种切换没有考虑两个信号内部的结构,所以切换过程为一个信号淡出,另一个信号同时淡入 。 如果考虑到信号本身内部的结构,在平滑过渡中保持这些结构对应关系,可以更好揭示出变化过程对应信息。

  比如下来是两张人脸照片, 左边是平通的淡入淡出过渡, 右边则是将人脸中主要特征点保持空间一致进行过渡。 两种过渡方式不同。

▲ 图1  两个人脸图像切换

▲ 图1 两个人脸图像切换

  在 MIT 学生 Henderson 论文中, 他们提出了一种对音乐声音进行保持频谱结构的过渡算法, 使得声音过渡产生特有的“滑音”效果。 他们的算法也一改传统的通过音量插值的“淡入淡出”方式完成两个音频转换,而是通过傅里叶变换获得他们频谱结构,并保证在转换过程中频谱结构一致。

  具体算法是, 首先将两个音频数据都切成 50ms 长度的数据。 通过傅里叶变换获得每段数据的频谱,然后通过聚类算法将所有的频率汇聚成独立的合成音符。

  以上还都是通常音频数据处理过程。 关键步骤在于他们利用了 最优运输 (Optimal Transport)优化算法获得两个音乐频谱结构之间的对应关系。

▲ 图2  在两个音乐过渡过程中,保持其中频谱对应关系

▲ 图2 在两个音乐过渡过程中,保持其中频谱对应关系

  下面再根据插值参数 r ∈ ( 0 , 1 ) r \in \left( {0,1} \right) r(0,1) 确定插值音乐中所有音符对应的频率和幅度,最后再通过傅里叶反变换获得插值后的音频数据。

  可以通过一个手动滑柄,或者一个旋转电位器确定两个音乐之间比例参数。这种算法不仅可以在两段不同乐器的音乐之间进行切换,也可以在人声之间,或者人声与乐器之间进行平滑切换。

▲ 图3  两段音乐频谱之间的对应和过渡切换

▲ 图3 两段音乐频谱之间的对应和过渡切换

  为了消除切换过程中人为失真痕迹, Henderson 设计了两个关键音频处理算法:

  • 提出了一种频率重新分配(Frequency Reassignment)信号处理技术,将声音频谱进行分配成若干频率段,形成单一音符;
  • 提出了一种音频相位合成算法将相邻 50ms 音频段进行平滑合成,避免窗口之间相互影响。

  基于这种算法, Henderson 希望能够进一步改进, 实现音乐中的连奏 (legato)效果,即在不同音符之间进行光滑变换,达到一些经典音乐演奏效果。

  如果大家感兴趣,可以参见后面他们的论文。


■ 相关文献链接:

● 相关图表链接:

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/125070537