Example #1
0
  /** This method does a variety of calculations to get the actual value of the note. */
  private void computeNoteValue(NoteContext noteContext, StaccatoParserContext parserContext) {
    // Don't compute note value for a rest
    if (noteContext.isRest) {
      return;
    }

    // Adjust for Key Signature
    if (parserContext.getKey() != null) {
      int keySig = KeyProviderFactory.getKeyProvider().convertKeyToByte(parserContext.getKey());
      if ((keySig != 0) && (!noteContext.isNatural)) {
        if ((keySig <= -1) && (noteContext.noteNumber == 11)) noteContext.noteNumber = 10;
        if ((keySig <= -2) && (noteContext.noteNumber == 4)) noteContext.noteNumber = 3;
        if ((keySig <= -3) && (noteContext.noteNumber == 9)) noteContext.noteNumber = 8;
        if ((keySig <= -4) && (noteContext.noteNumber == 2)) noteContext.noteNumber = 1;
        if ((keySig <= -5) && (noteContext.noteNumber == 7)) noteContext.noteNumber = 6;
        if ((keySig <= -6) && (noteContext.noteNumber == 0)) {
          noteContext.noteNumber = 11;
          noteContext.octaveNumber--;
        }
        if ((keySig <= -7) && (noteContext.noteNumber == 5)) noteContext.noteNumber = 4;
        if ((keySig >= +1) && (noteContext.noteNumber == 5)) noteContext.noteNumber = 6;
        if ((keySig >= +2) && (noteContext.noteNumber == 0)) noteContext.noteNumber = 1;
        if ((keySig >= +3) && (noteContext.noteNumber == 7)) noteContext.noteNumber = 8;
        if ((keySig >= +4) && (noteContext.noteNumber == 2)) noteContext.noteNumber = 3;
        if ((keySig >= +5) && (noteContext.noteNumber == 9)) noteContext.noteNumber = 10;
        if ((keySig >= +6) && (noteContext.noteNumber == 4)) noteContext.noteNumber = 5;
        if ((keySig >= +7) && (noteContext.noteNumber == 11)) {
          noteContext.noteNumber = 0;
          noteContext.octaveNumber++;
        }
        logger.info(
            "After adjusting for Key Signature, noteNumber="
                + noteContext.noteNumber
                + " octave="
                + noteContext.octaveNumber);
      }
    }

    // Compute the actual note number, based on octave and note
    if (!noteContext.isNumericNote) {
      int intNoteNumber =
          ((noteContext.octaveNumber) * 12) + noteContext.noteNumber + noteContext.internalInterval;
      if (intNoteNumber > 127) {
        throw new ParserException(
            StaccatoMessages.CALCULATED_NOTE_OUT_OF_RANGE, Integer.toString(intNoteNumber));
      }
      noteContext.noteNumber = (byte) intNoteNumber;
      logger.info("Computed note number: " + noteContext.noteNumber);
    }
  }