'Go to the Zel home page: http://www.zelsoftware.com
'This is just a modification of the blujam.zel file with different chords
'and an additional rhythm part. It ended up in a folk-rock idiom
'which was not entirely what I had in mind originally :-)  ...Andrew

include gm.zel include drum.zel

'GENERATES A VIRTUALLY INFINITE NUMBER OF VARIATIONS

'=====================INSTRUCTIONS:========================

'ZEL CREATES ALL THE MELODIES FOR YOU. ALL YOU DO IS
'PUT DIFFERENT NUMBERS IN THE MACROS BELOW. 
'ZEROS WILL CREATE RANDOM TUNES.
 
set [bassTheme {{thread,14,26,3,4}}
     theme1    {{thread,34,37,450,984}} 
     theme2    {{thread,3,37,45,49}}
     rhythm    {{thread,5,5,5,5}}]
'==========================================================

title  [reel34] author [Andrew MacLean]
key=C meter 4/8 tempo=60  duration /3 |2 restart time intro
track [ bass Fiddle Squeeze ]

'====================== THE GENERATOR: =====================

'?1 IS THE TRANSPOSE, ?2 IS THE REPEAT COUNT, ?3 IS THE SEED:-
set play { ?1 seed ?3  (( x
   !+10 M0+{xa}  {q}{xb}  {q}{xc}  {q}{xa} {q}{xb} {q}{xc} )?2~ )2~ }

'THE CHORD PROGRESSION, ?1,?2,?3,?4 ARE SEEDS YOU SUPPLY:
set thread { {play, ^Cmaj,4,?1, ^amin,2,?2,  ^Dmin,2,?3, ^gdom7,1,?4, 
                    ^Cmaj,1,?4, ^Gdom7,1,?4, ^Cmaj,1,?4} }

'========================== DRUMS ==========================
'FROM drum.zel: 
intro  12 {BluesGenA,1 {busy,2},1,3,6,1,1,3,3} end 

'========================== SETUP ==========================

'RHYTHMIC VARIATIONS:
set [ x1 { set [ xa {1} xb {1} xc {1} ] }
      x2 { set [ xa {2} xb {0} xc {1} ] }
      x3 { set [ xa {3} xb {0} xc {0} ] } ]

'MELODIC VARIATIONS:
set [ q1 {M1+} q2 {m1+} q3 {m1-} 
      q4 {M1-} q5 {M0+} q6 {m0+} q7 {t1+}  q8 {t1-} q9 {T1+}  q10 {T1-} ]
pick q [ q1  q2  q3  q4 q5  q6 q7 2 q8 2  ]

'MODEs: 
mode maj  [ C E G ] 
mode min  [ C E& G ] 
mode dom7 [C E G B&]

'========================== BASS ===========================
|1 bass $$3 @@3 acousticBass  !!90 accent 20

'FAVOR THE x2 AND x3 TIMING IN THE BASS: 
pick x [ x2  x3  ]  12 time start [{bassTheme}]3~  ^C M0=6

'======================== SOLOS ===========================

Fiddle        $$4 @@6 !!80 viola pan =40
Squeeze       $$6 @@6 !!90 accordian ><40 pan =80

'RHYTHM VARIATION:
pick x [  x1  x2  x3  ]

Fiddle   start  theme1  start |+25 theme2      [@-1 CE@6G@]
Squeeze  start |+13  theme2  start |+25 theme1 [@-1 C6EGE@]

'======================= RHYTHM ==========================
'IN THE RHYTHM GENERATOR WE NEED TO GENERATE CHORDS INSTEAD OF NOTES

'USED TO MAKE THE RHYTHM A BIT SNAPPIER (CHORD QUALIFIER "$" TURNS CHORD OFF)
set [ ON {} OFF {$}] pick OO [  ON 2 OFF]

'THIS IS A WAY TO PICK FROM A SET OF NOTES IN THE MODE
set [ q11 {m2+} q12 {m2-} q13 {m3+} 
      q14 {m3-} q15 {m4+} q16 {m4-} 
      q17 {m5+} q18 {m5-} empty {} ]

pick y [ q2 q3 q6 q11 q12 q13 q14  q16  empty 5 ]
pick q [ q1  q2  q3  q4 q5  q6 ]
'mn WILL GENERATE A CHORD OF ZERO TO FIVE NOTES FROM THE NOTES in "y":
set mn {[{y}]5}
'INCREASING THE DURATION FOR THIS GENERATOR HALVES THE NUMBER OF NOTES
duration 2/3

set play { ?1  (( seed ?3 x
  *{xa} M0=mn OO {q}*{xb}mn OO {q}*{xc}{q}mn x OO {q}*{xa}mn OO {q}*{xb}mn OO       {q}*{xc}mn )?2~ )1~ }
 
track strings $$8 @@5 intro jazzGuitar [@-1 ~cgeCGEC@] !!-10 start [rhythm]3