/** 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); } }