source: main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/key-detection.js@ 29892

Last change on this file since 29892 was 29892, checked in by davidb, 9 years ago

Profile pairing code for Krumhansl's key detection algorithm

  • Property svn:executable set to *
File size: 1.4 KB
Line 
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
17var 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
19var 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
22function 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
34function 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
Note: See TracBrowser for help on using the repository browser.