Exemplo n.º 1
0
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;
}