int main(int argc, char** argv) { // handle command-line options: Options opts; opts.define("r|raw=b", "print raw grid"); opts.define("d|diatonic=b", "print diatonic grid"); opts.define("m|midi-pitch=b", "print midie-pitch grid"); opts.define("b|base-40=b", "print base-40 grid"); opts.define("l|metric-levels=b", "use metric levels in analysis"); opts.define("k|kern=b", "print kern pitch grid"); opts.define("debug=b", "print grid cell information"); opts.define("B=b", "use second algorithm"); opts.process(argc, argv); if (opts.getBoolean("B")) { Algorithm = 'B'; } levelsQ = opts.getBoolean("metric-levels"); // read an inputfile from the first filename argument, or standard input HumdrumFile infile; if (opts.getArgCount() > 0) { infile.read(opts.getArgument(1)); } else { infile.read(cin); } NoteGrid grid(infile); if (opts.getBoolean("debug")) { grid.printGridInfo(cerr); // return 0; } else if (opts.getBoolean("raw")) { grid.printRawGrid(cout); return 0; } else if (opts.getBoolean("diatonic")) { grid.printDiatonicGrid(cout); return 0; } else if (opts.getBoolean("midi-pitch")) { grid.printMidiGrid(cout); return 0; } else if (opts.getBoolean("base-40")) { grid.printBase40Grid(cout); return 0; } else if (opts.getBoolean("kern")) { grid.printKernGrid(cout); return 0; } vector<vector<string> > results; results.resize(grid.getVoiceCount()); for (int i=0; i<(int)results.size(); i++) { results[i].resize(infile.getLineCount()); } doAnalysis(results, grid, opts.getBoolean("debug")); vector<HTp> kernspines = infile.getKernSpineStartList(); infile.appendDataSpine(results.back()); for (int i = (int)results.size()-1; i>0; i--) { int track = kernspines[i]->getTrack(); infile.insertDataSpineBefore(track, results[i-1]); } cout << infile; return 0; }