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