将两个音符混合在一起

时间:2018-04-16 03:34:38

标签: python audio audio-processing

我有一个包含许多预先录制的音乐笔记的大型图书馆(大约1200个),它们都是一致的振幅。

我正在研究将两个音符叠加在一起的方法,这样听起来就像两个音符同时播放的和弦。

具有不同攻击时间的示例:Samples with different attack times

如您所见,这些样本具有不同的峰值振幅点,需要排列以便听起来像人类演奏的和弦。

手动对齐攻击点:Manually aligned attack points

第二张图像显示了由耳朵手动分配的攻击点,但对于如此大的数据集,这是一种不可行的方法,我希望创建许多和弦样本的排列。

我正在考虑一种方法,我可以识别两个音频样本的峰值幅度时间,然后在混合音符时对齐这两个峰值幅度时间以创建和弦。但我不确定如何进行这样的实施。

我正在考虑使用python混合解决方案,例如Mixing two audio files together with python中的一个,并进行一些调整,以便将音频样本混合在一起。

我正在寻找关于如何识别音频样本中峰值振幅时间的想法,或者如果您对其他方式有任何想法,我会非常感兴趣。

1 个答案:

答案 0 :(得分:1)

如果有人真正对这个问题感兴趣,我找到了解决问题的方法。这有点令人费解,但它已经取得了很好的成绩。

为了找到样本峰值幅度的时间,我在这里找到了这个帖子:Finding the 'volume' of a .wav at a given time其中最顶层的答案提供了一个名为AudioFile的scala库的链接,它提供了一种通过浏览找到峰值放大器的方法帧缓冲窗口中的示例。但是,此库要求所有文件都是.aiff格式,因此创建了第二个样本库,其中包含转换为.aiff的所有旧.wav样本。

在减少帧缓冲区窗口后,我能够确定在哪个帧中找到了最高振幅。将此帧除以音频样本的采样率(已知为48000),我能够准确地找到峰值幅度的时间。此信息用于创建一个文件,该文件同时存储样本文件的名称及其峰值振幅的时间。

一旦完成,就会使用Pydub库http://pydub.com/编写一个python脚本,它将两个样本配对,并找出峰值幅度时间的差异(t)。具有最低峰值振幅时间的样本将具有从仅包含静音的.wav预先覆盖的长度(t)的静音。

然后将这两个样本重叠在一起以产生准确混合的弦!