Exemplo n.º 1
0
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;
	 }
      }
   }
}
Exemplo n.º 2
0
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);
   }
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
      }
   }
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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++;
         }
      }
   }



}