Answers:
是的,我们中的一些人可以做到,您可以在不影响音高的情况下加快或降低速度,有人将其称为“时间拉伸”的应用程序,有不同的实现方式,可以在频域或时域中进行,您需要选择什么是最适合您的,您会发现每种优点和缺点。
时域:
在时域中,您可以尝试一些技术,例如:
优点:速度快,某些算法易于理解,单声道声音质量佳。
缺点:通常,您需要一个非常好的音高轨迹以将其拼接到正确的位置,这很难做到:-(,因此,如果您的音高轨迹失败或无法在Poliphonic声音中工作,此算法会产生很多故障/伪像在输出声音中。
频域:
我在频域中知道的所有时间范围都是基于相位声码器技术的。
优点:可以和弦或单声道的声音工作。
缺点:可能很难理解所有的数学知识,实现起来有点困难,没有像时域代码那样快,对于语音,我更喜欢时域结果,但没有分享改善标准相位声码器结果的一些技巧。
我可以说窗口和跳数是相位声码器质量的关键之一,通常我们选择4x
重叠进行合成,一个hann窗口4096
就足够了(当然,如果您对此大小有处理能力) ,标准相位声码器可以添加一些混响效果,为避免此类问题,您可能需要锁定相位。
有关数据的信息,请查看Miller Puckette和Portnoff纸
44100 * 60 = 2646000
分一次和过程,所以忘了在实时任何企图处理这些本,
您描述的工具/理论实际上是音乐技术上的一大研究领域,广泛地称为音频时标修改。该字段的主要组成部分是如何防止时间延长后频率发生可听见的变化。可以使用频域和时域方法来实现,这取决于您的应用程序的约束或目标。音频时标/音高修改的维基百科条目是一个很好的起点。
如果您热衷于使用基于频率/小波的方法,则窗口大小和基础的选择将影响您对信号进行本地化的能力。以STFT为例,较长的窗口对于固定的正弦波将表现良好,但会破坏瞬态。较短的窗口将以频域定位为代价提供较好的瞬态响应。其他小波基的性能将取决于信号在基上的投影性质。
下面是Stephan M. Bernsee的C ++中一个简单而有价值的教程功能的链接(smbPitchShift.cpp),该功能可以在不改变音调的情况下降低或加快音乐的播放速度。
他已根据“广泛开放许可(WOL)”发布了此代码。在我的应用程序中,我能够使他的功能实时适应慢下来的音乐-即播放mp3文件时,并且同时对mp3信号进行音高检测。
我还提供了一个指向Bernsee网站的链接,其中包含他对音频信号(例如音乐)的时间伸展和音高偏移的详细说明。
time stretch
,原始代码适用Pitch Shift
,在这种情况下,您将需要组合时间刻度修改Pitch Shifit + Resample (interpolation)
,Bernsee的代码在一个尺寸窗口中效果很好,4096
您可以将音调移位一个八度(大于或小于一个八度) ,这意味着相应地,您将只能使用2.0x-0.5x之间的因数来制作高质量的时标,精心构建的相位声码器可以在相同的窗口大小下实现更好的结果,并且可以对这些结果进行推断质量更好的因素
8192
下载页面的代码中的窗口大小= ,所以您是否需要多处理4倍的点才能进行处理,我要说的是,使用一半的窗口大小,8192/2=4096
您可以使用相位声码器的一些秘密来完成相同的工作,这里的要点是,您可以通过更少的处理来保持质量。