gpt4 book ai didi

algorithm - 模式识别算法/技术

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:45 28 4
gpt4 key购买 nike

背景

对于基于音乐的问题,我深表歉意,但细节并没有那么重要。我正在按顺序浏览一个 midi 文件,我正在寻找一种有效的方法来查找数据中的模式以找到称为连音符的东西。见下图:

enter image description here

连音符上方有数字(3 或 6)。我需要知道它们在数据文件中的哪个位置开始。注释下方的数字是您将在数据文件中按顺序看到的值。以防万一您无法破译下面的数据,这里是:

1, 2, 2.3333, 2.6666, 3, 3.5, 3.6666, 3.83333, 4, 4.1666, 4.3333, 4.5, 4.6666, 4.8333,
5、6.3333、6.6666、7.1666、7.3333、7.5、7.6666、7.8333、8、8.1666、8.333、8.5、8.6666。

  • 第一个连音从位置 2 开始,音符位置之间的差异为 0.3333(重复)
  • 第二个连音从位置3.5开始,音符位置相差0.1666(重复)

主要问题是在注释中,与下图不同,位置 7 不会在数据文件中注明,因为仅数据文件仅列出注释位置。您在该位置看到的图标称为休息,数据文件中未注明。

问题

我怎样才能找到一种有效的方法来找到每个连音符的开始?有某种递归方法吗?

最佳答案

我认为您不需要任何递归。

正常的音符值只能用 a / 2^b 类型节拍的分数表示.连音可以是任意分数,但大多数时候我看到的是三连音、五连音或(在您的情况下是六连音)。

所以最简单的方法是计算每个音符的长度(也许是两个 MIDI 事件之间的时间差?或者长度明确存储在 MIDI 中?我对格式不太熟悉)并计算有理表示这个长度。

每组分母不是二的幂的音符都属于这样的连音符。要将音符组合在一起,我建议采用以下方法(假设一个连音符的所有音符都具有相同的值):

  • 将分母因式分解为 2 的幂 a和其余的b (例如 a * b = 4 * 5)
  • 初始化一个大小为b的空连音符
  • 对于每个音符,计算到连音符开头的距离,并将音符存储在相应的位置,必要时插入休止符。可以通过取最小长度来计算连音符的长度 l连音符中的所有音符,所以贪婪地添加它们直到这些音符的末尾超过 l * b 的距离从连音开始
    这样,您可以将连音符基于最小音符长度并添加适合它的所有音符。

关于algorithm - 模式识别算法/技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45332710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com