annotate yeti/templates.yeti @ 13:e15bc63cb146
Ranges, EM initialisation
author |
Chris Cannam |
date |
Fri, 21 Mar 2014 18:12:38 +0000 |
parents |
0f6db1895e1c |
children |
a91de434feb8 |
rev |
line source |
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@13
|
33 //!!! these ranges are hardcoded in the original (and are a bit more restrictive)
|
Chris@13
|
34 extractRanges templates = mapIntoHash id
|
Chris@13
|
35 do instrument:
|
Chris@13
|
36 levels = map vec.sum (mat.asColumns (templates[instrument]));
|
Chris@13
|
37 first = length levels - length (find (>0) levels);
|
Chris@13
|
38 last = length (find (>0) (reverse levels)) - 1;
|
Chris@13
|
39 { lowestNote = first, highestNote = last }
|
Chris@13
|
40 done (keys templates);
|
Chris@13
|
41
|
Chris@12
|
42 {
|
Chris@13
|
43 loadTemplates,
|
Chris@13
|
44 extractRanges
|
Chris@12
|
45 }
|
Chris@12
|
46
|