Chris@12
|
1
|
Chris@12
|
2 program silvet;
|
Chris@12
|
3
|
Chris@12
|
4 { prepareTimeFrequency } = load timefreq;
|
Chris@13
|
5 { loadTemplates, extractRanges } = load templates;
|
Chris@14
|
6
|
Chris@14
|
7 em = load em;
|
Chris@12
|
8
|
Chris@12
|
9 mat = load may.matrix;
|
Chris@12
|
10 vec = load may.vector;
|
Chris@14
|
11 plot = load may.plot;
|
Chris@12
|
12
|
Chris@12
|
13 templates = loadTemplates ();
|
Chris@12
|
14
|
Chris@13
|
15 ranges = extractRanges templates;
|
Chris@13
|
16
|
Chris@13
|
17 eprintln "\nWe have \(length (keys templates)) instruments:";
|
Chris@13
|
18 for (sort (keys templates)) do k:
|
Chris@14
|
19 eprintln " * \(k) \(mat.size templates[k]) range \(ranges[k].lowest) -> \(ranges[k].highest)";
|
Chris@13
|
20 done;
|
Chris@12
|
21 eprintln "";
|
Chris@12
|
22
|
Chris@12
|
23 columns = prepareTimeFrequency "test.wav";
|
Chris@12
|
24
|
Chris@12
|
25 height = if empty? columns then 0 else vec.length (head columns) fi;
|
Chris@12
|
26
|
Chris@13
|
27 chunkSize = { rows = height, columns = 100 };
|
Chris@13
|
28
|
Chris@14
|
29 emdata = em.initialise ranges templates 88 chunkSize;
|
Chris@13
|
30
|
Chris@14
|
31 eprintln "initialised EM data: overall pitch range \(emdata.lowest) -> \(emdata.highest)";
|
Chris@13
|
32
|
Chris@12
|
33 chunkify cols =
|
Chris@12
|
34 if empty? cols then []
|
Chris@12
|
35 else
|
Chris@13
|
36 (mat.resizedTo chunkSize
|
Chris@13
|
37 (mat.fromColumns (take chunkSize.columns cols)))
|
Chris@13
|
38 :. \(chunkify (drop chunkSize.columns cols));
|
Chris@12
|
39 fi;
|
Chris@12
|
40
|
Chris@12
|
41 chunks = chunkify columns;
|
Chris@12
|
42
|
Chris@12
|
43 eprintln "we have \(length chunks) chunks of size \(mat.size (head chunks))";
|
Chris@12
|
44
|
Chris@14
|
45 eprintln "attempting one expectation phase...";
|
Chris@13
|
46
|
Chris@14
|
47 error = em.performExpectation emdata (head chunks);
|
Chris@14
|
48
|
Chris@14
|
49 eprintln "done, result has dimension \(mat.size error)";
|
Chris@14
|
50
|
Chris@14
|
51 eprintln "attempting one maximisation phase...";
|
Chris@14
|
52
|
Chris@14
|
53 newP = em.performMaximisation emdata (head chunks) error;
|
Chris@14
|
54
|
Chris@14
|
55 eprintln "done";
|
Chris@14
|
56
|
Chris@14
|
57 \() (plot.plot [ Grid (head chunks) ]);
|
Chris@14
|
58 \() (plot.plot [ Grid error ]);
|
Chris@14
|
59
|
Chris@14
|
60 \() (plot.plot [ Grid newP ]);
|
Chris@14
|
61
|
Chris@14
|
62 ();
|
Chris@14
|
63
|
Chris@14
|
64
|