@@ -24,11 +24,11 @@ self.duration = duration def __repr__(self): return "Rest node %s" % self.duration -def parse(score): +def parse(score, default_octave=8): # Tokenize (lex) tokens = ( "NOTE_LENGTH", "BASENOTE", "ACCIDENTAL", @@ -124,23 +124,22 @@ '''pitch : ACCIDENTAL pitch ''' p[2].accidental = p[1] p[0] = p[2] - def p_octave(p): + def p_pitch_octave(p): '''pitch : pitch OCTAVE ''' count = len(p[2]) - increment_or_decrement = 1 if p[2][0] == "," else -1 - octave = 8 + (count * increment_or_decrement) - p[1].octave = octave + increment_or_decrement = 1 if p[2].startswith("'") else -1 + p[1].octave += (count * increment_or_decrement) p[0] = p[1] def p_pitch(p): '''pitch : BASENOTE ''' - p[0] = Note(p[1]) + p[0] = Note(p[1], octave=default_octave) def p_rest(p): ''' rest : REST | REST NOTE_LENGTH '''