// // Programmer: Craig Stuart Sapp // Creation Date: Sat Oct 14 19:55:21 PDT 2006 // Last Modified: Sat Oct 14 19:55:30 PDT 2006 // Filename: ...sig/examples/all/dynaplot.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/dynaplot.cpp // Syntax: C++; museinfo // // Description: Create displays of dynamics v timings of notes. // #include "humdrum.h" #include #include #ifndef OLDCPP #include #define SSTREAM stringstream #define CSTRING str().c_str() using namespace std; #else #ifdef VISUAL #include /* for windows 95 */ #else #include #endif #define SSTREAM strstream #define CSTRING str() #endif // function declarations void checkOptions (Options& opts, int argc, char* argv[]); void example (void); void usage (const char* command); void processFile (HumdrumFile& file); double getTimeFromLine (HumdrumFile& hfile, int line); void printMeasureData (Array& times, Array& labels); double getNextTime (HumdrumFile& hfile, int line); void getMeasureData (HumdrumFile& infile, Array& times, Array& labels); void getDynamicData (HumdrumFile& infile, Array >& times, Array >& dynamics, Array >& tracks); // global variables Options options; // database for command-line arguments int debugQ = 0; // used with --debug option /////////////////////////////////////////////////////////////////////////// int main(int argc, char* argv[]) { HumdrumFile infile, outfile; // process the command-line options checkOptions(options, argc, argv); // if no command-line arguments read data file from standard input int numinputs = options.getArgCount(); if (numinputs < 1) { infile.read(cin); } else { infile.read(options.getArg(1)); } processFile(infile); return 0; } /////////////////////////////////////////////////////////////////////////// ////////////////////////////// // // processFile -- // void processFile(HumdrumFile& infile) { infile.analyzeRhythm(); Array measuretimes; // time of first note in measure Array measurenumbers; // measure number of measure in score Array > times; Array > dynamics; Array > tracks; getMeasureData(infile, measuretimes, measurenumbers); getDynamicData(infile, times, dynamics, tracks); printMeasureData(measuretimes, measurenumbers); } ////////////////////////////// // // getDynamicData -- // void getDynamicData(HumdrumFile& infile, Array >& times, Array >& dynamics, Array >& tracks) { times.setSize(infile.getNumLines() * 10); times.setSize(0); dynamics.setSize(infile.getNumLines() * 10); dynamics.setSize(0); tracks.setSize(infile.getNumLines() * 10); tracks.setSize(0); int i; for (i=0; i& times, Array& labels) { times.setSize(infile.getNumLines()); times.setSize(0); labels.setSize(infile.getNumLines()); labels.setSize(0); double currenttime = 0.0; int number = 0; int i; for (i=0; i& times, Array& labels) { int i; cout << "measures = {\n"; for (i=0; i 0.0) { break; } } return atime; } ////////////////////////////// // // getTimeFromLine -- // double getTimeFromLine(HumdrumFile& hfile, int line) { int i; double output; if (hfile[line].getType() != E_humrec_data) { return -1.0; } for (i=0; i