音频速度的调整

以双倍速度播放录音会使播放时间减少一半,同时导致音调上升一个八度的副作用, 有趣的是,人声听起来像卡通人物。同样,以较慢的速度播放声音会使声音持续时间更长,并以相同的比例降低音调。

在过去的模拟音频录制技术中,通过应用错误的播放速度设置,很容易产生这种修改的播放速度/时间/音调效果。 在数字信号处理中,可以通过在声音样本之间进行插值来实现相同的效果,这称为重采样。

虽然重采样以相同的比率影响播放时间和音调,但有时希望独立控制声音持续时间或音调,以修改 音调或时间尺度,而不会产生有时不受欢迎的卡通英雄声音副作用。幸运的是, 存在用于彼此独立地修改时间和音高尺度的信号处理技术,这些技术被称为时间/音高缩放、时间/音高移位或时间拉伸。

实现方法

当考虑适用于任何类型的采样声音(无论是语音、音乐还是其他声音)的通用时间和/或音高缩放方法时,实现此类效果有两种基本方法,即在时域或频域进行处理。

时域方法直接对采样数据进行操作,例如本文介绍的 SOLA 算法。时域处理的优点是实现起来相当 简单,因为声音数据的操作格式与录制和播放时相同。时域处理的缺点是容易产生混响伪影, 这种伪影会随着时间的改变而变得更加明显,即当缩放时间与原始声音相差大约 15% 或更多时。

另一种方法是频域方法,将采样声音转换为短时频率/幅度分量,并使用频率信息进行缩放,下面介绍的相位声码器就是这种方法的一个例子。 频域处理的优势在于能够进行更复杂的声音修改,从而更好地模拟最终的人类听觉体验,因为人类听觉从根本上来说基于频率/振幅感知: 我们的耳朵里没有带有数字采样电路的磁性音圈,相反,耳朵的听觉由大量微小的频率传感器组成, 每个传感器只对特定频率敏感,我们的大脑将它们结合在一起,形成连续的频率/振幅范围的听觉。

SOLA

SOLA 是同步重叠相加 (Synchronous-OverLap-Add) 的简写, 其工作原理是将声音数据切割成几十到几百毫秒之间的短序列, 然后将这些序列与适当数量的声音数据重新连接在一起,这些声音数据在这些序列之间跳过或部分重复, 以实现比原来更短或更长的播放时间。基于相同基本方法的算法也是时域谐波采样的TDHS、WSOLA 和 PSOLA, 在如何寻求下面讨论的重叠偏移的细节上有所不同。 为了防止在两个相邻序列连接在一起的位置出现声音中过于明显的不连续性,序列会部分重叠,以 便在重叠期间声音幅度逐渐从一个序列转移到另一个序列 - 这就是 SOLA 名称中“重叠添加”部分的原因

最简单的 SOLA 实现可以使用通用序列长度,并从原始声音数据中以均匀间隔挑选序列。 希望将声音持续时间缩短 10% 使用例如 100 毫秒(+重叠持续时间)的处理序列持续时间, 以 110 毫秒的间隔从原始声音数据中挑选序列,通过重叠将这些序列连接在一起,这样就完成了。 以类似的方式,要实现 10%更长的声音持续时间,请以 90 毫秒的间隔从原始声音中选择 100 毫秒长的序列,依此类推。 然而,实际的 SOLA 实现并不那么容易。如果在选择处理序列时没有充分注意其内容,则会导致序列不能很好地契合, 从而产生较差的音质,尽管采用了逐渐重叠的方法,但由于声音中的不连续性太大,会产生嗡嗡声和咔嗒声。

SOLA 产生的典型声音伪影是回声或混响声,在小时间尺度变化时这种声音伪影并不明显, 但在时间变慢的较大尺度时会变得更加明显。为了减少混响伪影,处理序列持续时间最好选择为相对接近处理声音的基频 - 例如,如果声音中存在某些频率分量或恒定节拍,则可以将其用作选择处理序列持续时间的参考。 偏移搜索窗口的宽度也会影响声音质量。此窗口越宽,找到重叠序列的良好匹配的可能性就越大。 但是,如果窗口设置得太宽,结果听起来可能不稳定,就像在四处漂移一样。 对于重叠持续时间,它通常是整个处理序列长度的一小部分就足够了。 通常,在重叠周期内滑动简单的线性振幅与更复杂的窗口函数一样有效。

相位声码器

相位声码器是一种将时域采样声音转换 为频率/幅度表示并转回的算法,允许在 频域中编辑声音特性。使用相位声码器的时间/音高缩放包括三个主要处理阶段:

  • 分析——将声音转换为频率/振幅表示。
  • 效果 - 将效果应用于频率/振幅数据。
  • 合成——将声音信息从频率/幅度格式转换回采样格式。
  • 实际上,相位声码器分析和合成阶段是使用快速傅里叶变换 (FFT) 算法实现的, 该算法是一种成熟且高效的时域和频域转换算法。声音数据按顺序处理, 从原始声音流中抽取适当数量的样本,应用窗口函数并对该数据应用 FFT。

    相位展开过程用于导出精确的频率分量, 方法是将每个频率仓的信号相位角与先前处理的 FFT 窗口的相应仓的相位角进行匹配, 然后使用这些相位角差来计算 FFT 固定仓频率的精确频率调整。

    合成阶段基本上是分析阶段的逆过程。在合成过程中,执行与相位展开类似但相反的操作,首先将 精确的频率/幅度信息转换为基于箱的相位/幅度格式,再次匹配每个频率箱相位角, 以便它们与先前处理的声音批次的相位角很好地对齐,然后对结果进行逆 FFT 并将其与先前处理的声音流合并。

    基于相位声码器的时间/音高缩放的优点是它不会产生与 SOLA 类似的混响伪影。 然而,两种相位声码器都无法避免伪影,但它可能会导致严重的相位失真, 从而导致声音沉闷,这在具有快速启动时间的声音产生的尖锐声音中尤其明显。 如果希望有清晰、清脆、高质量的音质,那么这将是一个主要问题。

    这些相位失真是由于相位声码器对齐每个频率分量的相位,以便它们与先前处理的时隙的相同频率的相位很好地匹配。 由于信号波长与频率呈线性相关,因此改变音高或时间尺度会导致不同频率的相位修改率不同。 实际上,使用相位声码器运行时间或音高缩放超过几秒钟会导致信号相位几乎随机化。 相位相干性问题很难解决。一种方法是将频率尺度划分为几个相邻频率的组,并锁定同一组内的相位,以便至少在局部保持相位相干性。 尽管有帮助,但即使是这种方法也需要偶尔重置所有组相位,以防止频率组偏离原始情况太远,而这种相位重置会再次产生可听见的伪影。 相位声码器造成的另一种失真是不均匀的频率响应,因此频谱范围内的窄频带会高度衰减,并且频率范围的高端也会衰减。 这些频率响应失真可能是问题,也可能不是问题,具体取决于处理的声音类型。

    速度调整有许多开源实现,整体音质最好的是audacity、bungee, sonic,其他方法在速度变慢时音质变差。

    一定有办法可以做到,找到它。