spiffyscore

Changes On Branch 8293931a343a1bb0
Login

Changes On Branch 8293931a343a1bb0

Changes In Branch develop Through [8293931a34] Excluding Merge-Ins

This is equivalent to a diff from 689adc054e to 8293931a34

2011-11-07
01:39
Altered the sample-based instruments to ine Csound string formatting instead of a billion if clauses to choose what file to play check-in: 4f872339ff user: brian tags: develop
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
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 [a0811d420c].
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
sr=44100
ksmps=20
nchnls=1

instr 3
    if p5=1.05 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

instr 5
    if p5=3.07 then
        asig diskin2 "samples/violin/3.07.wav", 1
    elseif p5=3.08 then
        asig diskin2 "samples/violin/3.08.wav", 1
    elseif p5=3.08 then
        asig diskin2 "samples/violin/3.09.wav", 1
    elseif p5=3.10 then
        asig diskin2 "samples/violin/3.10.wav", 1
    elseif p5=3.11 then
        asig diskin2 "samples/violin/3.11.wav", 1
    elseif p5=4.00 then
        asig diskin2 "samples/violin/4.00.wav", 1
    elseif p5=4.01 then
        asig diskin2 "samples/violin/4.01.wav", 1
    elseif p5=4.02 then
        asig diskin2 "samples/violin/4.02.wav", 1
    elseif p5=4.03 then
        asig diskin2 "samples/violin/4.03.wav", 1
    elseif p5=4.04 then
        asig diskin2 "samples/violin/4.04.wav", 1
    elseif p5=4.05 then
        asig diskin2 "samples/violin/4.05.wav", 1
    elseif p5=4.06 then
        asig diskin2 "samples/violin/4.06.wav", 1
    elseif p5=4.07 then
        asig diskin2 "samples/violin/4.07.wav", 1
    elseif p5=4.08 then
        asig diskin2 "samples/violin/4.08.wav", 1
    elseif p5=4.09 then
        asig diskin2 "samples/violin/4.09.wav", 1
    elseif p5=4.10 then
        asig diskin2 "samples/violin/4.10.wav", 1
    elseif p5=4.11 then
        asig diskin2 "samples/violin/4.11.wav", 1
    elseif p5=5.00 then
        asig diskin2 "samples/violin/5.00.wav", 1
    elseif p5=5.01 then
        asig diskin2 "samples/violin/5.01.wav", 1
    elseif p5=5.02 then
        asig diskin2 "samples/violin/5.02.wav", 1
    elseif p5=5.03 then
        asig diskin2 "samples/violin/5.03.wav", 1
    elseif p5=5.04 then
        asig diskin2 "samples/violin/5.04.wav", 1
    elseif p5=5.05 then
        asig diskin2 "samples/violin/5.05.wav", 1
    elseif p5=5.06 then
        asig diskin2 "samples/violin/5.06.wav", 1
    elseif p5=5.07 then
        asig diskin2 "samples/violin/5.07.wav", 1
    elseif p5=5.08 then
        asig diskin2 "samples/violin/5.08.wav", 1
    elseif p5=5.09 then
        asig diskin2 "samples/violin/5.09.wav", 1
    elseif p5=5.10 then
        asig diskin2 "samples/violin/5.10.wav", 1
    elseif p5=5.11 then
        asig diskin2 "samples/violin/5.11.wav", 1
    endif
    outs asig
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 samples/violin/3.07.wav version [91dadc3e2c].
Added samples/violin/3.08.wav version [be7c18dc74].
Added samples/violin/3.09.wav version [a329787b04].
Added samples/violin/3.10.wav version [9ec0cf45e5].
Added samples/violin/3.11.wav version [febad8547c].
Added samples/violin/4.00.wav version [99a0049e7f].
Added samples/violin/4.01.wav version [c6f6725f8f].
Added samples/violin/4.02.wav version [8facf1aa8c].
Added samples/violin/4.03.wav version [4a79f04135].
Added samples/violin/4.04.wav version [3784e3b4fd].
Added samples/violin/4.05.wav version [426e685d09].
Added samples/violin/4.06.wav version [4508912bc2].
Added samples/violin/4.07.wav version [a1545e9d26].
Added samples/violin/4.08.wav version [a9461ed31b].
Added samples/violin/4.09.wav version [82320d5d1a].
Added samples/violin/4.10.wav version [13c837dfa4].
Added samples/violin/4.11.wav version [cf5017f10d].
Added samples/violin/5.00.wav version [77cf68a157].
Added samples/violin/5.01.wav version [e062aa503b].
Added samples/violin/5.02.wav version [a2c349d8e6].
Added samples/violin/5.03.wav version [00a8ef8b10].
Added samples/violin/5.04.wav version [77dc78528a].
Added samples/violin/5.05.wav version [f392909f77].
Added samples/violin/5.06.wav version [bc6dc8f0c4].
Added samples/violin/5.07.wav version [9a3c68e5f3].
Added samples/violin/5.08.wav version [61c81ce45f].
Added samples/violin/5.09.wav version [9014c1e21a].
Added samples/violin/5.10.wav version [f1fa1241d2].
Added samples/violin/5.11.wav version [d4ed637350].
Added score.yaml version [29fd4ba47c].
Added spiffyscore.py version [c67f427fd6].
Deleted test.sco version [c92bf3908c].
Deleted todo.org version [510751b73f].
Added tree.py version [29c78902c8].