准确地将两个音符相互混合
Posted
技术标签:
【中文标题】准确地将两个音符相互混合【英文标题】:Acurately mixing two notes over each other 【发布时间】:2018-04-16 03:34:38 【问题描述】:我有一个很大的库,其中包含许多预先录制的音符(大约 1200 个),它们的振幅都是一致的。
我正在研究将两个音符叠加在一起的方法,这样听起来就像两个音符同时演奏的和弦。
不同攻击时间的样本:
如您所见,这些样本具有不同的峰值振幅点,需要排列起来才能听起来像人类演奏的和弦。
手动对齐攻击点:
第二张图片显示了手动对齐的起音点,但对于如此庞大的数据集,我希望创建许多和弦样本的排列,这是一种不可行的方法。
我正在考虑一种方法,通过该方法我可以识别两个音频样本的峰值幅度时间,然后在混合音符以创建和弦时对齐这两个峰值幅度时间。但我不确定如何进行这样的实施。
我正在考虑使用 python 混合解决方案,例如在 Mixing two audio files together with python 找到的解决方案,并进行一些调整以将音频样本相互混合。
我正在寻找有关如何识别音频样本中峰值幅度时间的想法,或者如果您对可以实现此想法的其他方式有任何想法,我会非常感兴趣。
【问题讨论】:
如果对于每对音频输入文件,您都有一个好的输出文件样本,您可以训练您的系统自动调整它选择如何组合输入文件以最好地匹配输出文件,然后利用无需已知的良好输出文件即可执行类似组合的训练...... ML 宝贝! 这个项目实际上将与机器学习一起使用,构建一个 FFT 和弦数据库以运行 tensorflow。不幸的是,如果我已经掌握了所有好的和弦,我就不需要创建这些音符配对。我正在考虑创建许多和弦排列以训练张量流。 我认为这个链接涉及到与Audio_Processing
相关的每一个答案,无论是Pre-Processing还是Post-Processing:android_Audio_Processing_Using_WebRTC,你也可以访问这个参考:***.com/a/58546599/10413749
【参考方案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) 的静音。
然后将这两个样本相互叠加以产生准确混合的和弦!
【讨论】:
nice ... 仅选择具有最大幅度的样本(可能容易受到缩进最大幅度点之外的虚假尖峰)的替代方法是在音频文件中滑动几个样本的窗口您可以在其中输入一组样本以识别功率指标的 RMS 计算以上是关于准确地将两个音符相互混合的主要内容,如果未能解决你的问题,请参考以下文章
MIDI MusicDevice AudioUnit:播放两个相同音高的音符,停止一个?