// // Programmer: Craig Stuart Sapp // Creation Date: Thu Jul 9 13:20:28 PDT 1998 // Last Modified: Tue Dec 5 15:11:50 PST 2000 (enable polyphonic sampling) // Filename: ...sig/examples/all/sample.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/sample.cpp // Syntax: C++; museinfo // // Description: Samples pitches according to the given pattern // #include "humdrum.h" #include "CircularBuffer.h" #include #include #include // function declarations void checkOptions(Options& opts, int argc, char* argv[]); void createDataLine(char* buffer, HumdrumFile& infile, int line, double duration, int style); void example(void); void processRecords(HumdrumFile& infile, HumdrumFile& outfile); void usage(const char* command); // interface variables Options options; // database for command-line arguments CircularBuffer durations(1000); CircularBuffer styles(1000); /////////////////////////////////////////////////////////////////////////// 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 targetbeat) || (fabs(currbeat-targetbeat) < 0.001)) { if (fabs(currbeat - targetbeat) < 0.0001) { createDataLine(buffer, infile, i, duration, style); outfile.appendLine(buffer); styles.insert(style); durations.insert(duration); style = styles.extract(); duration = durations.extract(); targetbeat += duration; } else if (currbeat+currdur > targetbeat) { if (state == 1) { createDataLine(buffer, infile, lastline, duration, style); } else { createDataLine(buffer, infile, i, duration, style); } outfile.appendLine(buffer); styles.insert(style); durations.insert(duration); style = styles.extract(); duration = durations.extract(); targetbeat += duration; } else { break; } } lastline = i; } } ////////////////////////////// // // createDataLine -- // void createDataLine(char* buffer, HumdrumFile& infile, int line, double duration, int style) { buffer[0] = '\0'; if (style == 'x') { return; } char dstring[100] = {0}; char pbuffer[100] = {0}; char tbuffer[100] = {0}; int tokencount; Convert::durationToKernRhythm(dstring, duration); int pitch; int i, k; for (i=0; i