// // Programmer: Craig Stuart Sapp // Creation Date: Mon Jan 8 23:45:43 PST 2007 // Last Modified: Mon Jan 8 23:45:36 PST 2007 // Filename: ...sig/examples/all/seqalign.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/seqalign.cpp // Syntax: C++; museinfo // // Description: Align score beats to audio onset times. // #include "humdrum.h" #include #include #ifndef OLDCPP using namespace std; #else #endif // function declarations void checkOptions (Options& opts, int argc, char* argv[]); void example (void); void usage (const char* command); void extractSequence (Array& hdata, HumdrumFile& hfile); void fillSequence (Array& array, Array& index, Array& data, int totalsize); int findNearest (int index, Array& beatarray, Array& beatindex, Array& onsetarray, Array& onsetindex); // global variables Options options; // database for command-line arguments /////////////////////////////////////////////////////////////////////////// int main(int argc, char* argv[]) { HumdrumFile beats, onsets; // process the command-line options checkOptions(options, argc, argv); // figure out the number of input files to process int numinputs = options.getArgCount(); if (numinputs != 2) { usage(options.getCommand().c_str()); exit(1); } beats.read(options.getArg(1)); onsets.read(options.getArg(2)); Array beatdata; Array onsetdata; extractSequence(beatdata, beats); extractSequence(onsetdata, onsets); // cout << "BEAT DATA contains " << beatdata.getSize() << " numbers" << endl; // cout << "ONSET DATA contains " << onsetdata.getSize() << " numbers" << endl; Array beatarray; Array onsetarray; int sequencesize = 100000; Array beatindex; Array onsetindex; fillSequence(beatarray, beatindex, beatdata, sequencesize); fillSequence(onsetarray, onsetindex, onsetdata, sequencesize); int i; int newi; Array mapping; mapping.setSize(2*beatindex.getSize()); mapping.setSize(0); for (i=0; i