音符与音符集合的语义与算法解析
1. 语义澄清
在音乐结构的表示中,音符和音符集合的继承方案提供了强大的表达能力,尤其在表示复杂音乐结构方面。下面详细探讨该继承方案的一些语义细节以及相关约束。
1.1 音符添加到连音线(Beam)的规则
- 规则一 :不允许添加时长大于或等于四分音符的音符到连音线中。此规则仅针对要添加的音符时长,而与连音线本身的时长无关,且音符在连音线下保留其原有时长。
- 规则二 :在连音线下添加连音线,会使新增连音线下的元素时长减半。
在操作上,添加音符和添加连音线在时长缩放的一致性上存在冲突。为解决这一问题,有两种思路:一是添加时长小于二分音符的音符,并让减半规则适用于添加到连音线的所有元素,但这种方法在可用性上较为笨拙;另一种是按照规则一添加音符,这种方式更直观,在 API 设计中采用了后一种方式。
添加元素到连音线的操作可以在仅考虑该连音线的上下文中进行,也可以考虑连音线及其所有父节点的上下文。为保持上下文简单,选择专注于单个连音线添加音符,并自动根据嵌套元素应用适当的缩放因子。例如,将十六分音符添加到有父连音线的连音线中,通过计算实际上会使其变为三十二分音符。
1.2 三连音(Tuplet)的语义微妙之处
以图 6.8 中的两个三连音为例,一个有连音线,另一个没有,表面上它们似乎相同,都是在四分音符跨度内有三个八分音符。但实际上,它们不能在不同上下文中随意替换。如图 6.9 所示,将这两个三连音插入到由两个八分音符环绕的音乐图形中,结果完全不同。
超级会员免费看
订阅专栏 解锁全文
1273

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



