Chris@12: Chris@12: program silvet; Chris@12: Chris@12: { prepareTimeFrequency } = load timefreq; Chris@13: { loadTemplates, extractRanges } = load templates; Chris@14: Chris@14: em = load em; Chris@12: Chris@12: mat = load may.matrix; Chris@12: vec = load may.vector; Chris@14: plot = load may.plot; Chris@12: Chris@12: templates = loadTemplates (); Chris@12: Chris@13: ranges = extractRanges templates; Chris@13: Chris@13: eprintln "\nWe have \(length (keys templates)) instruments:"; Chris@13: for (sort (keys templates)) do k: Chris@14: eprintln " * \(k) \(mat.size templates[k]) range \(ranges[k].lowest) -> \(ranges[k].highest)"; Chris@13: done; Chris@12: eprintln ""; Chris@12: Chris@12: columns = prepareTimeFrequency "test.wav"; Chris@12: Chris@12: height = if empty? columns then 0 else vec.length (head columns) fi; Chris@12: Chris@13: chunkSize = { rows = height, columns = 100 }; Chris@13: Chris@14: emdata = em.initialise ranges templates 88 chunkSize; Chris@13: Chris@14: eprintln "initialised EM data: overall pitch range \(emdata.lowest) -> \(emdata.highest)"; Chris@13: Chris@12: chunkify cols = Chris@12: if empty? cols then [] Chris@12: else Chris@13: (mat.resizedTo chunkSize Chris@13: (mat.fromColumns (take chunkSize.columns cols))) Chris@13: :. \(chunkify (drop chunkSize.columns cols)); Chris@12: fi; Chris@12: Chris@12: chunks = chunkify columns; Chris@12: Chris@12: eprintln "we have \(length chunks) chunks of size \(mat.size (head chunks))"; Chris@12: Chris@26: oneIteration emdata chunk n = Chris@28: (eprintln "E"; Chris@28: { estimate, q } = em.performExpectation emdata chunk; Chris@28: eprintln "M"; Chris@26: newdata = em.performMaximisation emdata chunk q; Chris@26: if (n % 6 == 0) then Chris@26: \() (plot.plot [ Grid chunk ]); Chris@26: \() (plot.plot [ Grid estimate ]); Chris@26: fi; Chris@26: newdata); Chris@13: Chris@26: iterations = 6; Chris@14: Chris@26: var d = emdata; Chris@26: for [1..iterations] do i: Chris@26: eprintln "iteration \(i)..."; Chris@26: d := oneIteration d (head chunks) i; Chris@26: done; Chris@14: Chris@28: eprintln "done, plotting pitch activation matrix"; Chris@28: Chris@28: \() (plot.plot [Grid d.pitches]); Chris@28: \() (plot.plot [Contour d.pitches]); Chris@14: Chris@14: Chris@14: (); Chris@14: Chris@14: