Chris@12: Chris@12: module templates; Chris@12: Chris@12: vec = load may.vector; Chris@13: mat = load may.matrix; Chris@12: Chris@12: // Load instrument templates Chris@12: Chris@12: instruments = [ Chris@12: "bassoon", Chris@12: "cello", Chris@12: "clarinet", Chris@12: "flute", Chris@12: "guitar", Chris@12: "horn", Chris@12: "oboe", Chris@12: "tenorsax", Chris@12: "violin", Chris@12: "piano-maps-SptkBGCl" Chris@12: ]; Chris@12: Chris@12: loadTemplates () = mapIntoHash id Chris@12: do instrument: Chris@12: readFile "../data/\(instrument).csv" "UTF-8" Chris@12: do istr: Chris@13: mat.fromColumns Chris@12: (map do line: Chris@12: vec.fromList (map number (strSplit "," line)) Chris@13: done (istr.lines ())); Chris@12: done; Chris@12: done instruments; Chris@12: Chris@23: hardcodedRanges = [ Chris@23: "bassoon": { lowest = 15, highest = 51 }, Chris@23: "cello": { lowest = 15, highest = 60 }, Chris@23: "clarinet": { lowest = 29, highest = 68 }, Chris@23: "flute": { lowest = 39, highest = 72 }, Chris@23: "guitar": { lowest = 19, highest = 55 }, Chris@23: "horn": { lowest = 20, highest = 56 }, Chris@23: "oboe": { lowest = 37, highest = 70 }, Chris@23: "tenorsax": { lowest = 23, highest = 54 }, Chris@23: "violin": { lowest = 34, highest = 72 }, Chris@23: "piano-maps-SptkBGCl": { lowest = 16, highest = 72 }, Chris@23: ]; Chris@23: Chris@22: //!!! these ranges are hardcoded, in the original (and are a bit more restrictive) Chris@23: extractRanges' templates = mapIntoHash id Chris@13: do instrument: Chris@13: levels = map vec.sum (mat.asColumns (templates[instrument])); Chris@13: first = length levels - length (find (>0) levels); Chris@13: last = length (find (>0) (reverse levels)) - 1; Chris@14: { lowest = first, highest = last } Chris@13: done (keys templates); Chris@13: Chris@23: extractRanges templates = hardcodedRanges; Chris@23: Chris@12: { Chris@13: loadTemplates, Chris@13: extractRanges Chris@12: } Chris@12: