Пример #1
0
 /**
  * Turns a NoteToken into a Pitch by equating their representations and then enforcing the Key of
  * the Piece and the Accidentals encountered in the given meter
  *
  * @param workingNote, the NoteToken from which to make a Pitch
  * @return A Pitch that represents the given input NoteToken
  */
 private Pitch constructNote(NoteToken workingNote) {
   Pitch workingPitch;
   int octave = 0;
   // Add the note initally
   if ('A' <= workingNote.getNote() && workingNote.getNote() <= 'G') {
     workingPitch = new Pitch(workingNote.getNote());
   } else {
     octave++;
     workingPitch =
         new Pitch(Character.toUpperCase(workingNote.getNote())).transpose(Pitch.OCTAVE);
   }
   // Transpose by the octaves
   octave += workingNote.getOctave();
   workingPitch = workingPitch.octaveTranspose(workingNote.getOctave());
   // Collect accidentals, use them to modify the accidental list
   switch (workingNote.getNote()) {
     case 'A':
     case 'a':
       if (workingNote.getAccidental() == Integer.MIN_VALUE) {
         keyAccidental.put("A" + octave, 0);
       } else if (workingNote.getAccidental() == 0) {
         keyAccidental.put("A" + octave, -1 * keySignature.get('A'));
       } else {
         keyAccidental.put("A" + octave, -1 * keySignature.get('A') + workingNote.getAccidental());
       }
       break;
     case 'B':
     case 'b':
       if (workingNote.getAccidental() == Integer.MIN_VALUE) {
         keyAccidental.put("B" + octave, 0);
       } else if (workingNote.getAccidental() == 0) {
         keyAccidental.put("B" + octave, -1 * keySignature.get('B'));
       } else {
         keyAccidental.put("B" + octave, -1 * keySignature.get('B') + workingNote.getAccidental());
       }
       break;
     case 'C':
     case 'c':
       if (workingNote.getAccidental() == Integer.MIN_VALUE) {
         keyAccidental.put("C" + octave, 0);
       } else if (workingNote.getAccidental() == 0) {
         keyAccidental.put("C" + octave, -1 * keySignature.get('C'));
       } else {
         keyAccidental.put("C" + octave, -1 * keySignature.get('C') + workingNote.getAccidental());
       }
       break;
     case 'D':
     case 'd':
       if (workingNote.getAccidental() == Integer.MIN_VALUE) {
         keyAccidental.put("D" + octave, 0);
       } else if (workingNote.getAccidental() == 0) {
         keyAccidental.put("D" + octave, -1 * keySignature.get('D'));
       } else {
         keyAccidental.put("D" + octave, -1 * keySignature.get('D') + workingNote.getAccidental());
       }
       break;
     case 'E':
     case 'e':
       if (workingNote.getAccidental() == Integer.MIN_VALUE) {
         keyAccidental.put("E" + octave, 0);
       } else if (workingNote.getAccidental() == 0) {
         keyAccidental.put("E" + octave, -1 * keySignature.get('E'));
       } else {
         keyAccidental.put("E" + octave, -1 * keySignature.get('E') + workingNote.getAccidental());
       }
       break;
     case 'F':
     case 'f':
       if (workingNote.getAccidental() == Integer.MIN_VALUE) {
         keyAccidental.put("F" + octave, 0);
       } else if (workingNote.getAccidental() == 0) {
         keyAccidental.put("F" + octave, -1 * keySignature.get('F'));
       } else {
         keyAccidental.put("F" + octave, -1 * keySignature.get('F') + workingNote.getAccidental());
       }
       break;
     case 'G':
     case 'g':
       if (workingNote.getAccidental() == Integer.MIN_VALUE) {
         keyAccidental.put("G" + octave, 0);
       } else if (workingNote.getAccidental() == 0) {
         keyAccidental.put("G" + octave, -1 * keySignature.get('G'));
       } else {
         keyAccidental.put("G" + octave, -1 * keySignature.get('G') + workingNote.getAccidental());
       }
       break;
   }
   // Now modify by the accidental and key signature in tandem
   switch (workingNote.getNote()) {
     case 'A':
     case 'a':
       workingPitch = workingPitch.accidentalTranspose(keyAccidental.get("A" + octave));
       workingPitch = workingPitch.accidentalTranspose(keySignature.get('A'));
       break;
     case 'B':
     case 'b':
       workingPitch = workingPitch.accidentalTranspose(keyAccidental.get("B" + octave));
       workingPitch = workingPitch.accidentalTranspose(keySignature.get('B'));
       break;
     case 'C':
     case 'c':
       workingPitch = workingPitch.accidentalTranspose(keyAccidental.get("C" + octave));
       workingPitch = workingPitch.accidentalTranspose(keySignature.get('C'));
       break;
     case 'D':
     case 'd':
       workingPitch = workingPitch.accidentalTranspose(keyAccidental.get("D" + octave));
       workingPitch = workingPitch.accidentalTranspose(keySignature.get('D'));
       break;
     case 'E':
     case 'e':
       workingPitch = workingPitch.accidentalTranspose(keyAccidental.get("E" + octave));
       workingPitch = workingPitch.accidentalTranspose(keySignature.get('E'));
       break;
     case 'F':
     case 'f':
       workingPitch = workingPitch.accidentalTranspose(keyAccidental.get("F" + octave));
       workingPitch = workingPitch.accidentalTranspose(keySignature.get('F'));
       break;
     case 'G':
     case 'g':
       workingPitch = workingPitch.accidentalTranspose(keyAccidental.get("G" + octave));
       workingPitch = workingPitch.accidentalTranspose(keySignature.get('G'));
       break;
   }
   return workingPitch;
 }