int isValidFile(HumdrumFile& infile) { int actual; PerlRegularExpression pre; Array<int> ktracks; infile.getTracksByExInterp(ktracks, "**kern"); actual = ktracks.getSize(); int i; int target = -1; for (i=0; i<infile.getNumLines(); i++) { if (pre.search(infile[i][0], "!!+voices\\s*:\\s*(\\d+)")) { target = atoi(pre.getSubmatch(1)); break; } } if (target < 0) { // no !!voices: line, so presum valid return 1; } if (target == actual) { return 1; } else { return 0; } }
void printPartNames(HumdrumFile& infile) { int i, j; Array<Array<char> > names; Array<int> ktracks; infile.getTracksByExInterp(ktracks, "**kern"); names.setSize(ktracks.getSize()); char buffer[1024] = {0}; for (i=0; i<names.getSize(); i++) { sprintf(buffer, "part %ld", names.getSize() - i); names[i] = buffer; } Array<int> rkern; rkern.setSize(infile.getMaxTracks()+1); rkern.setAll(-1); for (i=0; i<ktracks.getSize(); i++) { rkern[ktracks[i]] = i; } int track; for (i=0; i<infile.getNumLines(); i++) { if (infile[i].isData()) { break; } if (!infile[i].isInterpretation()) { continue; } for (j=0; j<infile[i].getFieldCount(); j++) { if (!infile[i].isExInterp(j, "**kern")) { continue; } if (strncmp(infile[i][j], "*I\"", 3) == 0) { track = infile[i].getPrimaryTrack(j); names[rkern[track]] = &(infile[i][j][3]); } } } cout << "["; for (i=names.getSize()-1; i>=0; i--) { cout << "\"" << names[i] << "\""; if (i > 0) { cout << ", "; } } cout << "]"; }
void createJsonProll(HumdrumFile& infile) { infile.analyzeRhythm("4"); Array<int> ktracks; infile.getTracksByExInterp(ktracks, "**kern"); Array<int> rktracks(infile.getMaxTracks()+1); rktracks.allowGrowth(0); rktracks.setAll(-1); int i, j, k; for (i=0; i<ktracks.getSize(); i++) { rktracks[ktracks[i]] = i; } int ksize = ktracks.getSize(); stringstream* staves; staves = new stringstream[ksize]; char buffer[1024] = {0}; int b40; RationalNumber duration; int track; int tcount; Array<Array<char> > partnames(ktracks.getSize()); Array<int> partmax(ktracks.getSize()); Array<int> partmin(ktracks.getSize()); partmax.setAll(-10000); partmin.setAll(+10000); Array<int> noteinit(ktracks.getSize()); noteinit.setAll(0); for (i=0; i<infile.getNumLines(); i++) { if (!infile[i].isData()) { continue; } for (j=0; j<infile[i].getFieldCount(); j++) { if (!infile[i].isExInterp(j, "**kern")) { continue; } if (strcmp(infile[i][j], ".") == 0) { continue; } tcount = infile[i].getTokenCount(j); track = infile[i].getPrimaryTrack(j); for (k=0; k<tcount; k++) { infile[i].getToken(buffer, j, k); if (strchr(buffer, 'r') != NULL) { continue; } if (strchr(buffer, ']') != NULL) { continue; } if (strchr(buffer, '_') != NULL) { continue; } if (strcmp(buffer, ".") == 0) { continue; } b40 = Convert::kernToBase40(buffer); duration = infile.getTiedDurationR(i, j, k); if (noteinit[rktracks[track]] == 0) { noteinit[rktracks[track]] = 1; pi(staves[rktracks[track]], 4); staves[rktracks[track]] << "{\n"; } else { pi(staves[rktracks[track]], 4); staves[rktracks[track]] << "},\n"; pi(staves[rktracks[track]], 4); staves[rktracks[track]] << "{\n"; } printJsonNote(staves[rktracks[track]], b40, duration, buffer, infile, i, j, k); if (b40 > partmax[rktracks[track]]) { partmax[rktracks[track]] = b40; } if (b40 < partmin[rktracks[track]]) { partmin[rktracks[track]] = b40; } } } } printJsonHeader(infile, 0, ktracks, partmin, partmax); pi(cout, 2); cout << "[\n"; pi(cout, 2); cout << "{\n"; int pindex = 0; for (i=ktracks.getSize()-1; i>=0; i--) { pi(cout, 3); cout << "\"partindex\"\t:\t" << pindex++ << ",\n"; pi(cout, 3); cout << "\"notedata\"\t:\t" << "\n"; pi(cout, 4); cout << "[\n"; cout << staves[i].str(); pi(cout, 4); cout << "}\n"; pi(cout, 4); cout << "]\n"; if (i > 0) { pi(cout, 2); cout << "},\n"; pi(cout, 2); cout << "{\n"; } else { pi(cout, 2); cout << "}\n"; } } pi(cout, 2); cout << "]\n"; pi(cout, 0); cout << "}\n"; delete [] staves; }
void processFile(HumdrumFile& infile, const string& filename) { int i; if (SEGMENTS && !summaryQ) { cout << "!!!!SEGMENT: " << infile.getFileName() << endl; } if (debugQ) { cout << "!! file: " << infile.getFileName() << endl; } if (validQ && !isValidFile(infile)) { return; } if (kernQ) { Array<int> ktracks; infile.getTracksByExInterp(ktracks, "**kern"); cout << ktracks.getSize() << endl; return; } if (mdurQ || summaryQ || nograceQ) { infile.analyzeRhythm("4"); } Array<int> analysis(infile.getNumLines()); analysis.setAll(0); analysis.allowGrowth(0); for (i=0; i<infile.getNumLines(); i++) { if (!infile[i].isData()) { continue; } analysis[i] = doAnalysis(infile, i); } if (summaryQ) { return; } // print analysis: int firstdata = 1; PerlRegularExpression pre; for (i=0; i<infile.getNumLines(); i++) { if (appendQ) { cout << infile[i]; } if (infile[i].isData()) { if (appendQ) { cout << '\t'; } if (measureQ && firstdata) { printMeasureData(analysis, infile, i); firstdata = 0; } else if (measureQ) { cout << "."; } else { if (nograceQ && (infile[i].getDuration() == 0)) { cout << "."; } else { cout << analysis[i]; } } if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else if (infile[i].isInterpretation()) { if (appendQ) { cout << '\t'; } if (strcmp(infile[i][0], "*-") == 0) { cout << "*-"; } else if (strncmp(infile[i][0], "**", 2) == 0) { printExclusiveInterpretation(); } else { cout << "*"; } if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else if (infile[i].isBarline()) { if (pre.search(infile[i][0], "\\d")) { firstdata = 1; } if (appendQ) { cout << '\t'; } cout << infile[i][0]; if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else if (infile[i].isLocalComment()) { if (appendQ) { cout << '\t'; } cout << "!"; if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else { if (!(appendQ || prependQ)) { cout << infile[i]; } if (appendQ) { cout << '\n'; } } if (prependQ) { cout << infile[i]; } if (!appendQ) { cout << '\n'; } } }
void processFile(HumdrumFile& infile) { int i, j; int pindex; int hastext = 0; vector<int> ktracks; infile.getTracksByExInterp(ktracks, "**kern"); int partcount = ktracks.size(); vector<int> rktracks; rktracks.resize(infile.getMaxTracks() + 1); fill(rktracks.begin(), rktracks.end(), -1); for (i=0; i<(int)ktracks.size(); i++) { rktracks[ktracks[i]] = i; } char buffer[1024] = {0}; vector<string> partname(partcount); vector<string> partabbr(partcount); for (i=0; i<partcount; i++) { sprintf(buffer, "part %d", partcount - i); partname[i] = buffer; sprintf(buffer, "P%d", partcount - i); partabbr[i] = buffer; } for (i=0; i<infile.getNumLines(); i++) { if (infile[i].isData()) { break; } if (!infile[i].isInterpretation()) { continue; } for (j=0; j<infile[i].getFieldCount(); j++) { if (infile[i].isExInterp(j, "**text")) { hastext = 1; } if (!infile[i].isExInterp(j, "**kern")) { continue; } pindex = rktracks[infile[i].getPrimaryTrack(j)]; if (strncmp(infile[i][j], "*I\"", 3) == 0) { partname[pindex] = &(infile[i][j][3]); } else if (strncmp(infile[i][j], "*I'", 3) == 0) { partabbr[pindex] = &(infile[i][j][3]); } } } cout << "**spine\t**pname\t**pabbr\n"; cout << "!!voice-count:\t" << partcount << "\n"; for (i=0; i<(int)ktracks.size(); i++) { cout << ktracks[i] << "\t"; cout << partname[i] << "\t"; cout << partabbr[i]; cout << "\n"; } if (hastext) { cout << "!!has-text:\ttrue\n"; } cout << "*-\t*-\t*-\t\n"; }