Mercurial > hg > silvet
diff yeti/silvet.yeti @ 21:8e61ec97b34e
I think this may be the right arrangement. Print out some results.
author | Chris Cannam |
---|---|
date | Fri, 28 Mar 2014 12:52:11 +0000 |
parents | 982aa1197a7e |
children | 782b910394f3 |
line wrap: on
line diff
--- a/yeti/silvet.yeti Thu Mar 27 11:52:07 2014 +0000 +++ b/yeti/silvet.yeti Fri Mar 28 12:52:11 2014 +0000 @@ -64,7 +64,7 @@ em1data = em1.initialise ranges templates 88; -col = head (drop 35 columns); +col = head (drop ((length columns) / 2) columns); \() (plot.plot [ Caption "Source frequency distribution", Vector col ]); @@ -77,13 +77,13 @@ (q = em1.performExpectation em1data col; // \() (plot.plot [ Caption "Frequency distribution and output of E-step for iteration \(n)", Vector col, Vector q ]); newdata = em1.performMaximisation em1data col q; - if (n % 2 == 0) then + if (n % 6 == 0) then \() (plot.plot [ Caption "Pitch distribution before and after M-step update for iteration \(n)", Vector (em1data.pitches), Vector (newdata.pitches) ]); \() (plot.plot [ Caption "Source distribution after M-step update for iteration \(n)", Grid (sourceGrid newdata) ]); fi; newdata); -iterations = 6; +iterations = 12; var d = em1data; @@ -91,6 +91,42 @@ d := oneIteration d col i; done; +var sounding = []; + +println "pitch distribution: \(d.pitches)"; + +for [d.lowest .. d.highest] do p: + if (vec.at d.pitches p) > 0.05 then + sounding := sounding ++ [p]; + fi; +done; + +println "Sounding: \(sounding)"; + +toNote p = (array ["A","A#","B","C","C#","D","D#","E","F","F#","G","G#"])[p % 12]; + +println "Notes: \(map toNote sounding)"; + +var instruments = []; +for sounding do p: + var best = ""; + var bestp = 0; + for d.instruments do i: + if vec.at d.sources[i] p > bestp then + bestp := vec.at d.sources[i] p; + best := i; + fi; + done; + if bestp > 0 then + instruments := instruments ++ [best]; + else + instruments := instruments ++ ["unknown"]; + fi; +done; + +println "Instruments: \(instruments)"; + + ();