Chris@12
|
1
|
Chris@12
|
2 module templates;
|
Chris@12
|
3
|
Chris@12
|
4 vec = load may.vector;
|
Chris@13
|
5 mat = load may.matrix;
|
Chris@12
|
6
|
Chris@12
|
7 // Load instrument templates
|
Chris@12
|
8
|
Chris@12
|
9 instruments = [
|
Chris@12
|
10 "bassoon",
|
Chris@12
|
11 "cello",
|
Chris@12
|
12 "clarinet",
|
Chris@12
|
13 "flute",
|
Chris@12
|
14 "guitar",
|
Chris@12
|
15 "horn",
|
Chris@12
|
16 "oboe",
|
Chris@12
|
17 "tenorsax",
|
Chris@12
|
18 "violin",
|
Chris@12
|
19 "piano-maps-SptkBGCl"
|
Chris@12
|
20 ];
|
Chris@12
|
21
|
Chris@12
|
22 loadTemplates () = mapIntoHash id
|
Chris@12
|
23 do instrument:
|
Chris@12
|
24 readFile "../data/\(instrument).csv" "UTF-8"
|
Chris@12
|
25 do istr:
|
Chris@13
|
26 mat.fromColumns
|
Chris@12
|
27 (map do line:
|
Chris@12
|
28 vec.fromList (map number (strSplit "," line))
|
Chris@13
|
29 done (istr.lines ()));
|
Chris@12
|
30 done;
|
Chris@12
|
31 done instruments;
|
Chris@12
|
32
|
Chris@23
|
33 hardcodedRanges = [
|
Chris@23
|
34 "bassoon": { lowest = 15, highest = 51 },
|
Chris@23
|
35 "cello": { lowest = 15, highest = 60 },
|
Chris@23
|
36 "clarinet": { lowest = 29, highest = 68 },
|
Chris@23
|
37 "flute": { lowest = 39, highest = 72 },
|
Chris@23
|
38 "guitar": { lowest = 19, highest = 55 },
|
Chris@23
|
39 "horn": { lowest = 20, highest = 56 },
|
Chris@23
|
40 "oboe": { lowest = 37, highest = 70 },
|
Chris@23
|
41 "tenorsax": { lowest = 23, highest = 54 },
|
Chris@23
|
42 "violin": { lowest = 34, highest = 72 },
|
Chris@23
|
43 "piano-maps-SptkBGCl": { lowest = 16, highest = 72 },
|
Chris@23
|
44 ];
|
Chris@23
|
45
|
Chris@22
|
46 //!!! these ranges are hardcoded, in the original (and are a bit more restrictive)
|
Chris@23
|
47 extractRanges' templates = mapIntoHash id
|
Chris@13
|
48 do instrument:
|
Chris@13
|
49 levels = map vec.sum (mat.asColumns (templates[instrument]));
|
Chris@13
|
50 first = length levels - length (find (>0) levels);
|
Chris@13
|
51 last = length (find (>0) (reverse levels)) - 1;
|
Chris@14
|
52 { lowest = first, highest = last }
|
Chris@13
|
53 done (keys templates);
|
Chris@13
|
54
|
Chris@23
|
55 extractRanges templates = hardcodedRanges;
|
Chris@23
|
56
|
Chris@12
|
57 {
|
Chris@13
|
58 loadTemplates,
|
Chris@13
|
59 extractRanges
|
Chris@12
|
60 }
|
Chris@12
|
61
|