音乐变换与约束引擎在音高分配中的应用
1. 音乐变换概述
音乐变换的探讨与之前有所不同,更侧重于算法和技术,而非详细的表示或相关的细节。一些起初看似与音乐变换无关的话题,如约束解决方案和旋律搜索,后续会展现出其重要性。音乐变换是一个深奥的学术话题,可为音乐创作工具提供强大技术,也是更强大变换的基础。
1.1 约束编程基础
约束编程是一种通过定义变量和约束关系来描述问题的编程方式。一个问题由一组变量和一组约束条件构成,变量从不同的值域取值,约束条件描述变量之间需满足的关系。约束求解器/引擎接收变量和约束作为输入,输出满足约束的变量值分配。
例如,有如下约束问题:
- 变量:$I \in$ 整数;$S \in$ 字符串
- 条件:
- $S$ 以 “abc” 开头
- $S[3] \in$ {‘1’, ‘2’, ‘3’}
- $len(S) == 4$
- $I == len(S) + as_integer(S[3])$
其解包括 $(S, I)$ 为 ((‘abc1’, 5), (‘abc2’, 6), (‘abc3’, 7)) 等赋值。与 Python 编程不同,约束编程首要关注问题描述,而非具体的求解算法。解由约束引擎生成,其内部工作复杂,通常不在用户的控制范围内。
常见的约束编程工具包括 Prolog、SWI - Prolog、Gecode、OptaPlanner 和 python - constraint 等。
1.2 音乐约束与解空间
在音乐领域,音乐变换通常是将一个音乐片段映射到满足特定条件的新片段,主要