spiffyscore

Changes On Branch 0021a3fe22fb57c5
Login

Changes On Branch 0021a3fe22fb57c5

Changes In Branch develop Through [0021a3fe22] Excluding Merge-Ins

This is equivalent to a diff from 689adc054e to 0021a3fe22

2011-11-03
19:23
Added a very, very bad set of violin samples check-in: 8293931a34 user: brian tags: develop
18:50
Merged in diskin2 mode for cfg.orc check-in: 0021a3fe22 user: brian tags: develop
18:49
By magic, fixed problem with not all bass notes playing via diskin2 Closed-Leaf check-in: 1bc01ba9c9 user: brian tags: feature/diskin2
2011-11-01
18:54
Imported the todo list from MUS306 check-in: 072fa6ad30 user: brian tags: develop
2011-06-12
20:32
Made some changes to the parser. Don't remember what. Leaf check-in: 87435601e4 user: brian tags: master
20:31
Create new branch named "develop" check-in: 9f4c4666c5 user: brian tags: develop
2011-02-10
23:50
Program generates a render order for the instruments based on their sync order check-in: 689adc054e user: brian@linux-85dd.site tags: master
22:34
Added lexical support for parens instead of quotes for chords, cleaned up the yacc parser, added lex tokens for syncopation check-in: 702d933446 user: brian@linux-85dd.site tags: master

Modified cfg.orc from [9f49be1cae] to [c58361434c].
1
2
3



































































4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sr=44100
ksmps=20
nchnls=1




































































instr 1
    asound pluck   p4, cpspch(p5), cpspch(p6), p7, p8 p9 p10
    out asound
endin

instr 2
    kenv linen p4, .1, p3, .2; envelope
    asound oscili kenv, cpspch(p5), p6; oscillator
    out asound
endin

instr 3
    asound foscili p4, cpspch(p5), 5, 2, 3, p9
    out asound
endin



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>












|
|
<

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

85
sr=44100
ksmps=20
nchnls=1

instr 3
    if p5=105 then
        asig diskin2 "samples/bass/1.05.wav", 1
    elseif p5=1.06 then
        asig diskin2 "samples/bass/1.06.wav", 1
    elseif p5=1.07 then
        asig diskin2 "samples/bass/1.07.wav", 1
    elseif p5=1.08 then
        asig diskin2 "samples/bass/1.08.wav", 1
    elseif p5=1.08 then
        asig diskin2 "samples/bass/1.09.wav", 1
    elseif p5=1.10 then
        asig diskin2 "samples/bass/1.10.wav", 1
    elseif p5=1.11 then
        asig diskin2 "samples/bass/1.11.wav", 1
    elseif p5=2.00 then
        asig diskin2 "samples/bass/2.00.wav", 1
    elseif p5=2.01 then
        asig diskin2 "samples/bass/2.01.wav", 1
    elseif p5=2.02 then
        asig diskin2 "samples/bass/2.02.wav", 1
    elseif p5=2.03 then
        asig diskin2 "samples/bass/2.03.wav", 1
    elseif p5=2.04 then
        asig diskin2 "samples/bass/2.04.wav", 1
    elseif p5=2.05 then
        asig diskin2 "samples/bass/2.05.wav", 1
    elseif p5=2.06 then
        asig diskin2 "samples/bass/2.06.wav", 1
    elseif p5=2.07 then
        asig diskin2 "samples/bass/2.07.wav", 1
    elseif p5=2.08 then
        asig diskin2 "samples/bass/2.08.wav", 1
    elseif p5=2.09 then
        asig diskin2 "samples/bass/2.09.wav", 1
    elseif p5=2.10 then
        asig diskin2 "samples/bass/2.10.wav", 1
    elseif p5=2.11 then
        asig diskin2 "samples/bass/2.11.wav", 1
    elseif p5=3.00 then
        asig diskin2 "samples/bass/3.00.wav", 1
    elseif p5=3.01 then
        asig diskin2 "samples/bass/3.01.wav", 1
    elseif p5=3.02 then
        asig diskin2 "samples/bass/3.02.wav", 1
    elseif p5=3.03 then
        asig diskin2 "samples/bass/3.03.wav", 1
    elseif p5=3.04 then
        asig diskin2 "samples/bass/3.04.wav", 1
    elseif p5=3.05 then
        asig diskin2 "samples/bass/3.05.wav", 1
    elseif p5=3.06 then
        asig diskin2 "samples/bass/3.06.wav", 1
    elseif p5=3.07 then
        asig diskin2 "samples/bass/3.07.wav", 1
    elseif p5=3.08 then
        asig diskin2 "samples/bass/3.08.wav", 1
    elseif p5=3.09 then
        asig diskin2 "samples/bass/3.09.wav", 1
    elseif p5=3.10 then
        asig diskin2 "samples/bass/3.10.wav", 1
    elseif p5=3.11 then
        asig diskin2 "samples/bass/3.11.wav", 1
    endif
    outs asig
endin

instr 1
    asound pluck   p4, cpspch(p5), cpspch(p6), p7, p8 p9 p10
    out asound
endin

instr 2
    kenv linen p4, .1, p3, .2; envelope
    asound oscili kenv, cpspch(p5), p6; oscillator
    out asound
endin

instr 4
    aFMinst foscili p4, cpspch(p5), p6, p7, p8, p9

endin
Deleted cfg.py version [e9b556b4f3].
Modified parse.py from [3ec57c3fbe] to [a8d0994825].
1


2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

40
41
42
43
44
45
46
47
48
49
50
51

52
53
54
55
56
57
58
#!/usr/bin/env python



from ply import lex, yacc
class Note():
    def __init__(self, value, duration=.25, 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=.5, chord_type="major", octave=5):
        self.value = value
        self.duration = duration
        self.chord_type = chord_type
        self.octave = octave
    def __repr__(self):
        return "Chord %s %s %s" % (self.value, self.duration, self.chord_type, self.octave)

class Rest():
    def __init__(self, duration=.25):
        self.duration = duration
    def __repr__(self):
        return "Rest node %s" % self.duration


def parse(score, default_octave=8):
    # Tokenize (lex)
    tokens = (
        "NOTE_LENGTH",
        "BASENOTE",
        "ACCIDENTAL",
        "REST",
        "OCTAVE",
        "CHORD_TYPE",
        "PAREN",
        "SYNCOPATE",

    )

    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_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 = "\+|-"


    def t_NOTE_LENGTH(t):
        r"/?\d+"
        multiplier = float(t.value.strip("/"))
        if t.value.startswith("/"):
            multiplier = 1/multiplier
        t.value = multiplier

>
>



|



<




|








|
















>




|
|
|





>







1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python

import tree

from ply import lex, yacc
class Note():
    def __init__(self, value, duration=1, octave=8):
        self.value = value
        self.duration = duration
        self.octave = octave

    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):
        self.value = value
        self.duration = duration
        self.chord_type = chord_type
        self.octave = octave
    def __repr__(self):
        return "Chord %s %s %s" % (self.value, self.duration, self.chord_type, self.octave)

class Rest():
    def __init__(self, duration=1):
        self.duration = duration
    def __repr__(self):
        return "Rest node %s" % self.duration


def parse(score, default_octave=8):
    # Tokenize (lex)
    tokens = (
        "NOTE_LENGTH",
        "BASENOTE",
        "ACCIDENTAL",
        "REST",
        "OCTAVE",
        "CHORD_TYPE",
        "PAREN",
        "SYNCOPATE",
        "NODE",
    )

    t_ignore = " |"

    t_BASENOTE = r"[A-Ga-g]"
#    t_BASENOTE = r"I+V?|VI*|i+v?|vi*"
    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 = "\+|-"
    t_NODE = r"\([a-zA-Z0-9_-]+\)"

    def t_NOTE_LENGTH(t):
        r"/?\d+"
        multiplier = float(t.value.strip("/"))
        if t.value.startswith("/"):
            multiplier = 1/multiplier
        t.value = multiplier
67
68
69
70
71
72
73

74
75
76
77
78
79
80

81
82
83
84
85
86
87

    # Parse (yacc)

    def p_note_list(p):
        '''score : score note
                 | score chord
                 | score rest

        '''
        p[0] = p[1] + [p[2]]

    def p_score(p):
        '''score : note
                 | chord
                 | rest

        '''
        p[0] = [p[1]]


    def p_chord_length(p):
        ''' chord : chord NOTE_LENGTH
        '''







>







>







70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

    # Parse (yacc)

    def p_note_list(p):
        '''score : score note
                 | score chord
                 | score rest
            | score node
        '''
        p[0] = p[1] + [p[2]]

    def p_score(p):
        '''score : note
                 | chord
                 | rest
            | node
        '''
        p[0] = [p[1]]


    def p_chord_length(p):
        ''' chord : chord NOTE_LENGTH
        '''
114
115
116
117
118
119
120
121



122
123
124
125
126
127
128
        '''
        note.syncopate = p[2]


    def p_accidental(p):
        '''note : ACCIDENTAL note
        '''
        p[2].accidental = p[1]



        p[0] = p[2]

    def p_octave(p):
        '''note : note OCTAVE
        '''
        count = len(p[2])
        increment_or_decrement = 1 if p[2].startswith("'") else -1







|
>
>
>







119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
        '''
        note.syncopate = p[2]


    def p_accidental(p):
        '''note : ACCIDENTAL note
        '''
        if p[1] == "^":
            p[2].value += "#"
        else:
            p[2].value += "b"
        p[0] = p[2]

    def p_octave(p):
        '''note : note OCTAVE
        '''
        count = len(p[2])
        increment_or_decrement = 1 if p[2].startswith("'") else -1
137
138
139
140
141
142
143
144






145



146
147
148
149
150
    def p_rest(p):
        ''' rest : REST
                 | REST NOTE_LENGTH
        '''
        p[0] = Rest()
        if len(p) > 2:
            p[0].duration = p[2]







    def p_error(p):



        raise Exception("Syntax error at '%s' of element type %s" % (p.value, p.type))
        
    yacc.yacc()

    return yacc.parse(score)








>
>
>
>
>
>

>
>
>





145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
    def p_rest(p):
        ''' rest : REST
                 | REST NOTE_LENGTH
        '''
        p[0] = Rest()
        if len(p) > 2:
            p[0].duration = p[2]

    def p_node(p):
        '''node : NODE
        '''
        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)
Added samples/bass/1.05.wav version [e6f01c2d0c].
Added samples/bass/1.06.wav version [589b4c9c16].
Added samples/bass/1.07.wav version [b5bd0e0b28].
Added samples/bass/1.08.wav version [4e22c8e289].
Added samples/bass/1.09.wav version [8eafba8350].
Added samples/bass/1.10.wav version [6c9d557273].
Added samples/bass/1.11.wav version [d210644e57].
Added samples/bass/2.00.wav version [df0ad67bd3].
Added samples/bass/2.01.wav version [5e4bdb6301].
Added samples/bass/2.02.wav version [2787d975d6].
Added samples/bass/2.03.wav version [6ce7982e46].
Added samples/bass/2.04.wav version [3c3feb5b24].
Added samples/bass/2.05.wav version [569b7181fc].
Added samples/bass/2.06.wav version [297d4f860f].
Added samples/bass/2.07.wav version [1ac14e3cd2].
Added samples/bass/2.08.wav version [b92037909c].
Added samples/bass/2.09.wav version [760599b161].
Added samples/bass/2.10.wav version [3b900ab89f].
Added samples/bass/2.11.wav version [bcaf91186d].
Added samples/bass/3.00.wav version [5d028b32a1].
Added samples/bass/3.01.wav version [9d6dded4d3].
Added samples/bass/3.02.wav version [78dab72fb7].
Added samples/bass/3.03.wav version [9476ff14fb].
Added samples/bass/3.04.wav version [0822a77edf].
Added samples/bass/3.05.wav version [dc233966b5].
Added samples/bass/3.06.wav version [c254ae3482].
Added samples/bass/3.07-old1.wav version [7e77a9e339].
Added samples/bass/3.07.wav version [23ec2fdb73].
Added samples/bass/3.08.wav version [c799d64faf].
Added samples/bass/3.09.wav version [cedce4e5ea].
Added samples/bass/3.10.wav version [bbc1ef4a09].
Added samples/bass/3.11.wav version [f679f5a61b].
Added samples/bass/Bass.arco.mf.sulE.C2B2.aiff version [b705aee00e].
Added samples/bass/Bass.arco.mf.sulE.C3D3.aiff version [17eacace3a].
Added samples/bass/Bass.arco.mf.sulG.C3B3.aiff version [8b429011eb].
Added samples/bass/Bass.arco.mf.sulG.G2B2.aiff version [8c3a1d88c6].
Added samples/bass/test.orc version [2795c8cc70].
Added samples/bass/test.sco version [f5f91e8863].
Added samples/bass/test.wav version [550291acb7].
Added score.yaml version [29fd4ba47c].
Added spiffyscore.py version [d189f30210].
Deleted test.sco version [c92bf3908c].
Deleted todo.org version [510751b73f].
Added tree.py version [29c78902c8].