void createIndex(HumdrumFile& hfile, const char* filename) { int i; int maxtracks = hfile.getMaxTracks(); if (polyQ) { for (i=1; i<=maxtracks; i++) { if (strcmp("**kern", hfile.getTrackExInterp(i)) != 0) { continue; } if (istnQ) { cout << getIstn(filename); } else { cout << filename; } cout << "::" << i; if (strcmp("**kern", hfile.getTrackExInterp(i)) == 0) { createIndexEnding(hfile, i); cout << "\n"; } } } else { if (istnQ) { cout << getIstn(filename); } else { cout << filename; } for (i=1; i<=maxtracks; i++) { if (strcmp("**kern", hfile.getTrackExInterp(i)) == 0) { createIndexEnding(hfile, i); cout << "\n"; break; } } } }
void cutNotesAcrossBarline(HumdrumFile& infile, int barline, int trackline, int fieldcount, RationalNumber& barabsbeat) { Array<int> tracknum; Array<int> subtracknum; int i; getTrackInfo(infile, trackline, tracknum, subtracknum); PerlRegularExpression pre; int dataline = -1; for (i=barline+1; i<infile.getNumLines(); i++) { if (infile[i].isData()) { dataline = i; break; } else if (infile[i].isGlobalComment()) { if (pre.search(infile[i][0], "!!barline:.*dataline")) { generateDataLine(infile, i, tracknum, subtracknum); infile[i].setAbsBeatR(barabsbeat); dataline = i; break; } } } RationalNumber nabsbeat; // absolute beat of starting note; RationalNumber dabsbeat; // absolute beat of data line; RationalNumber firstdur, seconddur; RationalNumber olddur; int ii, jj; int tiestate; // int track; int j; for (j=0; j<infile[dataline].getFieldCount(); j++) { if (strcmp(infile.getTrackExInterp(tracknum[j]).c_str(), "**kern") != 0) { continue; } if (strcmp(infile[dataline][j], ".") != 0) { continue; } getAddress(ii, jj, infile, barline, tracknum[j], subtracknum[j]); nabsbeat = infile[ii].getAbsBeatR(); dabsbeat = infile[dataline].getAbsBeatR(); firstdur = dabsbeat - nabsbeat; olddur = Convert::kernToDurationR(infile[ii][jj]); seconddur = olddur - firstdur; infile[dataline].setToken(j, infile[ii][jj]); tiestate = setNewDuration(infile, ii, jj, firstdur, -1, 0); setNewDuration(infile, dataline, j, seconddur, +1, tiestate); } }
int getKernTrack(int number, HumdrumFile& infile) { int counter = 0; int i; for (i=1; i<=infile.getMaxTracks(); i++) { if (infile.getTrackExInterp(i) == "**kern") { counter++; } if (counter == number) { return i; } } // Give some high-numbered spine which is not likely // to be used (but is valid based on the size of trackmute). return (int)trackmute.size()-10; }
void getKernTracks(Array<int>& tracks, HumdrumFile& infile) { tracks.setSize(infile.getMaxTracks()); tracks.setSize(0); int i; for (i=1; i<=infile.getMaxTracks(); i++) { if (infile.getTrackExInterp(i) == "**kern") { tracks.append(i); } } if (debugQ) { cerr << "\t**kern tracks:\n"; for (i=0; i<tracks.getSize(); i++) { cerr << "\t" << tracks[i] << endl; } } }
int chooseSpine(const char* interp, HumdrumFile& infile) { if (interp == NULL) { return 1; } if (strcmp(interp, "") == 0) { return 1; } int maxtracks = infile.getMaxTracks(); int i; for (i=1; i<=maxtracks; i++) { if (infile.getTrackExInterp(i) == interp) { return i; } } cerr << "Error: A " << interp << " data spine is not present in the source" << endl; exit(1); return 1; }
void getTransformation(HumdrumFile& hfile, Array<int>& transform) { transform.setSize(1000); transform.setSize(0); transform.allowGrowth(1); int maxspine = hfile.getMaxTracks(); int i, j; if (reverseQ) { transform.setSize(maxspine); for (i=0; i<maxspine; i++) { transform[i] = maxspine - i; } return; } if (options.getBoolean("field-order")) { // const char* order = options.getString("field-order"); cout << "Not yet written" << endl; return; } if (normalQ) { int findex = -1; int lindex = -1; int i; for (i=0; i<hfile.getMaxTracks(); i++) { if (hfile.getTrackExInterp(i+1) == "**kern") { if (findex == -1) { findex = i; } lindex = i; } } double favg = 0.0; double lavg = 0.0; if (findex != lindex) { favg = getAveragePitch(hfile, findex + 1); lavg = getAveragePitch(hfile, lindex + 1); } if (favg > lavg) { if (determineQ) { cout << "Score is in reverse order.\tpitch avgs:" << favg << "\tcompared to " << lavg << endl; return; } // reverse data by kern (or primary spine type) blocks for (i=maxspine; i>0; i--) { if (hfile.getTrackExInterp(i) == "**kern") { transform.append(i); j = i+1; while ((j <= maxspine) && (hfile.getTrackExInterp(j) != "**kern")) { transform.append(j); j++; } } } transform.allowGrowth(0); return; } else { // score is already in normal form if (determineQ) { cout << "Score is in normal order.\tpictch avgs.:" << favg << " compared to " << lavg << endl; return; } for (i=1; i<=maxspine; i++) { transform.append(i); } transform.allowGrowth(0); return; } } // reverse data by kern (or primary spine type) blocks char buffer[1024] = {0}; if (strncmp(primaryspine, "**", 2) != 0) { strcpy(buffer, "**"); strcat(buffer, primaryspine); } else { strcat(buffer, primaryspine); } for (i=maxspine; i>0; i--) { if (hfile.getTrackExInterp(i) == buffer) { transform.append(i); j = i+1; while ((j <= maxspine) && (hfile.getTrackExInterp(j) != buffer)) { transform.append(j); j++; } } } }