【发布时间】:2014-06-22 04:53:36
【问题描述】:
我正在尝试创建一种系统地修改音乐结构的方法。大调由数字 1-7 表示(以另一种方式表示为 C=1、D=3、E=5、F=6、G=8、A=10、B=12,因为所有相邻的音符除了 EF 和 BC 之外,它们之间有一个意外。)在另一个数组中,一组由可以在乐器上演奏的每个音符的唯一 ID 号表示的音符每个都分配了一个从 1 到 7 的概念函数。然后,通过将该组音符与下面的列表进行比较,我可以根据正在演奏的音阶调整 实际 音符,并向演奏者展示如何演奏所需的结构。例如,mixolydian 音阶的第 7 个音符减 1,lydian 音阶的第 4 个音符增加 1。(在上面的示例中,这会将 B 从 12 更改为 11,或将 F 从 6 更改为 7 .)
$qualityDefinitions = array(
"major" => array(), //default, no changes
"mixolydian" => array("7" => -1), //flat 7,etc
"dorian" => array("3" => -1, "7" => -1),
"aeolian" => array("3" => -1, "6" => -1, "7" => -1),
"phyrgian" => array("2" => -1, "3" => -1, "6" => -1, "7" => -1),
"lydian" => array("4" => 1),
"locrian" => array("2" => -1, "3" => -1, "5" => -1, "6" => -1, "7" => -1)
);
但是,我希望能够以同义方式访问存储在这些数组键中的信息。例如,如果我想建立一个主要的 7 和弦(有 1、3、5、b7),我只需要修改 mixolydian 音阶。但是说和弦是“mixolydian”是不寻常的;它更常被描述为“dominant 7”、“dom7”或仅仅是“7”。
有什么方法可以稍微改变我正在使用的数据结构来满足这个需求,这样我就可以访问相同的定义:$qualityDefinitions['dom7'] 和 $qualityDefinitions['mixolydian'],或者仅仅是我需要以概念上不同的方式考虑这个问题并对我的代码进行重大更改? (作为一个新手,我知道现在可能有一种更抽象、更有效的方法来做到这一点,这有点超出我的想象,但如果可能的话,我更愿意这样做。)
【问题讨论】: