// // Programmer: Craig Stuart Sapp // Creation Date: Thu May 12 20:08:36 PDT 2016 // Last Modified: Thu May 12 20:08:40 PDT 2016 // Filename: ...museinfo/examples/all/rnn-input.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/rnn-input.cpp // Syntax: C++; museinfo // // Description: Generate RNN input data from Humdum **kern data. // #include "humdrum.h" #include #include #include "PerlRegularExpression.h" /////////////////////////////////////////////////////////////////////////// // function declarations void checkOptions (Options& opts, int argc, char* argv[]); void example (void); void usage (const char* command); void processFile (HumdrumFile& infile); void printAnalysis (vector > >& data); void storeNote (vector >& pcs, int startrow, int endrow, int pc); // global variables Options options; // database for command-line arguments int debugQ = 0; // used with --debug option /////////////////////////////////////////////////////////////////////////// int main(int argc, char** argv) { checkOptions(options, argc, argv); HumdrumStream streamer(options); HumdrumFile infile; while (streamer.read(infile)) { processFile(infile); break; // only allowing one input at the moment } return 0; } /////////////////////////////////////////////////////////////////////////// ////////////////////////////// // // processFile -- Do requested analysis on a given file. // void processFile(HumdrumFile& infile) { infile.analyzeRhythm("4"); vector ktracks; infile.getKernTracks(ktracks); int kcount = (int)ktracks.size(); int maxtrack = infile.getMaxTracks(); vector rtracks; rtracks.resize(maxtrack+1); fill(rtracks.begin(), rtracks.end(), -1); int i, j, k; for (i=0; i<(int)ktracks.size(); i++) { rtracks[ktracks[i]] = i; } RationalNumber linedur(1, 2); RationalNumber totaldur = infile.getTotalDurationR(); RationalNumber rframes = totaldur / linedur; int frames; if (rframes.getDenominator() == 1) { frames = rframes.getNumerator(); } else { frames = int(rframes.getFloat()) + 1; } vector > > pcs; pcs.resize(kcount); for (i=0; i<(int)pcs.size(); i++) { pcs[i].resize(frames); for (j=0; j<(int)pcs[i].size(); j++) { pcs[i][j].resize(12); fill (pcs[i][j].begin(), pcs[i][j].end(), 0); } } vector tokens; int pc; int voice; int track; RationalNumber duration; RationalNumber tempr; int startrow; int endrow; for (i=0; i