音乐理论中的音阶、音高与音程知识解析
1. 音阶与音高基础
1.1 自然音程距离
在音乐理论中,自然音程距离是一个重要概念。给定两个音 tone1
和 tone2
,从 tone1
到 tone2
的自然音程距离是两个音之间自然音字母的数量减 1,假设 tone2
在 tone1
之后。例如,从 C 到 D 的自然音程距离是 1,从 Cb 到 Db 同样是 1;从 E 到 D 的自然音程距离是 6,其自然音字母路径为 [E, F, G, A, B, C, D]
。在 Python 中,自然音程距离的计算公式为:
[diatonic_dist = (tone2.diatonic_index - tone1.diatonic_index) \% 7]
由于 Python 总是计算正模数,这恰好符合该距离语义的要求。
1.2 自然音缓存
总共可以构造 49 个独特的自然音实例。在后续构建音符时,会创建许多自然音高,每个音高都有一个自然音。为避免不必要的高存储分配,因为这 49 个音实例不会改变,所以可以在代码库中重复使用自然音。自然音缓存 DiatonicToneCache
提供了这种重用机制。
DiatonicToneCache
是一个单例类,只有一个实例,该实例仅创建一次且不对外暴露,仅作为按名称访问音的缓存机制。它有一个属性 __di