目标: 提取音乐中的 significant pattern(不同乐器组合所构成的 pattern)
- 要求用 C++编写,可在 Window 64 系统中运行
- 读取 MIDI 音乐文件(要求有多种演奏乐器),得到文件每个音乐的信息包括:
音调 p(Pitch of note),时长 d(duration of note),起始时间(t strate time of note)
以及是什么乐器演奏的 I.
- 应用分为三个部分:
- 遗传算法(GA):负责寻找音乐的 significant pattern,要找到:a)乐器的子集合(各 种不同演奏乐器的组合)。 b)这个 pattern 的起始时间 T(onset time)。 c)此 pattern 的持续时间 D。这三个信息代表了一个“窗函数”。
- 模式识别模块(此部分是在已知的模式 given pattern 下,在同一个 MIDI 音乐文件中 去搜寻与它相似/相同的模式 occurrence),也是匹配模式,数据的组织形式是几何型 的(geometrical)。匹配的策略有两个:a)包含(图 1),A 是 given pattern。找到的 occurrence 要包含 given pattern 中的所有 notes,于此同时还可以包含其他演奏乐器 (例如 given pattern 有钢琴和吉他,而 occurrence 中除了必须包括钢琴吉他(钢琴 和吉他的 channel 中的 note 必须和 given pattern 中完全一致)外,还可以包括其他乐 器,如小提琴等)。b)部分包含(图 2),A 仍然是 given pattern。基本理念同上一 个策略一致,只是条件放宽松一些,容许 given pattern 中的 Pitch 与 occurrence 中的 有一些偏差。
3. 设计一个相似度函数和适应度函数。首先对于相似度函数,计算 given pattern 和每 一个 occurrence 的相似系数。对于包含关系,相似系数是 1(最相似);对于部分包 括关系,可以用 Jaccard similarity coefficient 或者 Dice 系数来计算。然后根据每个相 似度值,可以构建 GA 的适应度函数(fitness function)。而设计 fitness function 要考 虑三个因素:a) occurrence 的个数(越多越好)。b)每个 occurrence 的相似度值(越 相似越好) c)given pattern 自己的长度,这里的长度包括两个方面,时长 D 以及 所含音符 note 的个数(given pattern 的长度不能太长也不能太短,太长可能找不到 其他和它相似的 occurrence,太短全部都是重复的无意义)。选择长度时可以参考类 似文本信息检索中的 TF-IDF 方法。
3. 设计好的 fitness function 可以计算 pattern 的适合度并用于 GA 算法中,最后 通过 GA 算法找到最合适的 pattern 为此 music 的 significant pattern