Strudelify
Bungle In The Jungle cover art

War Child

Bungle In The Jungle

Jethro Tull

KeyB minorTempo100 bpm
0:00/0:00
// Bungle In The Jungle — Jethro Tull
// 100 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 87 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// bass · electric bass pick · "Picked Bass"
const bass = note(`<
  ~@8 A@8 B@7 C@4 D@2 E@2 F@2 G@7 H@2 I@2 J K L@2 M N O P Q P R S T S T S T U V W@2 X@2 W@2 Y Z W@2 X@2 W@2 Y Z W@2 X@2
  W@2 Y Z
>`.pickRestart({
  A: "[~@27 b1@4 a1@4 b1@12 d2@4 f#1@4 b1@4 e2@4 d2@4 e2@8 c#2@4 d2@4 b1@8 b1@4 a1@4 b1@12 d2@4 f#1@4 b1@4 e2@4 d2@4 e2@8 c#2@4 d2@4 b1@8 f#1@4 e1@4 g1@12 g1@4 a1@4 a#1@4 b1@4 a1@4 b1@12 c#2@4 a1@4 g1@4 f#1@4 e1@4 g1@12 g1@4 a1@4 a#1@4 b1@4 a1]/8",
  B: "[~@3 b1@12 c#2@4 a1@4 g1@4 f#1@4 e1@4 g1@12 g1@4 a1@4 a#1@4 b1@4 a1@4 b1@12 c#2@4 a1@4 g1@4 f#1@4 e1@4 g1@12 g1@4 a1@4 a#1@4 b1@4 a1@4 b1@4 a1@12 b1@24 ~@7 g2@8 g2@12 g#2@8 d3@12 d3@6]/7",
  C: "[~ d3@2 d3@2 a2@4 g2@2 b2@2 a2@6 b2@2 a2@2 b2@6 b2@2 f#2@2 b2@2 a2@2 b2@4 g2@4 g2@6 g#2@4 d3@6 d3@3]/4",
  D: "[~ d3@2 d3@2 a2@4 g2@4 g2@2 g2@2 a2@4 a2@2 f#2@2 b2@4 b2@3]/2",
  E: "[~ b2@4 ~@4 b1@2 a1@2 b1@6 d2@2 f#1@2 b1@2 e2@2 d2@2 e2@3]/2",
  F: "[~ c#2@2 d2@2 b1@4 b1@2 a1@2 b1@6 d2@2 f#1@2 b1@2 e2@2 d2@2 e2@3]/2",
  G: "[~ c#2@2 d2@2 b1@4 f#1@2 e1@2 g1@6 g1@2 a1@2 a#1@2 b1@2 a1@2 b1@6 c#2@2 a1@2 g1@2 f#1@2 e1@2 g1@6 g1@2 a1@2 a#1@2 b1@2 a1@2 b1@6 c#2@2 a1@2 g1@2 f#1@2 e1@2 g1@6 g1@2 a1@2 a#1@2 b1@2 a1@2 b1@6 c#2@2 a1@2 g1@2 f#1@2 e1@2 g1@3]/7",
  H: "[~@3 g1@2 a1@2 a#1@2 b1@2 a1@2 b1@2 a1@6 b1@11]/2", I: "[~@9 g2@8 g2@12 g#2@8 d3@12 d3@8 d3@4 d3@3]/2",
  J: "~ a2@8 g2@4 b2@4 a2@12 b2@3", K: "~ a2@4 b2@12 b2@4 f#2@4 b2@4 a2@3",
  L: "[~ b2@8 g2@8 g2@12 g#2@8 d3@12 d3@8 d3@4 d3@3]/2", M: "~ a2@8 g2@8 g2@4 g2@4 a2@7",
  N: "~ a2@4 f#2@4 b2@8 b2@8 b2@7", O: "~@9 b1@4 a1@4 b1@12 d2@3", P: "~ f#1@4 b1@4 e2@4 d2@4 e2@8 c#2@4 d2@3",
  Q: "~ b1@8 b1@4 a1@4 b1@12 d2@3", R: "~ b1@8 f#1@4 e1@4 g1@12 g1@3", S: "~ a1@4 a#1@4 b1@4 a1@4 b1@12 c#2@3",
  T: "~ a1@4 g1@4 f#1@4 e1@4 g1@12 g1@3", U: "~ a1@4 a#1@4 b1@4 a1@4 b1@4 a1@11", V: "~ b1@24 ~@7",
  W: "[g2@2 g2@3 g#2@2 d3@3 d3@2 d3!2 a2@2]/2", X: "[g2 b2 a2@3 b2 a2 b2@3 b2 f#2 b2 a2 b2@2]/2",
  Y: "g2@2 g2!2 a2@2 a2 f#2", Z: "b2!3 ~",
})).s("gm_electric_bass_pick").gain(0.51)

// other · piano · "Piano 1/Overdrive Gt"
const piano = note(`<
  ~@9 A B A C@8 ~@13 D@7 E@2 F@2 G@4 H@2 ~@4 I J K J K J K L M N@2 O@2 N@2 P Q N@2 O@2 N@2 P Q N@2 O@2 N@2 P Q
>`.pickRestart({
  A: "~@3 d3@12 d3@12 ~@5", B: "~@3 e3@10 ~@6 d3@8 ~@5", C: "[~@3 e3@10 ~@6 d3@237]/8",
  D: "[~@13 a#2@6 c#3@2 c#3@4 ~@4 d3@6 c#3@2 c#3@4 ~@4 a#2@6 c#3@2 c#3@4 ~@4 d3@6 c#3@2 c#3@4 ~@4 a#2@6 c#3@2 c#3@4 ~@4 d3@6 c#3@2 c#3@4 ~@4 a#2@3]/7",
  E: "[~@3 c#3@2 c#3@4 d3@6 c#3@6 d#3@11]/2", F: "[~@9 b2@8 b2@12 c#3@8 d3@12 d3@15]/2",
  G: "[~ d3@8 b2@8 c#3@20 d#3@36 b2@8 b2@12 c#3@8 d3@12 d3@15]/4", H: "[~ d3@8 b2@16 c#3@16 d#3@23]/2",
  I: "~@17 a#2@12 c#3@3", J: "~ c#3@8 ~@8 d3@12 c#3@3", K: "~ c#3@8 ~@8 a#2@12 c#3@3", L: "~ c#3@8 d3@12 c#3@11",
  M: "~ d#3@24 ~@7", N: "[b2@2 b2@3 c#3@2 d3@3 d3@4 d3@2]/2", O: "[b2@2 c#3@5 d#3@9]/2", P: "b2 c#3", Q: "d#3@3 ~",
})).s("gm_piano").gain(0.46)

// other · overdriven guitar · "Piano 1/Overdrive Gt"
const overdriven_guitar = note("<~@13 A B A B A B C@7 D@2 E@5 F@8 ~@9 G@4 ~@33>".pickRestart({
  A: "~@3 a#2@12 c#3@4 c#3@8 ~@5", B: "~@3 d3@12 c#3@4 c#3@8 ~@5",
  C: "[~@3 a#2@12 c#3@4 c#3@8 d3@12 c#3@12 d#3@24 ~@7 b2@8 b2@12 c#3@8 d3@12 d3@16 d3@8 b2@8 c#3@20 d#3@36 b2@8 b2@6]/7",
  D: "[~@3 c#3@4 d3@6 d3@8 d3@4 b2@7]/2",
  E: "[~ c#3@8 d#3@12 ~@8 d3@6 d3@6 ~@4 e3@5 ~@3 d3@4 ~@4 d3@6 d3@6 ~@4 e3@3]/5", F: "[~@5 d3@123]/8",
  G: "[~@17 d3@12 ~@20 e3@10 ~@6 d3@16 d3@24 ~@8 e3@10 ~@5, ~@29 d3@36 ~@63]/4",
})).s("gm_overdriven_guitar").gain(0.46)

// other · overdriven guitar · "Overdrive Gtr/Piano"
const overdriven_guitar_2 = note("<~@9 A B A C@8 ~@9 D@3 E F@8 ~@9 G@4 ~@33>".pickRestart({
  A: "~@3 f#3@12 f#3@12 ~@5", B: "~@3 g3@10 ~@6 f#3@8 ~@5", C: "[~@3 g3@10 ~@6 f#3@237]/8",
  D: "[~@13 f#3@6 ~@10 g3@5 ~@3 f#3@8 f#3@3, ~@19 f#3@18 ~@11]/3", E: "~@13 g3@3, ~@3 f#3@13", F: "[~@5 f#3@123]/8",
  G: "[~@17 f#3@12 ~@20 g3@10 ~@6 f#3@40 ~@8 g3@10 ~@5, ~@29 f#3@36 ~@63]/4",
})).s("gm_overdriven_guitar").gain(0.41)

// other · piano · "Overdrive Gtr/Piano"
const piano_2 = note(`<
  ~@13 A B A B A B C@7 D@2 E@2 ~@3 F@7 G@2 H@2 I@4 J@2 ~@4 K L M L M L M N O P@2 Q@2 P@2 R S P@2 Q@2 P@2 R S P@2 Q@2 P@2
  R S
>`.pickRestart({
  A: "~@3 c#3@12 e3@4 e3@8 ~@5", B: "~@3 f#3@12 e3@4 e3@8 ~@5",
  C: "[~@3 c#3@12 e3@4 e3@8 f#3@12 e3@12 f#3@24 ~@7 d3@8 d3@12 e3@8 f#3@12 f#3@16 f#3@8 d3@8 e3@20 f#3@36 d3@8 d3@6]/7",
  D: "[~@3 e3@4 f#3@6 f#3@8 f#3@4 d3@7]/2", E: "[~ e3@8 f#3@12 ~@11]/2",
  F: "[~@13 c#3@6 e3@2 e3@4 ~@4 f#3@6 e3@2 e3@4 ~@4 c#3@6 e3@2 e3@4 ~@4 f#3@6 e3@2 e3@4 ~@4 c#3@6 e3@2 e3@4 ~@4 f#3@6 e3@2 e3@4 ~@4 c#3@3]/7",
  G: "[~@3 e3@2 e3@4 f#3@6 e3@6 f#3@11]/2", H: "[~@9 d3@8 d3@12 e3@8 f#3@12 f#3@15]/2",
  I: "[~ f#3@8 d3@8 e3@20 f#3@36 d3@8 d3@12 e3@8 f#3@12 f#3@15]/4", J: "[~ f#3@8 d3@16 e3@16 f#3@23]/2",
  K: "~@17 c#3@12 e3@3", L: "~ e3@8 ~@8 f#3@12 e3@3", M: "~ e3@8 ~@8 c#3@12 e3@3", N: "~ e3@8 f#3@12 e3@11",
  O: "~ f#3@24 ~@7", P: "[d3@2 d3@3 e3@2 f#3@3 f#3@4 f#3@2]/2", Q: "[d3@2 e3@5 f#3@9]/2", R: "d3 e3", S: "f#3@3 ~",
})).s("gm_piano").gain(0.46)

// other · overdriven guitar · "Overdrive Gtr/Piano"
const overdriven_guitar_3 = note("<~@9 A B A C@8 ~@9 D@3 E F@8 ~@9 G@2 H@2 ~@33>".pickRestart({
  A: "~@3 b3@12 b3@12 ~@5", B: "~@3 b3@10 ~@6 b3@8 ~@5", C: "[~@3 b3@10 ~@6 b3@237]/8",
  D: "[~@13 b3@6 b3@10 b3@8 b3@8 b3@3]/3", E: "~@3 b3@10 b3@3", F: "[~@5 b3@123]/8", G: "[~@17 b3@12 b3@20 b3@15]/2",
  H: "[~ b3@16 b3@42 ~@5]/2",
})).s("gm_overdriven_guitar").gain(0.41)

// other · piano · "Overdrive Gtr/Piano"
const piano_3 = note(`<
  ~@13 A B A B A B C@7 D@2 E@2 ~@3 F@7 G@2 H@2 I@4 J@2 ~@4 K L M L M L M N O P@2 Q@2 P@2 R S P@2 Q@2 P@2 R S P@2 Q@2 P@2
  R S
>`.pickRestart({
  A: "~@3 f#3@12 a3@4 a3@8 ~@5", B: "~@3 b3@12 a3@4 a3@8 ~@5",
  C: "[~@3 f#3@12 a3@4 a3@8 b3@12 a3@12 b3@24 ~@7 g3@8 g3@12 a3@8 d4@12 d4@16 d4@8 g3@8 a3@20 b3@36 g3@8 g3@6]/7",
  D: "[~@3 a3@4 d4@6 d4@8 d4@4 g3@7]/2", E: "[~ a3@8 b3@12 ~@11]/2",
  F: "[~@13 f#3@6 a3@2 a3@4 ~@4 b3@6 a3@2 a3@4 ~@4 f#3@6 a3@2 a3@4 ~@4 b3@6 a3@2 a3@4 ~@4 f#3@6 a3@2 a3@4 ~@4 b3@6 a3@2 a3@4 ~@4 f#3@3]/7",
  G: "[~@3 a3@2 a3@4 b3@6 a3@6 b3@11]/2", H: "[~@9 g3@8 g3@12 a3@8 d4@12 d4@15]/2",
  I: "[~ d4@8 g3@8 a3@20 b3@36 g3@8 g3@12 a3@8 d4@12 d4@15]/4", J: "[~ d4@8 g3@16 a3@16 b3@23]/2",
  K: "~@17 f#3@12 a3@3", L: "~ a3@8 ~@8 b3@12 a3@3", M: "~ a3@8 ~@8 f#3@12 a3@3", N: "~ a3@8 b3@12 a3@11",
  O: "~ b3@24 ~@7", P: "[g3@2 g3@3 a3@2 d4@3 d4@4 d4@2]/2", Q: "[g3@2 a3@5 b3@9]/2", R: "g3 a3", S: "b3@3 ~",
})).s("gm_piano").gain(0.46)

// other · acoustic guitar steel · "Streel-Str. Gt/Piano"
const acoustic_guitar_steel = note("<A@8 B ~@78>".pickRestart({
  A: "[~@27 d5@4 c#5@4 d5@8 ~@4 c#5@4 c#5@4 d5@2 c#5@2 b4@4 a#4@4 b4@8 ~@4 b4@2 a#4@2 b4@4 c#5@4 d5@4 c#5@4 d5@8 ~@4 c#5@4 c#5@4 d5@2 c#5@2 b4@4 a#4@4 b4@12 ~@12 d5@4 c#5@4 d5@8 ~@4 c#5@4 c#5@4 d5@2 c#5@2 b4@4 a#4@4 b4@8 ~@4 b4@2 a#4@2 b4@4 c#5@4 d5@4 c#5@4 d5@8 ~@4 c#5@4 c#5@4 d5@2 c#5@2 b4@4 a#4]/8",
  B: "~@3 b4@16 ~@13",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// other · piano · "Streel-Str. Gt/Piano"
const piano_4 = note("<~@10 A ~ A ~@3 B@2 ~@13 C ~ C ~@3 D@2 ~@12 E@4 ~@3 F@2 ~@26 G>".pickRestart({
  A: "~@13 f#3@2 a#3@2 d4@2 b3@8 ~@5", B: "[~@19 d5@2 c#5@2 d5@2 e5@2 f#5@32 ~@5]/2", C: "~@2 f#3 a#3 d4 b3@4 ~@7",
  D: "[~@5 d5 c#5 d5 e5 f#5@16 ~@7]/2", E: "[~@27 f#3@2 a#3@2 d4@2 b3@8 ~@23]/2",
  F: "[~ d5@2 c#5@2 d5@2 e5@2 f#5@32 ~@23]/2", G: "b2@3 ~",
})).s("gm_piano").gain(0.46)

// other · acoustic guitar steel · "Steel-Str Gtr/Overdr"
const acoustic_guitar_steel_2 = note(`<
  ~@20 A@2 ~ B ~ C ~ B ~@5 D ~@3 E ~@3 F G ~ H ~ G ~ H ~@5 I ~@3 J ~@3 K L M ~@2 L M ~@2 L M ~@2 L M ~@2 L M ~@2 L M ~@2
>`.pickRestart({
  A: "[~@19 e2@18 ~@13 e2@14]/2", B: "~@5 e2@2 ~@9", C: "~@9 e2@7", D: "~@9 e2@4 ~@3", E: "~@9 e2@6 ~",
  F: "~@5 e2@9 ~@2", G: "~@9 e2@14 ~@9", H: "~ e2@4 ~@27", I: "~@9 e2@8 ~@15", J: "~@9 e2@12 ~@11", K: "~ e2@18 ~@13",
  L: "e2@7 ~@9", M: "~@6 e2 ~",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// other · overdriven guitar · "Steel-Str Gtr/Overdr"
const overdriven_guitar_4 = note(`<
  ~@23 A B ~@2 C D ~@11 E@2 ~@2 F G ~@2 H I ~@11 J ~@3 K L ~@2 M N ~@2 K L ~@2 M N ~@2 K L ~@2 M N
>`.pickRestart({
  A: "~@9 e2@2 ~@2 e2@2 ~", B: "~@9 e2@3 ~@4", C: "~@9 e2 ~@6", D: "~ e2 ~@7 e2 ~@6", E: "[~@15 e2@2 ~@15]/2",
  F: "~@9 e2@4 ~@4 e2@4 ~@11", G: "~@9 e2@6 ~@17", H: "~@9 e2@2 ~@14 e2@2 ~@5", I: "~@9 e2@2 ~@21", J: "~@21 e2@4 ~@7",
  K: "e2 ~ e2 ~@5", L: "e2@3 ~@13", M: "e2 ~@7 e2 ~@7", N: "e2 ~@15",
})).s("gm_overdriven_guitar").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B A B A B A C D E D E@8 F G H@5 I G@2 J H J H@8 K L M@5 N O L@2 M L M@8 P Q@6 R S Q@6 R S Q@6 R S
>`.pickRestart({
  A: "~@27 x ~@4", B: "~@3 x ~@7 x ~@15 x ~@4", C: "~@3 x ~@23 x ~@4", D: "~@11 x ~@15 x ~@4",
  E: "~@11 x ~@11 x ~@3 x ~@4", F: "~@11 x ~@7 x ~@12", G: "~@9 x ~@6", H: "~ x ~@5 x ~ x ~@6",
  I: "~ x ~@5 x ~ x ~@3 x ~@2", J: "~ x ~@7 x ~@6", K: "~ x ~@3 x ~@10", L: "~@9 x ~@15 x ~@6",
  M: "~@5 x ~@3 x ~@15 x ~@6", N: "~@5 x ~@3 x ~@7 x ~@14", O: "~@9 x ~@22", P: "~ x ~@30", Q: "x ~@3 x ~@2 x",
  R: "x!2 ~@2", S: "x",
})).gain(0.46)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B C B C D C E A F G F G F@7 H I J@2 K L J M N I J L J L J@6 O ~ P Q@2 R P Q S T P U P U P Q@6 V ~ W@3 X W@2 Y Z W@3
  X W@2 Y Z W@3 X W@2 Y Z
>`.pickRestart({
  A: "~@27 x ~@3 x", B: "~ x ~ x ~@3 x ~ x ~@5 x ~ x ~ x ~@3 x ~ x ~ x ~@3 x",
  C: "~ x ~ x ~@3 x ~ x ~ x ~@3 x ~ x ~@5 x ~ x ~ x ~@3 x",
  D: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~ x ~ x ~@3 x ~ x ~ x ~@3 x", E: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~ x ~ x ~@3 x ~ x ~@6",
  F: "~@7 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x", G: "~@7 x ~@3 x ~@15 x ~@3 x", H: "~@3 x ~@28", I: "~@9 x ~ x ~@3 x",
  J: "~ x ~ x ~@3 x ~ x ~ x ~@3 x", K: "~ x ~ x ~@3 x ~ x ~@5 x", L: "~ x ~@7 x ~ x ~@3 x",
  M: "~ x ~ x ~@3 x ~@3 x ~@3 x", N: "~ x ~ x ~ x ~@3 x ~@6", O: "~ x ~ x ~@3 x ~ x ~ x ~ x ~@2",
  P: "~@9 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2", Q: "~@5 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2",
  R: "~@5 x ~@3 x ~@11 x ~@3 x ~@6", S: "~@5 x ~@7 x ~@7 x ~@3 x ~@3 x ~@2", T: "~ x ~@7 x ~@22",
  U: "~@5 x ~@3 x ~@3 x ~@7 x ~@3 x ~@6", V: "~@5 x ~@3 x ~@3 x ~@3 x ~@14", W: "x!2 ~ x!3 ~ x", X: "x ~@2 x!2 ~@3",
  Y: "~ x ~ x!4 ~", Z: "x",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@7 [~@27 x ~@4] [~@3 x ~@28] ~@3 [~@27 x ~@4] ~@3 [~@27 x ~@4] ~@70>").gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@20 [~@7 x ~@24] ~@66>").gain(0.36)

stack(
  bass, piano, overdriven_guitar, overdriven_guitar_2, piano_2, overdriven_guitar_3, piano_3, acoustic_guitar_steel,
  piano_4, acoustic_guitar_steel_2, overdriven_guitar_4, kick, snare, hihat, crash, ride
)

More by Jethro Tull