void processRecords(HumdrumFile& infile) { Array<ChordQuality> cq; infile.analyzeSonorityQuality(cq); ChordQuality quality; int foundstart = 0; char aString[512] = {0}; for (int i=0; i<infile.getNumLines(); i++) { if (options.getBoolean("debug")) { cout << "processing line " << (i+1) << " of input ..." << endl; cout << "LINE IS: " << infile[i] << endl; } switch (infile[i].getType()) { case E_humrec_none: case E_humrec_empty: case E_humrec_bibliography: case E_humrec_global_comment: cout << infile[i] << endl; break; case E_humrec_data_comment: if (appendQ) { cout << infile[i] << "\t"; } if (infile[i].equalFieldsQ("**kern")) { cout << infile[i][0]; } else { cout << "!"; } cout << endl; break; case E_humrec_data_interpretation: if (appendQ) { cout << infile[i] << "\t"; } if (!foundstart && infile[i].hasExclusiveQ()) { foundstart = 1; if (tniQ) { cout << "**Tni"; } else if (tnQ) { cout << "**Tn"; } else if (forteQ) { cout << "**forte"; } else { cout << "**qual"; } } else { if (infile[i].equalFieldsQ("**kern") && (!infile[i].isSpineManipulator(0))) { cout << infile[i][0]; } else { cout << "*"; } } cout << endl; break; case E_humrec_data_kern_measure: if (appendQ) { cout << infile[i] << "\t"; } cout << infile[i][0]; cout << endl; break; case E_humrec_data: if (appendQ) { cout << infile[i] << "\t"; } // handle null fields if (infile[i].equalFieldsQ("**kern", ".")) { cout << "." << endl; break; } if (ivQ) { Array<int> iv; infile.getIntervalVector(iv, i); cout << "<"; for (int ii=0; ii<iv.getSize(); ii++) { if (iv[ii] < 9) { cout << iv[ii]; continue; } if (iv[ii] < 36) { cout << char(iv[ii]-10+'A'); continue; } if (ii > 0) { cout << ","; } cout << iv[ii]; if (ii < 5) { cout << ","; } } cout << ">" << endl; } else if (forteQ) { const char* name = infile.getForteSetName(i); cout << name; if (tnQ) { if (strcmp(name, "3-11") == 0) { if (strcmp(cq[i].getTypeName(), "min") == 0) { cout << "A"; } else if (strcmp(cq[i].getTypeName(), "maj") == 0) { cout << "B"; } } } if (tniQ) { int inversion = -1; if (strcmp(name, "3-11") == 0) { if ((strcmp(cq[i].getTypeName(), "min") == 0) || (strcmp(cq[i].getTypeName(), "maj") == 0)) { inversion = cq[i].getInversion(); } if (inversion >= 0) { cout << char('a'+inversion); } } } if (attackQ) { printAttackMarker(infile, i); } cout << endl; } else if (notesQ == 0) { quality = cq[i]; quality.makeString(aString, explicitQ); if (strcmp(aString, "") != 0) { if (strcmp(aString, unknown) == 0 || ( quality.getType()==E_chord_note && options.getBoolean("root")) ) { char tempbuffer[128] = {0}; strcpy(tempbuffer, aString); strcpy(aString, options.getString("unknown")); strcat(aString, tempbuffer); } if (suppressQ && transitionalSonority(quality, infile, i)) { strcpy(aString, "."); } } else { strcpy(aString, "rest"); } cout << aString << endl; } else { quality = cq[i]; fillStringWithNotes(aString, quality, infile, i); cout << aString << endl; } break; default: cerr << "Error on line " << (i+1) << " of input" << endl; cerr << "record type = " << infile[i].getType() << endl; exit(1); } } }