Strudelify

Bouree

Jethro Tull

KeyD minorTempo110 bpm
0:00/0:00
// Bouree — Jethro Tull
// 110 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 103 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · piccolo · "2nd flute"
const piccolo = note("<~@8 A@4 B@4 ~@21 C D ~@38 E F G@5 H@8 I@8 ~@3>".pickRestart({
  A: "[~@21 f5@3 e5@4 ~ d5@7 ~@4 g5@4 ~ a5@7 ~@4 e5@4 ~ g5@7 ~@4 f5@4 ~ d5@4 ~@7 e5@4 ~ f5@7 ~@4 a5@4 ~ g5@16 ~@3]/4",
  B: "[a5@4 ~@4 f5@3 e5@2 d5@3 ~@5 f5@3 e5@4 ~ d5@7 ~@4 g5@4 ~ a5@7 ~@4 e5@4 ~ g5@7 ~@4 f5@4 ~ d5@4 ~@4 d5@3 e5@4 ~ f5@7 ~@4 a5@4 ~ c6@4 d6 ~ d6 c6 d6 c6 ~@6 f5@3, ~@57 c6 ~@6]/4",
  C: "d6@3 ~@2 d6@3 c6@2 f6@3 ~@14 e4 gb4 [g4,a4] [b4,db5] d5", D: "e7@3 ~@5 d7@3 ~@5 c7@2 a6@3 g6@3 a6@3 ~@5, e5 ~@31",
  E: "~@8 f6@4 ~ a6@14 g6@2 a6@3", F: "d7@4 ~@4 c7@4 ~ a6@14 g6@2 f6@3",
  G: "[g6@4 ~@4 a5@4 ~ g5@7 ~@4 g5@4 ~@4 f5@4 ~@4 f5@3 e5@2 d5@3 ~@8 e5@4 ~ d5@7 ~@4 g5@4 ~ a5@7 ~@4 e5@4 ~ g5@7 ~@4 f5@4 ~ d5@7 ~@4 e5@4 ~ f5@7 ~@4 a5@4 ~ c6@4 d6 ~ d6 c6 d6 c6 ~@6 f5@3, ~@29 a5@7 ~@110 c6@2 ~@12]/5",
  H: "[~@21 f5@3 e5@4 ~ d5@7 ~@4 g5@4 ~ a5@7 ~@4 e5@4 ~ g5@7 ~@4 f5@4 ~ d5@7 ~@4 e5@4 ~ f5@7 ~@4 a5@4 ~ g5@7 ~@4 g5@4 ~ a5@7 ~@4 f5@3 e5@2 d5@3 ~@8 e5@4 ~ d5@7 ~@4 g5@4 ~ a5@7 ~@4 e5@4 ~ g5@7 ~@4 f5@4 ~ d5@7 ~@4 e5@4 ~ f5@7 ~@4 a5@4 ~ c6@4 d6 ~ d6 c6 d6 c6 ~@6 f5@3, ~@121 c6 ~@6]/8",
  I: "[~@21 f5@3 e5@4 ~ d5@7 ~@4 g5@4 ~ a5@7 ~@4 e5@4 ~ g5@7 ~@4 f5@4 ~ d5@7 ~@4 e5@4 ~ f5@7 ~@4 a5@4 ~ g5@7 ~@4 g5@4 ~ a5@7 ~@4 f5@3 e5@2 d5@3 ~@8 e5@4 ~ d5@7 ~@4 g5@4 ~ a5@7 ~@4 e5@4 ~ g5@7 ~@4 f5@4 ~ d5@7 ~@4 e5@4 ~ f5@7 ~@4 a5@4 ~ a5@4 bb5 ~ bb5 a5 bb5 a5 ~@9, ~@121 a5 ~@6]/8",
})).s("gm_piccolo").gain(0.39).pan(0.8)

// bass · acoustic bass · "bass"
const bass = note(`<
  A@2 B C D@2 B E F G B E H@2 B C I G B J D@2 K C I L M@2 N O M@2 P Q ~ Q ~ R ~ S T@3 U@7 V@2 W X Y Z AA ~@17 AB G AC G
  AD@2 AE AF@2 AG AH AI B AJ AK@2 B AL AM@2 B AJ AN@2 AO AP ~ AQ AR
>`.pickRestart({
  A: "[~@4 d2 f2 a2 f2, ~@29 d3@8 ~@27]/2", B: "e2 f2 d2 e2", C: "f2 a2 ~ e2, ~@2 c3 ~, ~@21 c2@8 ~@3",
  D: "[~ e2 d2 ~ d2 f2 a2 f2, a2@8 ~@21 a2@8 ~@27, ~@5 f2@8 ~@11 f2@8 ~@32]/2",
  E: "f2 a2 ~ c2, ~@2 c3 ~, ~@21 g2@8 ~@3", F: "f2 c3 ~ e2, ~@2 f2 ~, ~@21 c3@8 ~@3", G: "d2 f2 a2 f2",
  H: "[~ e2 d2 ~ d2 f2 a2 f2, a2@8 ~@21 a2@8 ~@27, ~@5 g2@8 ~@11 f2@8 ~@32]/2", I: "f2 c3 f2 e2", J: "f2 a2 c3 c2",
  K: "e2 b1 d2 e2", L: "d2!2 ~ e2, ~@2 a2 ~, ~@21 gb2@8 ~@3", M: "c2 e2 d2 f2", N: "~ db2 d2 f2, a2 ~@3, ~@5 e2@8 ~@19",
  O: "d2 f2 ~ e2, ~@2 a2 ~, ~@21 g2@8 ~@3", P: "~ db2 d2!2, a2 ~@3, ~@5 e2@8 ~@19", Q: "[d2,d3] ~@3",
  R: "~@5 a2@4 ~@7, ~@5 c3@8 ~@19, ~ bb2 ~@2", S: "~@10 f3@3 ~@19, d3@2 a2 ~@5, ~@5 c3@8 ~@19",
  T: "[~@31 d2@6 ~@2 a2@8 d2@4 d2@4 ~@2 d2@6 g2@4 g2@4 g2@5 ~@2 g2@6 c2@4 ~@4 db2@4, ~@37 d2@8 ~@10 a2@8 ~@13 gb2@8 ~@4 c2@8]/3",
  U: "[d2@6 ~@2 f2@8 d2@4 ~@11 g2@5 ~@10 g2@6 c2@4 ~@7 d2@5 ~@8 d2@6 d2@6 ~@7 g2@5 ~@10 g2@6 c2@4 ~@7 d2@5 ~@8 d2@6 d2@6 ~@7 g2@5 ~@10 g2@6 c2@4 ~@8 c2@4 e2@4 g2@4 c2@4 d2@4 f2@4 a2@4 d2@4, ~@3 d2@4 ~@3 d2@4 gb2@4 g2@3 e2@4 ~@5 db2@4 d2@4 ~@7 d2@4 ~@3 f2@4 ~@12 a2@4 ~@4 a2@4 ~@2 g2@4 d2@4 ~@2 c2@4 ~@16, ~@24 f2@8 ~@8 f2@8 ~@24 a2@8 ~@8 a2@8 ~@4 g2@8 d2@8 ~@4 c2@8 ~@42 e2@8 ~@9 db2@8 ~@29, ~@44 d2@8 ~@4 c2@8 ~@42 e2@8 ~@9 db2@8 ~ d2@8 ~@14 d2@8 ~@6 f2@8 ~@48]/7",
  V: "c2 e2 g2 c2 d2 f2 a2 d2", W: "a2 g2 e2 db2 d2 f2 a2 d2", X: "d2 f2 a2 d2 a2 g2 e2 db2",
  Y: "c2 e2 g2 c2 d2!2 ~ d2, ~@6 f2 ~, ~@13 e2@2 ~", Z: "c2 e2 g2 c2 d2 g2 a2 d2", AA: "a2!2 g2 e2 ~@4", AB: "~@7 d3",
  AC: "e2@8 f2@8 d2@8 f2@4 ~ a2@3", AD: "[e2@8 f2@8 d2@8 e2@5 f2@8 a2@8 c3@3 c2@4 ~ e2@8 ~@3]/2",
  AE: "a2@5 g2@3 e2@8 d2@8 f2@4 ~ a2@3", AF: "[d2@8 f2@8 a2@8 f2@7 e2@8 ~ f2@8 d2@8 e2@8]/2",
  AG: "f2@8 a2@8 c3@5 g2@3 c2@8", AH: "f2@8 c3@8 f2@5 c3@3 e2@8", AI: "d2 f2 a2 e2", AJ: "f2@8 a2@8 c3@4 ~ c2@3 e2@8",
  AK: "[a2@4 ~ f2@3 e2@8 d2@8 f2@4 ~@4 d2@8 f2@8 a2@8 f2@8, ~@29 a2@5 ~@30]/2", AL: "f2@2 a2@2 c3 c2 e2@2",
  AM: "[f2@8 c3@8 f2@4 ~ c3@3 e2@5 d2@11 f2@8 a2@8 f2@8]/2",
  AN: "[~@5 f2@3 e2@8 d2@8 ~@8 d2@8 f2@8 a2@8 f2@8, a2 ~@2 f2 ~@4, ~@29 a2@5 ~@30]/2", AO: "e2 f2 d2 f2",
  AP: "f2@8 ~@5 a2@8 ~@11",
  AQ: "~@5 gb2@3 ~@8 d3@4 ~@12, d2@3 e2@4 ~@2 ab2@3 bb2@4 ~@16, ~ eb2@3 f2@4 g2@3 a2@3 [c3,db3]@4 ~@14, ~@13 b2@4 ~@15", // Dbmaj7
  AR: "~@6 [d2,d3] ~", // D
})).s("gm_acoustic_bass").gain(0.39)

// bass · fretless bass · "bass"
const bass_2 = note("<~@56 A B C D E F G H I J K L M N O P Q R S ~@28>".pickRestart({
  A: "~@4 d2!4", B: "d3 d2 e2 f2 a2 bb2 a2 f2", C: "e2 f2 g2 a2 d2 ~ d2 f2", D: "f2 a2 d3 a2 e3 c3 g2 e2",
  E: "g3 db3 a2 c3 d3@2 ~ d3", F: "~ f2@2 ~ g3@2 ab3@2 a3@2 db3@2 d3@2 f3@2, d3 ~@7", G: "e3 f3 g3 a3 d3 ~ d3 e3",
  H: "f3@4 a3@4 c4@4 e3@4 ~ bb3@4 ~@3 g3@4 c3@4, ~@4 c4 ~@3", I: "f3 ~ c4 ~ f3 c4 ~@2",
  J: "c3!2 ~ g3 e3 ~ c3 bb2 ~ bb2 c3 ~ g2 ~@3", K: "bb2!2 ~ bb2 g2 ~ c2 f2 ~ f2 ~ f2 g2 ~ c2 ~",
  L: "d2 ~ d2!3 ~ d2!2 ~ d2 ~ d2!5", M: "c3 ~ c3!2 d3 ~ d3 bb2 ~ bb2 ~ bb2 c3 ~ g2 a2",
  N: "bb2!2 ~ bb2 c3 ~ g2 f2 ~@2 f2 ~ f2 ~ d2 ~", O: "d2 ~@2 a2 d2 ~ d2 a2 d2!3 f2 ~@4",
  P: "a2 ~ d2!2 a2 ~ d2 a2 ~ d2 ~ d2 f2!2 ~ f2", Q: "[c3,g3] ~ [c3,g3]!2 [d3,f3] ~ [d3,f3] ~",
  R: "e3 ~ c3!2 [c3,f3] ~ [g2,c3] ~", S: "[d2,a2,d3,a3]@9 ~@7",
})).s("gm_fretless_bass").gain(0.47)

// chords · electric guitar jazz · "guitar"
const electric_guitar_jazz = note(`<
  ~@9 A@3 B@4 C D E F G D H F I J K@2 L J K@2 L M ~ M ~@5 N O N O N O N O N P@2 Q R P@2 Q S T U V S T U W ~@20 X T Y Z X
  T Y AA@8 ~ AB@2
>`.pickRestart({
  A: "[[a3,d4,f4]@4 ~@8 [a3,db4,e4]@7 ~@9 [a3,c4,e4,g4]@7 ~@5 db4@4 [a3,d4,f4]@7 ~@9 [a3,c4,f4]@8 ~@8 [g3,c4,e4]@8 ~@12]/3", // Dm A Am7 Dm F C
  B: "[[g3,a3,db4,e4]@4 [a3,d4,f4]@2 ~ [a3,d4,f4]@2 ~@2 [a3,db4,e4]@2 ~@2 [a3,c4,e4,g4]@2 ~ db4 [a3,d4,f4]@2 ~@2 [a3,c4,f4]@2 ~@3 [g3,c4,e4] ~@3]/4", // A7 Dm A Am7 Dm F C
  C: "[a3,c4,f4] ~@7", D: "[a3,d4,f4]!2 [g3,a3,db4,e4] [g3,a3,c4,e4]",
  E: "[g3,a3,db4,e4]!2 [g3,c4,d4,e4,f4] [a3,d4,f4], ~@16 a3 ~@15", F: "[a3,c4,f4]!2 [g3,c4,e4]!2",
  G: "[g3,a3,db4,e4] [g3,a3,c4,e4] [f3,a3,d4]!2", H: "[ab3,b3,e4] [g3,bb3,e4] [a3,d4,f4]!2",
  I: "[a3,c4,f4]!3 [g3,a3,db4,e4]", J: "[f3,a3,d4]!2 [g3,a3,db4,e4]!2", K: "[e3,g3,c4]!2 [f3,a3,d4]!2",
  L: "[e3,g3,a3,db4]!2 [f3,a3,d4]!2", M: "[a3,d4,f4] ~@3", N: "~ [a4,d5,f5]!2 ~@2 [a4,d5,f5]!2 ~",
  O: "~@2 [g4,bb4,d5,f5] ~ [g4,bb4,d5,f5] ~@2 [g4,bb4,d5,f5] ~@8", // Gm7
  P: "[c4,e4,g4]@2 ~@6 [c4,e4,g4]@2 ~@4 [d4,f4,a4]@7 ~@3 [d4,f4,a4]@2 ~@6", // C Dm
  Q: "[db4,e4,g4,a4]@2 g4@2 ~@4 [c4,e4,g4,a4]@2 ~@4 [d4,f4,a4]@7 ~@3 [d4,f4,a4]@2 ~@6", // A7 Am7 Dm
  R: "[d4,f4,a4]@2 ~@6 [d4,f4,a4]@2 ~@4 [db4,e4,g4,a4]@7 ~@3 [c4,e4,g4,a4]@2 ~@6", S: "[d4,f4,a4] [db4,e4,a4]",
  T: "[a3,db4,e4,g4] [a3,d4,f4]", U: "[a3,c4,f4] [c4,e4,g4]", V: "[a3,db4,e4,g4] [d4,f4,a4]",
  W: "[a3,c4,f4]@7 ~ [a3,c4,f4]@7 ~ [a3,c4,f4]@16", X: "[a3,d4,f4] [g3,a3,db4,e4]", Y: "[a3,c4,f4] [g3,c4,e4]",
  Z: "[g3,a3,db4,e4] [a3,d4,f4]", // A7 Dm
  AA: "[[a3,c4,f4]@4 ~@3 [a3,d4,f4]@2 ~@2 [g3,a3,db4,e4]@2 ~@2 [a3,c4,e4,g4]@2 ~@2 [a3,d4,f4]@2 ~@2 [a3,c4,f4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,a3,db4,e4]@2 ~@2 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2 ~@2 [g3,a3,db4,e4]@2 ~@2 [a3,c4,e4,g4]@2 ~@2 [a3,d4,f4]@2 ~@2 [a3,c4,f4]@2 ~@2 [g3,a3,db4,e4]@5]/8", // F Dm A7 Am7 Dm F C A7 …
  AB: "[~@4 a3@5 ~@5 [a3,d4,f4]@2, f4@5 ~@11, d4@7 ~ c4@8 ~@48, ~ db4@2 b3@2 ~@11, ~@13 bb3@8 ~@43]/2", // Dm
})).s("gm_electric_guitar_jazz").gain(0.18)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A B C B C B C B D E@2 B C D C B C F ~ F ~ G ~ G ~ H I J@2 K L J@2 H I J@3 I M@2 ~@27 A B C B D B C B D B D B D B
  D B ~@3
>`.pickRestart({
  A: "~@15 x", B: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x", C: "x ~@3 x ~@3 x ~@2 x!2 ~@2 x", D: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@2 x",
  E: "x!2 ~@2 x ~@2 x!2 ~@2 x!2 ~@2 x", F: "x", G: "x ~ x ~ x!2 ~@10", H: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2",
  I: "x ~ x ~ x ~ x!3 ~ x ~ x!3 ~", J: "x ~ x!3 ~ x ~ x ~ x ~ x!3 ~", K: "x!2 ~ x!2 ~ x ~ x!2 ~@2 x!3 ~",
  L: "x!2 ~@2 x ~ x ~ x!2 ~@2 x!3 ~", M: "x ~ x!3 ~ x!3 ~ x ~ x!3 ~",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A B@2 C D C E C E F E G H I E C E ~@2 J ~ K ~ K L M N O P Q N P ~ M N O R S T U R ~@8 V@7 ~@2 J ~@9 W B@2 C X Y E
  C Z Y Z Y AA Y AB Y ~@3
>`.pickRestart({
  A: "~@21 x ~@2 x ~@7", B: "~@13 x ~@18", C: "~@13 x ~@7 x ~@4 x ~@2 x ~@2", D: "~@8 x ~@7 x ~ x ~@2 x ~@7 x ~@2",
  E: "~@8 x ~@4 x ~@7 x ~@7 x ~@2", F: "~@13 x ~@4 x ~@9 x!2 ~@2", G: "~@5 x ~@7 x ~@7 x ~@4 x ~@2 x ~@2",
  H: "~@8 x ~ x ~@2 x ~@7 x ~@7 x ~@2", I: "~@5 x ~@4 x ~@2 x ~@7 x ~@4 x ~@2 x ~@2", J: "x", K: "x ~ x ~ x!2 ~@10",
  L: "~@6 x!3 ~@2 x!4 ~", M: "~@4 x ~@4 x!6 ~", N: "~@4 x ~@4 x ~ x!4 ~", O: "~@4 x ~@4 x ~@2 x ~ x!2",
  P: "~@4 x ~@4 x ~@2 x!3 ~", Q: "~@4 x ~@6 x!4 ~", R: "~ x ~@2", S: "~@4 x ~@4 x ~ x!3 ~ x",
  T: "~@4 x ~@4 x ~ x!2 ~@2 x", U: "~@4 x ~@4 x ~@2 x!2 ~ x", V: "x!2", W: "~@13 x ~@2 x ~ x ~@2 x ~@2 x ~@7",
  X: "~@8 x ~@15 x ~ x ~@2 x ~@2", Y: "~@13 x ~@15 x ~@2", Z: "~@5 x ~@2 x ~@4 x ~@18",
  AA: "~@5 x ~@2 x ~@4 x ~@7 x ~@4 x ~@2 x ~@2", AB: "~@5 x ~@2 x ~@4 x ~@7 x ~@7 x ~@2",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A B C@2 D@2 C@2 E B E C@6 F@8 G H@2 I H J I@2 G H@2 K L M N@2 C@3 O C@3 O F@7 ~@12 A B C@2 E B C@2 E B E B E B E
  B ~@3
>`.pickRestart({
  A: "~@29 x ~@2", B: "x ~@7 x ~@7 x ~@4 x ~@2 x ~@7", C: "x!4", D: "x ~@4 x ~@2 x ~@7 x ~@7 x ~@7",
  E: "x ~@7 x ~@7 x ~@7 x ~@4 x ~@2", F: "~ x ~ x", G: "x!8", H: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x!3 ~ x ~@3 x ~ x ~",
  I: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~ x!2 ~@2 x ~ x ~",
  J: "x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x!2 ~@2 x ~@3 x ~ x ~",
  K: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~@2 x ~@2 x ~ x ~",
  L: "x ~@3 x ~@3 x ~@3 x ~ x ~ x ~@3 x ~ x ~@2 x ~@2 x ~ x ~",
  M: "x ~@3 x ~@3 x ~@3 x ~ x ~ x ~@3 x!3 ~@2 x ~@2 x ~ x ~",
  N: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~@2 x ~ x!2 ~ x ~", O: "x ~@7 x ~@7 x ~@7 x ~ x ~@2 x ~@2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 A B ~@14 C ~@3 C ~@3 C ~@35 A ~ D ~@8>".pickRestart({
  A: "~@24 x ~@2 x ~ x ~@2", B: "x", C: "~@12 x!4", D: "~@27 x ~ x ~@2",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@71 [~ x ~@2] ~@31>").gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@32 A ~@15 B ~@3 B ~@3 B ~@35 C ~ D ~@8>".pickRestart({
  A: "~@21 x ~@10", B: "~@8 x!4 ~@4", C: "~@16 x ~@2 x ~ x ~@10", D: "~@19 x ~ x ~@10",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@41 A ~@7 A ~@2 B A@4 ~@32 A ~@3 A@3 ~ A@3 ~ C D>".pickRestart({
  A: "x", B: "~ x", C: "~@10 x ~ x ~@6 x ~@2 x ~@3 x ~@5", D: "~@8 x!4 ~ x!2 ~@9 x ~@7",
})).gain(0.3)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@101 [~@5 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@3 x ~@7 x ~ x] [~ x ~@4 x ~@25]>").gain(0.1)

// drums · ride
const ride = s("rd").struct("<~@17 [x!4]!16 ~@52 [x!4]!15 ~@3>").gain(0.4)

stack(
  piccolo, bass, bass_2, electric_guitar_jazz, kick, snare, hihat, mid_tom, open_hat, high_tom, crash, crash_soft, ride
)

More by Jethro Tull