1 | "use strict";
|
---|
2 |
|
---|
3 | // From:
|
---|
4 | // http://rnhart.net/articles/key-finding/
|
---|
5 |
|
---|
6 | //major profile
|
---|
7 | //do do# re re# mi fa fa# so so# la la# ti
|
---|
8 | //6.35 2.23 3.48 2.33 4.38 4.09 2.52 5.19 2.39 3.66 2.29 2.88
|
---|
9 |
|
---|
10 | //minor profile
|
---|
11 | //la la# ti do do# re re# mi fa fa# so so#
|
---|
12 | //6.33 2.68 3.52 5.38 2.60 3.53 2.54 4.75 3.98 2.69 3.34 3.17
|
---|
13 |
|
---|
14 |
|
---|
15 | // kh = Krumhansl
|
---|
16 |
|
---|
17 | var kh_major_profile = [6.35, 2.23, 3.48, 2.33, 4.38, 4.09, 2.52, 5.19, 2.39, 3.66, 2.29, 2.88 ];
|
---|
18 |
|
---|
19 | var kh_minor_profile = [6.33, 2.68, 3.52, 5.38, 2.60, 3.53, 2.54, 4.75, 3.98, 2.69, 3.34, 3.17 ];
|
---|
20 |
|
---|
21 |
|
---|
22 | function khCreatePairing(profile,chromatic_scale_durations,offset)
|
---|
23 | {
|
---|
24 | var pairing = [];
|
---|
25 | for (var p=0; p<12; p++) {
|
---|
26 | pairing.push({"p":profile[p],"c":chromatic_scale_durations[(p+s)%12]});
|
---|
27 | }
|
---|
28 |
|
---|
29 |
|
---|
30 | return pairing;
|
---|
31 | }
|
---|
32 |
|
---|
33 |
|
---|
34 | function khCreateAllPairings(chromatic_scale_durations,major_profile,minor_profile)
|
---|
35 | {
|
---|
36 | // chromatic_scale_durations.length = 12
|
---|
37 |
|
---|
38 | var chromatic_keys = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
---|
39 |
|
---|
40 | var major_pairings = {};
|
---|
41 | var minor_pairings = {};
|
---|
42 |
|
---|
43 | // Foreach scale
|
---|
44 | for (var s=0; s<12; s++) {
|
---|
45 | var scale = chromatic_keys[s];
|
---|
46 |
|
---|
47 | major_pairings[scale] = khCreatePairing(major_profile,chromatic_scale_durations,s);
|
---|
48 | minor_pairings[scale] = khCreatePairing(minor_profile,chromatic_scale_durations,s);
|
---|
49 | }
|
---|
50 |
|
---|
51 | return {"major" : major_pairings, "minor" : minor_pairings};
|
---|
52 |
|
---|
53 | }
|
---|
54 |
|
---|
55 |
|
---|