音符与音符集合的语义与算法解析
1. 语义澄清
在处理音符和音符集合时,存在一种强大的继承方案来表示它们。这种方案尤其在表示复杂音乐结构时发挥重要作用。下面我们将深入探讨该继承方案背后的细节,这些细节会影响元素的常见变化,以及维护结构完整性所需的约束条件。
1.1 音符树
一个适度复杂的音乐结构可以分解为一棵由 Line、Note、Tuplet 和 Beam 节点组成的树,我们称之为抽象音符树或简称为音符树。验证生成的树是否代表给定的音乐输入是比较容易的,但我们更关注逐个元素构建树时的操作问题,例如插入 Beam、Tuplet 和 Note 等操作,这些操作是构建和维护该模型算法的来源。
1.2 Beam 的语义规则
在向 Beam 中添加音符或其他结构时,有两条重要规则:
- 规则一 :不允许添加持续时间大于或等于四分音符的音符。此规则仅针对要添加到 Beam 中的音符持续时间,而与 Beam 本身的持续时间无关,且这些音符在 Beam 下保留其持续时间值。
- 规则二 :在一个 Beam 下添加另一个 Beam 会使添加的 Beam 下的元素持续时间减半。
在操作上,持续时间缩放的一致性似乎存在冲突。在 Beam 下添加音符不会产生减半因子,而添加 Beam 则会。为解决这个问题,我们可以选择添加持续时间小于二分音符的音符,并使减半因子适用于添加到 Beam 的任何内容,但这种方法在可用性上较为笨拙。因此,我们的 API 选择按照规则一添加音符,专注于单个 Beam,而不考虑嵌套情况,并自动应用由嵌套元素决定的适当
超级会员免费看
订阅专栏 解锁全文
1272

被折叠的 条评论
为什么被折叠?



