【发布时间】:2017-07-26 16:31:06
【问题描述】:
背景
对于基于音乐的问题,我深表歉意,但细节并没有那么重要。我正在依次浏览一个 midi 文件,我正在寻找一种有效的方法来查找数据中的模式以找到称为连音的东西。见下图:
连音符的顶部有数字(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 不会在数据文件中注明,因为仅数据文件仅列出了注释位置。您在该位置看到的图标称为休息,在数据文件中没有注明。
问题
如何找到找到每个连音符开头的有效方法?是否有某种递归方法?
【问题讨论】:
-
MIDI 文件不包括音符的持续时间(与音符的开头结合起来可以检测其余部分)吗?
-
它确实包括音符的持续时间,但与符号中固定长度的音符不同,midi 音符长度并不总是可预测的。因此,很难确切知道休息多长时间。