Add documentation and examples for the babel language `ob-lilypond'
[Worg.git] / org-contrib / babel / examples / lilypond-examples / arrange-mode / Modal-Cycle / modal-cycle.org
blob36461181fdae171d55bc57b1457812ce2d7e0b6c
1 * Modal Cycle
3 ** Processing
4 *** DONE Keys Data
5 #+tblname: keys-table
6    | c   | d   | e   | f   | g   | a   | b   |
7    | g   | a   | b   | c   | d   | e   | fis |
8    | d   | e   | fis | g   | a   | b   | cis |
9    | a   | b   | cis | d   | e   | fis | gis |
10    | e   | fis | gis | a   | b   | cis | dis |
11    | b   | cis | dis | e   | fis | gis | ais |
12    | ges | aes | bes | ces | des | ees | f   |
13    | des | ees | f   | ges | aes | bes | c   |
14    | aes | bes | c   | des | ees | f   | g   |
15    | ees | f   | g   | aes | bes | c   | d   |
16    | bes | c   | d   | ees | f   | g   | a   |
17    | f   | g   | a   | bes | c   | d   | e   |
19 *** DONE Generate Triad
21 #+name: gen-triad(key="c",root="c") 
22 #+begin_src ruby :var keys=keys-table :var key_of=keys-table[*,0] :results silent
23 @key_id =  key_of.index(key)
24 @key    = keys[ @key_id ]
25 @root_id = @key.index(root)
27 def triad(key,root,value,interval)
28   "  < \
29 #{@key.fetch(( value -1) % 7)} \
30 #{@key.fetch(( value +1) % 7)} \
31 #{@key.fetch(( value +3) % 7)} > \
32 #{interval} "
33 end
35 "\\relative a' {" + "\n" +
36   triad(key, root, 4, 4) + 
37   triad(key, root, 4, 4) + 
38   triad(key, root, 4, 4) + 
39   triad(key, root, 4, 4) + "|\n" + 
40                    
41   triad(key, root, 5, 4) + 
42   triad(key, root, 5, 4) + 
43   triad(key, root, 5, 4) + 
44   triad(key, root, 5, 4) + "|\n" +
45                    
46   triad(key, root, 4, 4) + 
47   triad(key, root, 4, 4) + 
48   triad(key, root, 4, 4) + 
49   triad(key, root, 4, 4) + "|\n" +
50                    
51   triad(key, root, 5, 4) + 
52   triad(key, root, 5, 4) + 
53   triad(key, root, 5, 4) + 
54   triad(key, root, 5, 4) + "|\n" +
55 "}"
57 #+end_src
59 *** DONE Generate arpeggio
61 #+name: gen_arpeggio(key="c", root="c")
62 #+begin_src ruby :var keys=keys-table :var key_of=keys-table[*,0] :results silent
63 key_id =  key_of.index(key)
64 @key   = keys[ key_id ]
65 @root_id = @key.index(root)
67 def arpeggio (key, root, ascending)
68   if ascending == 1
69     x,y = 0, 1   
70   else 
71     x,y  = 7, -1
72   end
73   notes = ""
74   8.times do  
75     notes += @key.fetch((@root_id + x) % 7) + "16 "
76     x = x + y
77   end  
78   notes + "r2"
79 end
81 "\\relative c {" + arpeggio(key , root, 1 ) + " } | r1 | \ 
82 \\relative c'' {" + arpeggio(key , root , 0) + " } | r1 | \n"
84 #+end_src
86 *** DONE Generate Bass Line
88 #+name: generate_bassline(key="c",root="c")
89 #+begin_src ruby :var keys=keys-table :var key_of=keys-table[*,0] :results silent 
90 key_id  = key_of.index(key)
91 key     = keys[ key_id ]
92 root_id = key.index(root)
93 #third  = key.fetch( root_id + 2)
94 #seventh = key.fetch(root_id + 6)
95 one_bar =
96   "  #{root}8 #{root}, #{root}' #{root} " + 
97   "#{root} #{root} #{root} #{root}'16 #{root},16 " 
99 "\\relative g, { " + "\n" + one_bar + "|\n" + one_bar + 
100 "|\n" + one_bar + "|\n" + one_bar + "|\n} " 
102 #+end_src
103     
104 ** Version
106 #+begin_src lilypond
108 \version "2.12.3"
110 #+end_src
112 ** Arpeggios
114 #+begin_src lilypond
116 Arps = {
117   <<gen_arpeggio(key="c",root="c")>>
118   <<gen_arpeggio(key="f",root="c")>>
119   <<gen_arpeggio(key="bes",root="c")>>
120   <<gen_arpeggio(key="ees",root="c")>>
121   <<gen_arpeggio(key="aes",root="c")>>
122   <<gen_arpeggio(key="des",root="c")>>
123   <<gen_arpeggio(key="ges",root="ces")>>
124   <<gen_arpeggio(key="b",root="b")>>
125   <<gen_arpeggio(key="e",root="b")>>
126   <<gen_arpeggio(key="a",root="b")>>
127   <<gen_arpeggio(key="d",root="b")>>
128   <<gen_arpeggio(key="g",root="b")>>
129   <<gen_arpeggio(key="c",root="b")>>
130   <<gen_arpeggio(key="f",root="bes")>>
131   <<gen_arpeggio(key="bes",root="bes")>>
132   <<gen_arpeggio(key="ees",root="bes")>>
133   <<gen_arpeggio(key="aes",root="bes")>>
134   <<gen_arpeggio(key="des",root="bes")>>
135   <<gen_arpeggio(key="ges",root="bes")>>
136   <<gen_arpeggio(key="b",root="ais")>>
137   <<gen_arpeggio(key="e",root="a")>>
138   <<gen_arpeggio(key="a",root="a")>>
139   <<gen_arpeggio(key="d",root="a")>>
140   <<gen_arpeggio(key="g",root="a")>>
141   <<gen_arpeggio(key="c",root="a")>>
142   <<gen_arpeggio(key="f",root="a")>>
143   <<gen_arpeggio(key="bes",root="a")>>
144   <<gen_arpeggio(key="ees",root="aes")>>
145   <<gen_arpeggio(key="aes",root="aes")>>
146   <<gen_arpeggio(key="des",root="aes")>>
147   <<gen_arpeggio(key="ges",root="aes")>>
148   <<gen_arpeggio(key="b",root="gis")>>
149   <<gen_arpeggio(key="e",root="gis")>>
150   <<gen_arpeggio(key="a",root="gis")>>
151   <<gen_arpeggio(key="d",root="g")>>
152   <<gen_arpeggio(key="g",root="g")>>
153   <<gen_arpeggio(key="c",root="g")>>
154   <<gen_arpeggio(key="f",root="g")>>
155   <<gen_arpeggio(key="bes",root="g")>>
156   <<gen_arpeggio(key="ees",root="g")>>
157   <<gen_arpeggio(key="aes",root="g")>>
158   <<gen_arpeggio(key="des",root="ges")>>
159   <<gen_arpeggio(key="ges",root="ges")>>
160   <<gen_arpeggio(key="b",root="fis")>>
161   <<gen_arpeggio(key="e",root="fis")>>
162   <<gen_arpeggio(key="a",root="fis")>>
163   <<gen_arpeggio(key="d",root="fis")>>
164   <<gen_arpeggio(key="g",root="fis")>>
165   <<gen_arpeggio(key="c",root="f")>>
166   <<gen_arpeggio(key="f",root="f")>>
167   <<gen_arpeggio(key="bes",root="f")>>
168   <<gen_arpeggio(key="ees",root="f")>>
169   <<gen_arpeggio(key="aes",root="f")>>
170   <<gen_arpeggio(key="des",root="f")>>
171   <<gen_arpeggio(key="ges",root="f")>>
172   <<gen_arpeggio(key="b",root="e")>>
173   <<gen_arpeggio(key="e",root="e")>>
174   <<gen_arpeggio(key="a",root="e")>>
175   <<gen_arpeggio(key="d",root="e")>>
176   <<gen_arpeggio(key="g",root="e")>>
177   <<gen_arpeggio(key="c",root="e")>>
178   <<gen_arpeggio(key="f",root="e")>>
179   <<gen_arpeggio(key="bes",root="ees")>>
180   <<gen_arpeggio(key="ees",root="ees")>>
181   <<gen_arpeggio(key="aes",root="ees")>>
182   <<gen_arpeggio(key="des",root="ees")>>
183   <<gen_arpeggio(key="ges",root="ees")>>
184   <<gen_arpeggio(key="b",root="dis")>>
185   <<gen_arpeggio(key="e",root="dis")>>
186   <<gen_arpeggio(key="a",root="d")>>
187   <<gen_arpeggio(key="d",root="d")>>
188   <<gen_arpeggio(key="g",root="d")>>
189   <<gen_arpeggio(key="c",root="d")>>
190   <<gen_arpeggio(key="f",root="d")>>
191   <<gen_arpeggio(key="bes",root="d")>>
192   <<gen_arpeggio(key="ees",root="d")>>
193   <<gen_arpeggio(key="aes",root="des")>>
194   <<gen_arpeggio(key="des",root="des")>>
195   <<gen_arpeggio(key="ges",root="des")>>
196   <<gen_arpeggio(key="b",root="cis")>>
197   <<gen_arpeggio(key="e",root="cis")>>
198   <<gen_arpeggio(key="a",root="cis")>>
199   <<gen_arpeggio(key="d",root="cis")>>
200   <<gen_arpeggio(key="g",root="c")>>
201   <<gen_arpeggio(key="c",root="c")>>
203   < c, g, c' e g b > 1
205 #+end_src
207 ** Triads
209 #+begin_src lilypond
211 Triads = {
212   <<gen-triad(key="c",root="c")>>
213   <<gen-triad(key="f",root="c")>>
214   <<gen-triad(key="bes",root="c")>>
215   <<gen-triad(key="ees",root="c")>>
216   <<gen-triad(key="aes",root="c")>>
217   <<gen-triad(key="des",root="c")>>
218   <<gen-triad(key="ges",root="ces")>>
219   <<gen-triad(key="b",root="b")>>
220   <<gen-triad(key="e",root="b")>>
221   <<gen-triad(key="a",root="b")>>
222   <<gen-triad(key="d",root="b")>>
223   <<gen-triad(key="g",root="b")>>
224   <<gen-triad(key="c",root="b")>>
225   <<gen-triad(key="f",root="bes")>>
226   <<gen-triad(key="bes",root="bes")>>
227   <<gen-triad(key="ees",root="bes")>>
228   <<gen-triad(key="aes",root="bes")>>
229   <<gen-triad(key="des",root="bes")>>
230   <<gen-triad(key="ges",root="bes")>>
231   <<gen-triad(key="b",root="ais")>>
232   <<gen-triad(key="e",root="a")>>
233   <<gen-triad(key="a",root="a")>>
234   <<gen-triad(key="d",root="a")>>
235   <<gen-triad(key="g",root="a")>>
236   <<gen-triad(key="c",root="a")>>
237   <<gen-triad(key="f",root="a")>>
238   <<gen-triad(key="bes",root="a")>>
239   <<gen-triad(key="ees",root="aes")>>
240   <<gen-triad(key="aes",root="aes")>>
241   <<gen-triad(key="des",root="aes")>>
242   <<gen-triad(key="ges",root="aes")>>
243   <<gen-triad(key="b",root="gis")>>
244   <<gen-triad(key="e",root="gis")>>
245   <<gen-triad(key="a",root="gis")>>
246   <<gen-triad(key="d",root="g")>>
247   <<gen-triad(key="g",root="g")>>
248   <<gen-triad(key="c",root="g")>>
249   <<gen-triad(key="f",root="g")>>
250   <<gen-triad(key="bes",root="g")>>
251   <<gen-triad(key="ees",root="g")>>
252   <<gen-triad(key="aes",root="g")>>
253   <<gen-triad(key="des",root="ges")>>
254   <<gen-triad(key="ges",root="ges")>>
255   <<gen-triad(key="b",root="fis")>>
256   <<gen-triad(key="e",root="fis")>>
257   <<gen-triad(key="a",root="fis")>>
258   <<gen-triad(key="d",root="fis")>>
259   <<gen-triad(key="g",root="fis")>>
260   <<gen-triad(key="c",root="f")>>
261   <<gen-triad(key="f",root="f")>>
262   <<gen-triad(key="bes",root="f")>>
263   <<gen-triad(key="ees",root="f")>>
264   <<gen-triad(key="aes",root="f")>>
265   <<gen-triad(key="des",root="f")>>
266   <<gen-triad(key="ges",root="f")>>
267   <<gen-triad(key="b",root="e")>>
268   <<gen-triad(key="e",root="e")>>
269   <<gen-triad(key="a",root="e")>>
270   <<gen-triad(key="d",root="e")>>
271   <<gen-triad(key="g",root="e")>>
272   <<gen-triad(key="c",root="e")>>
273   <<gen-triad(key="f",root="e")>>
274   <<gen-triad(key="bes",root="ees")>>
275   <<gen-triad(key="ees",root="ees")>>
276   <<gen-triad(key="aes",root="ees")>>
277   <<gen-triad(key="des",root="ees")>>
278   <<gen-triad(key="ges",root="ees")>>
279   <<gen-triad(key="b",root="dis")>>
280   <<gen-triad(key="e",root="dis")>>
281   <<gen-triad(key="a",root="d")>>
282   <<gen-triad(key="d",root="d")>>
283   <<gen-triad(key="g",root="d")>>
284   <<gen-triad(key="c",root="d")>>
285   <<gen-triad(key="f",root="d")>>
286   <<gen-triad(key="bes",root="d")>>
287   <<gen-triad(key="ees",root="d")>>
288   <<gen-triad(key="aes",root="des")>>
289   <<gen-triad(key="des",root="des")>>
290   <<gen-triad(key="ges",root="des")>>
291   <<gen-triad(key="b",root="cis")>>
292   <<gen-triad(key="e",root="cis")>>
293   <<gen-triad(key="a",root="cis")>>
294   <<gen-triad(key="d",root="cis")>>
295   <<gen-triad(key="g",root="c")>>
296   <<gen-triad(key="c",root="c")>>
299 #+end_src
301 ** Drums (four bars)
302 #+begin_src lilypond
303   
304   DrumsFourBars = {
305     \drummode {
306       bd16 hh16 hh16 hh16 sn16 hh16 hh16 hh16 
307       bd16 hh16 hh16 hh16 sn16 hh16 hh16 hh16 |
308       bd16 hh16 hh16 hh16 sn16 hh16 hh16 hh16 
309       bd16 hh16 hh16 hh16 sn16 hh16 hh16 bd16 |
310       bd16 hh16 hh16 hh16 sn16 hh16 hh16 hh16 
311       bd16 hh16 hh16 hh16 sn16 hh16 hh16 hh16 |
312       bd16 hh16 hh16 hh16 sn16 hh16 hh16 hh16 
313       bd16 hh16 hh16 hh16 sn16 hh16 sn16 bd16 |
314     }
315   }
317  DrumsSixteenBars = {
318    \DrumsFourBars \DrumsFourBars
319    \DrumsFourBars \DrumsFourBars
320 }  
321 #+end_src
323 #+begin_src lilypond
324  Drums = {
325  \DrumsSixteenBars \DrumsSixteenBars \DrumsSixteenBars
326  \DrumsSixteenBars \DrumsSixteenBars \DrumsSixteenBars
327  \DrumsSixteenBars \DrumsSixteenBars \DrumsSixteenBars
328  \DrumsSixteenBars \DrumsSixteenBars \DrumsSixteenBars
329  \DrumsSixteenBars \DrumsSixteenBars \DrumsSixteenBars
330  \DrumsSixteenBars \DrumsSixteenBars \DrumsSixteenBars
331  \DrumsSixteenBars \DrumsSixteenBars \DrumsSixteenBars
332  \DrumsFourBars
335 #+end_src
336   
337 ** Bass
338 #+begin_src lilypond
340 Bass = {
341       <<generate_bassline(key="c",root="c")>>
342       <<generate_bassline(key="f",root="c")>>
343       <<generate_bassline(key="bes",root="c")>>
344       <<generate_bassline(key="ees",root="c")>>
345       <<generate_bassline(key="aes",root="c")>>
346       <<generate_bassline(key="des",root="c")>>
347       <<generate_bassline(key="ges",root="b")>>
348       <<generate_bassline(key="b",root="b")>>
349       <<generate_bassline(key="e",root="b")>>
350       <<generate_bassline(key="a",root="b")>>
351       <<generate_bassline(key="d",root="b")>>
352       <<generate_bassline(key="g",root="b")>>
353       <<generate_bassline(key="c",root="b")>>
354       <<generate_bassline(key="f",root="bes")>>
355       <<generate_bassline(key="bes",root="bes")>>
356       <<generate_bassline(key="ees",root="bes")>>
357       <<generate_bassline(key="aes",root="bes")>>
358       <<generate_bassline(key="des",root="bes")>>
359       <<generate_bassline(key="ges",root="bes")>>
360       <<generate_bassline(key="b",root="bes")>>
361       <<generate_bassline(key="e",root="a")>>
362       <<generate_bassline(key="a",root="a")>>
363       <<generate_bassline(key="d",root="a")>>
364       <<generate_bassline(key="g",root="a")>>
365       <<generate_bassline(key="c",root="a")>>
366       <<generate_bassline(key="f",root="a")>>
367       <<generate_bassline(key="bes",root="a")>>
368       <<generate_bassline(key="ees",root="aes")>>
369       <<generate_bassline(key="aes",root="aes")>>
370       <<generate_bassline(key="des",root="aes")>>
371       <<generate_bassline(key="ges",root="aes")>>
372       <<generate_bassline(key="b",root="aes")>>
373       <<generate_bassline(key="e",root="aes")>>
374       <<generate_bassline(key="a",root="aes")>>
375       <<generate_bassline(key="d",root="g")>>
376       <<generate_bassline(key="g",root="g")>>
377       <<generate_bassline(key="c",root="g")>>
378       <<generate_bassline(key="f",root="g")>>
379       <<generate_bassline(key="bes",root="g")>>
380       <<generate_bassline(key="ees",root="g")>>
381       <<generate_bassline(key="aes",root="g")>>
382       <<generate_bassline(key="des",root="ges")>>
383       <<generate_bassline(key="ges",root="ges")>>
384       <<generate_bassline(key="b",root="ges")>>
385       <<generate_bassline(key="e",root="ges")>>
386       <<generate_bassline(key="a",root="ges")>>
387       <<generate_bassline(key="d",root="ges")>>
388       <<generate_bassline(key="g",root="ges")>>
389       <<generate_bassline(key="c",root="f")>>
390       <<generate_bassline(key="f",root="f")>>
391       <<generate_bassline(key="bes",root="f")>>
392       <<generate_bassline(key="ees",root="f")>>
393       <<generate_bassline(key="aes",root="f")>>
394       <<generate_bassline(key="des",root="f")>>
395       <<generate_bassline(key="ges",root="f")>>
396       <<generate_bassline(key="b",root="e")>>
397       <<generate_bassline(key="e",root="e")>>
398       <<generate_bassline(key="a",root="e")>>
399       <<generate_bassline(key="d",root="e")>>
400       <<generate_bassline(key="g",root="e")>>
401       <<generate_bassline(key="c",root="e")>>
402       <<generate_bassline(key="f",root="e")>>
403       <<generate_bassline(key="bes",root="ees")>>
404       <<generate_bassline(key="ees",root="ees")>>
405       <<generate_bassline(key="aes",root="ees")>>
406       <<generate_bassline(key="des",root="ees")>>
407       <<generate_bassline(key="ges",root="ees")>>
408       <<generate_bassline(key="b",root="ees")>>
409       <<generate_bassline(key="e",root="ees")>>
410       <<generate_bassline(key="a",root="d")>>
411       <<generate_bassline(key="d",root="d")>>
412       <<generate_bassline(key="g",root="d")>>
413       <<generate_bassline(key="c",root="d")>>
414       <<generate_bassline(key="f",root="d")>>
415       <<generate_bassline(key="bes",root="d")>>
416       <<generate_bassline(key="ees",root="d")>>
417       <<generate_bassline(key="aes",root="des")>>
418       <<generate_bassline(key="des",root="des")>>
419       <<generate_bassline(key="ges",root="des")>>
420       <<generate_bassline(key="b",root="cis")>>
421       <<generate_bassline(key="e",root="cis")>>
422       <<generate_bassline(key="a",root="cis")>>
423       <<generate_bassline(key="d",root="cis")>>
424       <<generate_bassline(key="g",root="c")>>
425       <<generate_bassline(key="c",root="c")>>
428 #+end_src
429   
430 ** Number of bars to compile (showLastLength)
431 #+begin_src lilypond
433 %  showLastLength = R1*17
435 #+end_src
437 ** Score
438 #+begin_src lilypond
440   \score {
442   <<
444     \new Staff {
445       \key c \major
446       \set Staff.midiInstrument = #"acoustic grand"
447       \Arps 
448     }
450     \new Staff {
451       \key c \major
452       \set Staff.midiInstrument = #"acoustic grand"
453       \Triads 
454     }
456     \new Staff {
457       \clef bass
458       \key c \major
459       \set Staff.midiInstrument = #"slap bass 2"
460       \Bass
461     }
463     \new DrumStaff {
464       \Drums
465     }
466   
467   >>
468     
469     \layout {
470     }
471     \midi {
472       \context {
473         \Score
474         tempoWholesPerMinute = #(ly:make-moment 120 4)
475       }
476     }
477   }
478     
479 #+end_src
481 ** Paper
483 #+begin_src lilypond 
485 \paper {
486   #(define dump-extents #t) 
487   
488   indent = 0\mm
489   line-width = 200\mm - 2.0 * 0.4\in
490   ragged-right = #""
491   force-assignment = #""
492   line-width = #(- line-width (* mm  3.000000))
495 #+end_src
497 ** Header
499 #+begin_src lilypond
501 \header {
502   title = \markup \center-column {"Modal Cycle"} 
503   composer =  \markup \center-column { "Music by" \small "Martyn Jago" }
504   poet =  \markup \center-column { "ob-lilypond" \small "example 3" }
507 #+end_src
508