Index: parse.py ================================================================== --- parse.py +++ parse.py @@ -6,11 +6,10 @@ class Note(): def __init__(self, value, duration=1, octave=8): self.value = value self.duration = duration self.octave = octave - self.accidental = None def __repr__(self): return "Note %s %s %s" % (self.value, self.duration, self.octave) class Chord(): def __init__(self, value, duration=1, chord_type="major", octave=5): @@ -44,11 +43,11 @@ t_ignore = " |" t_BASENOTE = r"[A-Ga-g]" # t_BASENOTE = r"I+V?|VI*|i+v?|vi*" - t_ACCIDENTAL = r"\^{1,2}|_{1,2}|=" + t_ACCIDENTAL = r"\^{1}|_{1}|=" t_REST = r"z" t_OCTAVE = r"'+|,+" t_CHORD_TYPE = r"m|7|m7|0|o|\+|mb5|sus|sus4|maj7|mmaj7|7sus4|dim|dim7|7b5|m7b5|6|b6|m6|mb6|46|maj9|9|add9|7b9|m9" t_PAREN = "\(|\)" t_SYNCOPATE = "\+|-" @@ -122,11 +121,14 @@ def p_accidental(p): '''note : ACCIDENTAL note ''' - p[2].accidental = p[1] + if p[1] == "^": + p[2].value += "#" + else: + p[2].value += "b" p[0] = p[2] def p_octave(p): '''note : note OCTAVE ''' @@ -153,11 +155,13 @@ ''' p[0] = tree.Tree(p[1].strip("(").strip(")")) def p_error(p): +# import ipdb +# ipdb.set_trace() print p raise Exception("Syntax error at '%s' of element type %s" % (p.value, p.type)) yacc.yacc() return yacc.parse(score) Index: spiffyscore.py ================================================================== --- spiffyscore.py +++ spiffyscore.py @@ -119,13 +119,14 @@ "score_line": "i3 %(time)f %(duration)f 7000 %(octave)d.%(note)s", # "sync": "lead_instr", "octave": 2, "duration": 30, "grammars": { # Notes for this instrument to use in this piece - "u": ["E F G E (v)"], - "v": ["G A A A (e)", "G A A A (v)"], - "e": ["B A G A (v)"], + "u": ["A ^A B C ^C D ^D E F ^F G ^G"], +# "u": ["E F G E (v)"], +# "v": ["G A A A (e)", "G A A A (v)"], +# "e": ["B A G A (v)"], }, }, }, }, } @@ -255,27 +256,28 @@ def generate_csound_score(score, score_line, t): csound_note_values = { "C": "00", - "C#": "01", + "C#": "01", "Db": "01", "D": "02", - "D#": "03", + "D#": "03", "Eb": "03", "E": "04", "F": "05", - "F#": "06", + "F#": "06", "Gb": "06", "G": "07", - "G#": "08", + "G#": "08", "Ab": "08", "A": "09", - "A#": "10", + "A#": "10", "Bb": "10", "B": "11", } csound_score = [] for token in score: if isinstance(token, parse.Chord): # Chords for note in token.chord: note = csound_note_values[note] + csound_score.append(score_line % {"time": t, "octave": token.octave, "note": note, "duration": token.duration}) csound_score.append(score_line % {"time": t, "octave": token.octave, "note": note, "duration": token.duration}) elif isinstance(token, parse.Note): # Individual notes note = csound_note_values[token.value] csound_score.append(score_line % {"time": t, "octave": token.octave, "note": note, "duration": token.duration}) elif isinstance(token, tree.Tree):