Skip to content

Commit ebd4bc7

Browse files
committed
new song format
1 parent a7c81bc commit ebd4bc7

File tree

4 files changed

+162
-3
lines changed

4 files changed

+162
-3
lines changed

asciidrumming/assemble.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
def assemble_pieces(phrases, pieces):
2+
env = {k: v['pattern'] for k, v in phrases.items()}
3+
assembled = {}
4+
for name, term in pieces.items():
5+
for word in term.split():
6+
if word in env:
7+
beat = phrases[word]['beat']
8+
break
9+
else:
10+
raise RuntimeError('invalid piece: {}'.format(term))
11+
assembled[name] = dict(beat=beat, pattern=eval(term, env))
12+
return assembled
13+
14+
def clean_phrases(phrases):
15+
for phrase in phrases.values():
16+
phrase['pattern'] = phrase['pattern'].replace(' ', '')
17+
18+
def assemble_phrases(config):
19+
pieces = config.pop('pieces')
20+
phrases = config['phrases']
21+
pieces = assemble_pieces(phrases, pieces)
22+
phrases.update(pieces)
23+
clean_phrases(phrases)
24+
25+
126
def assemble_verses(composition):
227
effective = {
328
'bpm': 80,

asciidrumming/drumming.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#from sample import make_simple_instrument
88
#from sample import make_advanced_instrument
99

10+
from .assemble import assemble_phrases
1011
from .assemble import assemble_verses
1112
from .assemble import render_verses
1213

@@ -22,12 +23,15 @@
2223
@click.option('--silent', type=bool, default=False, help='do not play the song immediatley')
2324
@click.argument('composition')
2425
def main(bpm, composition, voices, silent, output=None):
25-
config = parse_composition(composition)
26+
import yaml
27+
config = yaml.load(open(composition))
28+
#config = parse_composition(composition)
2629
if bpm > 0:
2730
config['initial']['bpm'] = bpm
28-
pprint.pprint(config)
31+
config.update(load_voices(voices))
2932

30-
pprint.pprint(load_voices(voices))
33+
assemble_phrases(config)
34+
pprint.pprint(config)
3135

3236
song = assemble_verses(config)
3337
pprint.pprint(song)

examples/simple_beats.song

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
[initial] # default, but a good test case
2+
3+
bpm: 60
4+
5+
#shuffle: false
6+
7+
[phrases]
8+
9+
4_dondoko: beat=4
10+
D.dkD.dk
11+
D.dkD.dk
12+
13+
dondoko: beat=4
14+
D.dk
15+
16+
dokonko: beat=4
17+
Dk.k
18+
19+
4_dokonko: beat=4
20+
Dk.kDk.k
21+
Dk.kDk.k
22+
23+
shuffle: beat=4 shuffle=0.1
24+
d.k.
25+
d.k.
26+
d.k.
27+
d.k.
28+
29+
4_trioles: beat=3
30+
dkd kdk
31+
dkd kdk
32+
33+
damdamdam: beat=4
34+
D.K.
35+
D..k
36+
dkdk
37+
D.r.
38+
39+
[verses]
40+
41+
taiko: 4_dondoko
42+
--
43+
taiko: 4_dondoko
44+
--
45+
shime: 4_dondoko
46+
taiko: 4_dondoko
47+
--
48+
shime: 4_dokonko
49+
--
50+
shime: 4_trioles
51+
--
52+
shime: 4_dondoko
53+
--
54+
taiko: 4_dokonko
55+
shime: 4_dondoko
56+
--
57+
bpm: +20
58+
taiko: 4_dondoko
59+
shime: 4_dokonko
60+
--
61+
shime: 4_dondoko
62+
taiko: 4_dondoko

examples/simple_beats.yaml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
initial:
2+
bpm: 60
3+
#shuffle: false
4+
5+
phrases:
6+
7+
pause:
8+
beat: 1
9+
pattern: .
10+
11+
don:
12+
beat: 4
13+
pattern: D...
14+
15+
donkon:
16+
beat: 4
17+
pattern: D.K.
18+
19+
dokodoko:
20+
beat: 4
21+
pattern: dkdk
22+
23+
dondoko:
24+
beat: 4
25+
pattern: D.dk
26+
27+
dokonko:
28+
beat: 4
29+
pattern: Dk.k
30+
31+
_2_trioles:
32+
beat: 3
33+
pattern: dkd kdk
34+
35+
damdamdam:
36+
beat: 4
37+
pattern: D.K. D..k dkdk D.r.
38+
39+
pieces:
40+
41+
_4_dondoko: dondoko * 4
42+
_4_dokonko: dokonko * 4
43+
fuchi: dondoko * 3 + dokonko
44+
_4_trioles: _2_trioles * 2
45+
46+
verses:
47+
- taiko: _4_dondoko
48+
49+
- taiko: _4_dondoko
50+
51+
- shime: _4_dondoko
52+
taiko: _4_dondoko
53+
54+
- shime: fuchi
55+
56+
- shime: _4_trioles
57+
58+
- shime: _4_dondoko
59+
60+
- taiko: _4_dokonko
61+
shime: _4_dondoko
62+
63+
- bpm: +20
64+
taiko: _4_dondoko
65+
shime: _4_dokonko
66+
67+
- shime: _4_dondoko
68+
taiko: _4_dondoko

0 commit comments

Comments
 (0)