Mic*_*per 7 language-agnostic data-structures
在数据结构中表示各种和弦进程(音乐)规则的最合适(自然适合)的方式是什么,这样每个和弦都有一组可以进展的加权选项?
这个数据结构将以一种你可以编码的方式在程序音乐生成程序中实现:(与语言无关的伪代码)
Chord[7] songArray;
Chord first = new Chord(I); //set the first chord's value
songArray[0] = first;
for (i=0; i<7; i++){
Chord temp = songArray[i].next(); //select the following chord
songArray[i+1] = temp;
}
Run Code Online (Sandbox Code Playgroud)
注意:在古典型音乐中,给定键中的每个和弦可以按照以下规则自然地进入另一个和弦:
----------------------
| Chord | Leads to |
|=======================
| I | any |
| ii | V, vii |
| iii | IV, vi |
| IV | ii, V, vii |
| V | vi |
| vi | ii, ii, IV, V|
| vii | I |
----------------------
Run Code Online (Sandbox Code Playgroud)
数据结构将各种进度存储为加权选项.例如,考虑任何给定主键中的IV和弦:IV可以自然地进展到ii,V或vii,但也可以打破进入任何其他和弦的规则.违反规则的情况很少发生.

我考虑过某种链表/树数据结构,但它几乎不像我曾经使用的任何类型的树或列表 - 另外,我无法弄清楚如何实现加权:

另一个想法是使用JSON或类似的东西,但它似乎很快就会变得多余:
{
"I":{
"100%":{
"I",
"ii",
"iii",
"IV",
"V",
"vi",
"vii"
}
},
"ii":{
"80%":{
"V",
"vii"
},
"20%":{
"i",
"ii",
"iii",
"IV",
"vi"
}
},
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:我很乐意用少数几种语言实现它,此时我并不关心特定的语言实现,而是与语言无关的数据结构体系结构.
| 归档时间: |
|
| 查看次数: |
1130 次 |
| 最近记录: |