音乐理论中的音程与调式研究
音程相关内容
音程在音乐理论和软件实现中有着重要的地位。在软件里, __hash__()
方法重载能为对象创建哈希码。要让类类型可靠地“可哈希化”,这样才能在字典或集合中使用其实例。对于 Interval
类的默认实现,这一点是不适用的。定义哈希码计算有以下规则:
1. 在实例的生命周期内,哈希码值不能改变。
2. 符合相等定义的实例必须有相同的哈希码值,这就要求 __eq__()
和 __hash__()
方法达成一致。
3. 哈希码值应基于不可变值。
由于规则 3,对音程的操作应返回新的独立实例,而不是改变音程实例的半音距离、全音距离或音程类型。下面是使用音程实例文本表示的哈希码值的代码:
def __hash__(self):
return hash(str(self))
在音程运算中,音程相加可能会出现闭合性违规的情况,也就是两个音程可能无法相加。在代码里,处理这种情况的一种方式是抛出异常。例如在 add_intervals()
函数中:
if (b_dc, b_ct) not in Interval.INTERVAL_MAP:
raise Exception('Illegal Addition {0} + {1} ({2}, {3})'.format(a, b,