// // Programmer: Craig Stuart Sapp // Creation Date: Wed Mar 23 19:44:07 PDT 2011 // Last Modified: Wed Mar 23 19:44:10 PDT 2011 // Filename: ...sig/examples/all/onset.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/onset.cpp // Syntax: C++; museinfo // // Description: Analyzes **kern data for onset data. // #include "humdrum.h" #ifndef OLDCPP #include #else #include #endif // function declarations void checkOptions (Options& opts, int argc, char* argv[]); void example (void); void usage (const char* command); void processData (HumdrumFile& infile, RationalNumber& sampledur); void printBrief (Array positions, Array mpositions, HumdrumFile& infile, RationalNumber& sampledur); void printScore (Array positions, Array mpositions, HumdrumFile& infile, RationalNumber& sampledur); // global variables Options options; // database for command-line arguments RationalNumber Sampledur; // used with -t option int timebaseQ = 0; // used with -t option int briefQ = 0; // used with -b option int csvQ = 1; // used with -C option /////////////////////////////////////////////////////////////////////////// int main(int argc, char* argv[]) { HumdrumFile infile, outfile; // process the command-line options checkOptions(options, argc, argv); // figure out the number of input files to process int numinputs = options.getArgCount(); for (int i=0; i positions; RationalNumber psize = scoreduration / sampledur; RationalNumber position; positions.setSize(int(psize.getFloat()+1)); positions.setAll(0); Array mpositions; // location of measures mpositions.setSize(positions.getSize()); mpositions.setAll(0); char buffer[1024] = {0}; int pindex = 0; // position index int rcount = 0; // number of attacks on the line int acount = 0; // number of attacks on the line int tcount = 0; // for keeping track of chords int lastindex = 0; // for suppressing double rest markers int i, j, k; for (i=0; i 0) { positions[pindex] = acount; lastindex = pindex; } else { // print the rest marker only if the last marker was not a rest if (positions[lastindex] >= 0) { positions[pindex] = -rcount; } } } if (briefQ) { printBrief(positions, mpositions, infile, sampledur); } else { printScore(positions, mpositions, infile, sampledur); } } ////////////////////////////// // // printScore -- // void printScore(Array positions, Array mpositions, HumdrumFile& infile, RationalNumber& sampledur) { RationalNumber rpos; int position; int i; for (i=0; i positions, Array mpositions, HumdrumFile& infile, RationalNumber& sampledur) { RationalNumber maxR = infile.getTotalDurationR() / sampledur; int max = int(maxR.getFloat()); int i; for (i=0; i