Strudelify
Living In The Past cover art

1972 · Living in the Past

Living In The Past

Jethro Tull

KeyC majorTempo145 bpm
0:00/0:00
// Living In The Past — Jethro Tull
// 145 bpm, 5/4, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 3 "Guitar | Jethro Tull" named as a guitar, played on electric guitar clean (its clavinet patch is not one)
// note: Full arrangement: all 98 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/5)

// 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 · flute · "Flute | Past"
const flute = note(`<
  ~@3 A B A B C D C E F G H I J K L M N O ~@16 A B A B C D C D F G H I P K Q M R S ~@16 T B U B C D C E V W X Y Z AA AB
  Y AC AD AE AF AG AF AG AF AH AI@2
>`.pickRestart({
  A: "g4@14 f4@5 a#4@5", B: "a4@5 g4@2 g4@17", C: "c5@14 a#4@5 a4@2 ~ a#4 a4", D: "g4@5 f4@2 g4@17",
  E: "g4@5 f4@2 g4@12 ~@5", F: "g4@2 f4@2 ~ d4@2 g4@2 ~ f4@2 d4@2 f4@5 e4@5",
  G: "c4@2 c4@2 ~ c4@2 c4@2 ~@3 c4@2 c4@5 c4@5", H: "d4@5 ~@2 d4@5 ~@5 d4!2 e4@2 ~ f4@2", I: "e4@2 d4@5 d4@2 ~@15",
  J: "g4@2 f4@2 ~ e4@2 f4@5 f4@2 e4@2 ~ e4@2 c4@2 ~ e4@2", K: "d4@2 d4@2 ~ d4@2 d4@5 ~@12",
  L: "d4@2 d4@5 d4@2 ~@8 d4!2 f4@2 ~ g4@2", M: "f4@2 d4@2 ~@3 d4@2 ~@8 d4!2 f4@2 ~ g4@2",
  N: "g#4 a4 g4 ~ f4 g4@2 f4@2 ~@3 f4@2 d4@2 ~ c4@2 d4@5", O: "f4@5 d4@2 d4@5 c4@2 d4@5 ~@5",
  P: "g4@2 f4@2 ~ e4@2 f4@5 f4@2 e4@2 ~ e4@2 c4@2 ~ f4 e4", Q: "d4@2 d4@2 ~@3 d4@2 ~@8 d4!2 f4@2 ~ g4@2",
  R: "g#4 a4 g4 ~ f4 g4@2 f4@2 ~ d4@2 f4@2 d4@5 d4@5", S: "f4@5 d4@2 d4@5 c4@2 d4@5 d4@5", T: "g4@14 f4@2 ~@3 a#4@5",
  U: "g4@14 f4@2 ~@3 a#4@2 ~@3", V: "g4@2 f4@2 ~ d4@2 g4@2 ~ f4@2 d4@2 f4@5 a4@2 ~@3",
  W: "g4@7 g4@7 ~@3 g4@2 a4@2 ~ a4@2", X: "a#4@5 c5@2 c5@7 ~@5 a5@2 ~ a5 a#5",
  Y: "a5@5 g5@2 g5@7 ~@3 c6@2 a#5@2 ~ c6 a#5", Z: "g5@2 f5@2 ~ g5@2 g5@2 ~ g5@5 ~@2 c6@2 a#5@2 ~ c6 a#5",
  AA: "g5@2 f5@2 ~ g5@2 g5@2 ~ g5@5 ~@2 f5 e5 f5@2 ~ e5@2", AB: "a#4@5 c5@2 c5@7 ~@5 c5@2 ~ a5 a#5",
  AC: "g5@2 f5@2 ~ g5 ~ g5@7 ~@3 c6@2 a#5@2 ~ c6 a#5", AD: "f5@5 g5 ~ g5@7 ~@3 f5 e5 f5@2 ~ e5@2",
  AE: "c5@2 a#4@2 ~ c5@2 c5@7 ~@10", AF: "~@5 c5!2 ~@4 a#4 c5@2 c5 ~@2 a#4 ~ c5 ~@2 a#4 ~, ~@5 c5 ~@6",
  AG: "c5 a#4 a4 ~ a#4 a4 g4 a4 g4 ~ f4@2 g4 ~ g4@2 ~ f4@2 g4@5",
  AH: "~ c5 ~ a#4 a4 ~ a#4 a4 ~ g4 a4 ~ g4 f4@3 g4 ~@2 g4@3 f4@2", AI: "[~ g4@35 ~@12]/2",
})).s("gm_flute").gain(0.45).pan(0.7)

// chords · electric guitar clean · "Guitar | Jethro Tull"
const electric_guitar_clean = note(`<
  ~@3 A@4 B C B C D E F G F H I@3 J K@7 L M@4 K@3 N O@4 B C B C D E F@3 H P@3 J K@7 L M@4 K@3 N O@4 B C B C D K@15 Q R ~
>`.pickRestart({
  A: "[c4,d#4,g4]@2 [c4,d#4,g4,c5]@2 ~@3 [c4,d#4,g4,c5]@2 ~ [c4,d#4,g4,c5]@2 [c4,d#4,g4,c5]@2 [f3,c4,f4,a4]@5 [f3,c4,f4,a4,c5]@2 ~@3", // Cm F
  B: "[c4,f4,a4]@2 [c4,f4,a4]@2 ~@3 [c4,f4,a4]@2 ~ [c4,f4,a4]@4 [a#3,d#4,g4]@5 [a#3,d4,f4,a#4]@5", // F D# A#
  C: "[c4,d#4,g4]@2 [c4,d#4,g4,c5]@2 ~@3 [c4,d#4,g4,c5]@2 ~ [c4,d#4,g4,c5]@4 [c4,d#4,g4]@5 [c4,d#4,g4]@5", // Cm
  D: "[c4,d#4,g4,c5] ~@11", // Cm
  E: "[f3,c4,f4,a4]@2 [f3,c4,f4,a4]@2 ~@3 [f3,c4,f4,a4]@5 [f3,c4,f4,a4]@2 [f3,c4,f4,a4]@2 ~ [f3,c4,f4,a4]@2 [f3,c4,f4,a4]@5", // F
  F: "[g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 ~@3 [g3,d4,g4,b4]@2 ~@3 [g3,d4,g4,b4,d5]@2 [g3,d4,g4,b4,d5]@5 [g3,d4,g4,b4,d5]@5", // G
  G: "[g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 ~@3 [g3,d4,g4,b4]@2 ~@3 [g3,d4,g4,b4]@2 [g3,d4,g4,b4,d5]@5 [g3,d4,g4,b4,d5]@5", // G
  H: "[g3,d4,g4,b4,d5]@2 [g3,d4,g4,b4,d5]@5 [g3,d4,g4,b4,d5]@2 ~ [g3,d4,g4,b4,d5]@4 [g3,d4,g4,b4,d5]@5 [g3,d4,g4,b4,d5]@5", // G
  I: "[d4,f#4,a4,d5]@2 [d4,f#4,a4,d5]@2 ~@3 [d4,f#4,a4,d5]@5 [d4,f#4,a4,d5]@2 [g3,d4,g4,b4]@5 [g3,d4,g4,b4,d5]@5", // D G
  J: "[d4,f#4,a4,d5]@2 [d4,f#4,a4,d5]@2 ~@3 [d4,f#4,a4,d5]@5 [d4,f#4,a4,d5]@2 [d4,f#4,a4,d5]@5 [d4,f#4,a4,d5]@5", // D
  K: "[c4,e4,g4,c5]@2 [c4,e4,g4,c5]@5 [c4,e4,g4,c5]@2 ~ [c4,e4,g4,c5]@2 [c4,e4,g4,c5] ~ [a#3,d4,f4,a#4]@5 [a3,c4,f4,a4]@5", // C A# F
  L: "[c4,e4,g4,c5]@2 [c4,e4,g4,c5]@5 [c4,e4,g4,c5]@2 ~ [c4,e4,g4,c5]@4 [c4,e4,g4,c5]@5 [c4,e4,g4,c5]@5", // C
  M: "[f3,c4,f4,a4]@2 [f3,c4,f4,a4]@5 [f3,c4,f4,a4]@2 ~ [f3,c4,f4,a4]@2 [f3,c4,f4,a4] ~ [a#3,d#4,g4]@5 [a#3,d4,f4,a#4]@5", // F D# A#
  N: "[c4,e4,g4,c5]@2 [c4,e4,g4,c5]@5 [c4,e4,g4,c5]@2 ~ [c4,e4,g4,c5]@2 [c4,e4,g4,c5] ~ [c4,e4,g4,c5]@5 [c4,e4,g4,c5]@5", // C
  O: "[c4,d#4,g4]@2 [c4,d#4,g4,c5]@2 ~@3 [c4,d#4,g4,c5]@2 ~ [c4,d#4,g4,c5]@2 [c4,d#4,g4,c5]@2 [f3,c4,f4,a4]@5 [f3,c4,f4,a4]@2 ~@3", // Cm F
  P: "[d4,f#4,a4,d5]@2 [d4,f#4,a4,d5]@2 ~@3 [d4,f#4,a4,d5]@5 [d4,f#4,a4,d5]@2 [g3,d4,g4,b4,d5]@5 [g3,d4,g4,b4,d5]@5", // D G
  Q: "~ [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@6 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5] ~@2 [a#3,d4,f4,a#4]@5", // C A#
  R: "~ [a3,c4,f4,a4]@6 ~@17", // F
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.3)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@20 A B C D E B F D G H@4 B C D I J@2 ~@7 K L@3 M N@3 O P Q R S T U V W X Y@3 Z AA Z AB ~@9 AC AD@2 AE AC AD@2 AE
  AC@6 AF AG AH@2
>`.pickRestart({
  A: "~@19 c6@5", B: "c5@7 c5@7 a#4@5 a4@5", C: "g4@7 g4@2 ~ a4@4 a#4@5 a4@5", D: "g4@7 g4@2 ~ a4@4 d#4@5 d4@5",
  E: "c4@7 a3@7 ~@8 a#4@2", F: "g4@7 f4@2 ~ g4@4 a#4@5 a4@5", G: "c4@7 a3@7 e4@2 ~@3 e4@2 ~@3",
  H: "f4@2 f4@2 ~@3 f4!2 ~ f4@4 d#4@2 ~@3 d4@2 ~@3", I: "c4@7 a3@7 ~@10", J: "[g4@29 ~@19]/2", K: "f4",
  L: "g4@14 f4@5 e4@2 ~ f4@2", M: "g4", N: "f#4@2 f#4@2 ~@3 f#4@2 ~ f#4@4 g4@2 ~@3 g4@2 ~@3",
  O: "f#4@2 f#4@2 ~@3 f#4@2 ~ f#4@4 f#4@2 ~@3 f#4@2 ~@3", P: "[e4,g4]@7 [e4,g4]@7 f4@5 a4@5",
  Q: "[e4,g4]@7 [e4,g4]@7 f4@5 d4@5", R: "e4@7 e4@7 f4@5 a4@5", S: "g4@7 g4@7 f4 ~ e4 f4 e4 f4 ~@2 d4 ~",
  T: "[e4,g4]@5 [e4,g4]@5 f4@7 a4@7", U: "[e4,g4]@5 [e4,g4]@5 f4@7 d4@7", V: "e4@5 e4@5 f4@7 a4@7",
  W: "g4@5 g4@5 g4@7 g4@7", X: "f4@5 f4@5 d#4@4 ~@3 d4@4 ~@3", Y: "f4@7 f4@7 d#4@2 ~@3 d4@2 ~@3",
  Z: "e4@7 e4@7 f4@2 ~@3 a4@2 ~@3", AA: "g4@7 g4@7 f4@2 ~@3 d4@2 ~@3", AB: "g4@7 g4@7 g4@2 ~@3 g4@2 ~@3",
  AC: "c6@2 a#5@2 ~ g5@2 c6@2 ~ a#5@2 g5@2 a#5@2 ~ g5@2 d6 c6 ~ a#5@2",
  AD: "g5@2 g5@2 ~ g5@2 g5@2 ~ g5@2 g5@2 g5@2 ~ g5@2 g5!2 ~ g5@2",
  AE: "c6@2 a#5@2 ~ g5@2 c6@2 ~ a#5@2 g5@2 a#5@2 ~ c6@2 a#5@2 ~ g5@2",
  AF: "c6@2 a#5@2 ~ g5@2 c6@2 ~ a#5@2 g5@2 a#5@2 ~ g5@2 d6 ~ c6 a#5@2",
  AG: "~ c6@3 a#5@3 g5@3 c6@3 a#5@3 g5@3 a#5@3 g5@2", AH: "[~ d6 ~ c6 a#5@35 ~@9]/2",
})).s("gm_string_ensemble_1").gain(0.45).pan(0.7)

// other · drawbar organ · "Organ"
const drawbar_organ = note("<~@71 A B C D E F G F H I ~@15 J@2>".pickRestart({
  A: "[c4,g4]@4 ~@10 a#3@2 ~@3 d#4@2 ~@3", B: "d4@2 ~@3 c4@2 c4@2 ~@15", C: "a#3@2 c4@12 a#3@5 d#4@5",
  D: "d4@5 c4@2 c4@17", E: "e4@2 f4@12 d#4@5 d4@5", F: "c4@5 a#3@2 c4@17", G: "e4@2 f4@12 d#4@5 d4@2 ~ d#4 d4",
  H: "c4@2 a#3@2 ~ g3@2 c4@2 ~ a#3@2 g3@2 a#3@5 d4@5", I: "c4@7 ~@5",
  J: "[~@14 c5@6 g4@6 e4@6 [c4,d4] b3 a3 g3 [e3,f3] d3 ~@10]/2", // Csus2 Fmaj7
})).s("gm_drawbar_organ").gain(0.45).pan(0.8)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@6 B C B C D E F G@3 H@3 I J@3 K@2 J@2 L M N@3 O@3 P Q@4 R C R C D E F S@3 H@3 T J@3 K@2 J@2 L M N@3 O@3 P Q U@3 V
  C V C J@7 O@2 J@6 W X Y ~
>`.pickRestart({
  A: "c3@2 g2@2 ~@3 c2@2 ~ d#2@2 g2@2 f2@5 f3@2 ~@3", B: "f2@2 f2@2 ~@3 f2@2 ~ c3@4 d#3@5 a#2@2 ~@3",
  C: "c3@2 g2@2 ~@3 c2@2 ~ d#2@2 g2@2 c3@5 g2@2 ~@3", D: "c3 ~@11", E: "f2@2 f2@2 ~@3 c2@2 ~ f2@2 c2@2 f2@5 f2@2 ~@3",
  F: "g2@2 g2@2 ~@3 d2@2 ~ g2@2 d2@2 g2@5 g2@2 ~@3", G: "g2@2 g2@2 ~@3 d2@2 ~ g2@2 d2@2 d3@5 d3@5",
  H: "d3@2 d3@2 ~@3 a2@2 ~ d3@2 a2@2 g2@5 b2@2 ~@3", I: "d3@2 d3@2 ~@3 a2@2 ~ d3@2 a2@2 d3@5 d3@2 ~@3",
  J: "c3@2 g3@2 ~@3 e3@2 ~ d3@2 c3@2 a#2@5 f3@2 ~@3", K: "c3@2 c3@2 ~@3 e3@2 ~ d3@2 c3@2 a#2@5 f3@2 ~@3",
  L: "c3@2 g3@2 ~@3 c3@2 ~ c3@2 c3@2 c3@5 c3@5", M: "f2@2 c3@5 f2@2 ~ a2@2 c3@2 d#3@5 a#2@5",
  N: "f2@2 c3@5 f2@2 ~ c3@2 d#3@5 a#2@5 ~@2", O: "c3@2 c3@2 ~@3 g2@2 ~ c3@4 a#2@5 a2@2 ~@3",
  P: "c3@2 c3@2 ~@3 g2@2 ~ c3@4 c3@2 ~@3 c3@2 ~@3", Q: "c3@2 g2@2 ~@3 c2@2 ~ d#2@2 g2@2 f2@5 c3@2 ~@3",
  R: "f2@2 f2@2 ~@3 f2@2 ~ c3@2 f2@2 d#3@5 a#2@2 ~@3", S: "g2@2 g2@2 ~@3 d2@2 ~ g2@2 d2@2 d3@5 d3@2 ~@3",
  T: "d3@2 d3@2 ~@3 a2@2 ~ d3@2 a2@2 d3@2 ~@3 d3@2 ~@3", U: "c3@2 g2@2 ~@3 c2@2 ~ d#2@2 g2@2 f2@5 f3@5",
  V: "f2@2 c3@2 ~@3 f2@2 ~ c3@2 f2@2 d#3@5 a#2@5", W: "c3@2 g3@2 ~@3 e3@2 ~ d3@2 c3@2 a#2@5 f3@3 ~@2",
  X: "~ c3@3 g3@3 ~@3 e3@3 d3@3 c3@3 a#2@5", Y: "~ f3@3 ~@4 c2@6 ~@10",
})).s("gm_electric_bass_finger").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A@4 B A@3 B A@7 B A@7 B A@8 C A@4 B A@3 B A@3 B A@3 B A@3 B A@3 B A@8 D B A E A F B@2 A@2 B@6 G H I
>`.pickRestart({
  A: "~@2 x ~@7 x ~ x ~@4 x ~@6", B: "~ x ~@3 x!2 ~@5", C: "x ~@18 x ~@4", D: "x", E: "~ x ~@10",
  F: "~@2 x ~@7 x ~ x ~@6 x ~@4", G: "~@4 x ~@8 x ~@2 x ~@7", H: "~@11 x ~@12", I: "~@5 x ~@18",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A@8 B A@4 C A@3 D A@7 E A@7 F A@5 G A@2 H A@4 C A@3 I A@3 I A@3 D A@3 F A@3 I A@8 B D J K A J F J A@2 E I F I F I
  L M@2
>`.pickRestart({
  A: "x ~@6 x ~@6 x ~@4 x ~@4", B: "x ~@6 x ~@4", C: "x ~@6 x ~@6 x ~ x!5 ~ x!2", D: "x ~@6 x ~@6 x ~ x!2 ~@6",
  E: "x ~@6 x ~@16", F: "x ~@6 x ~@6 x ~ x ~@7", G: "x ~@4 x ~ x ~@6 x ~@4 x ~@4", H: "~@7 x ~@4",
  I: "x ~@6 x ~@6 x ~ x!3 ~@5", J: "x ~@6 x ~@6 x ~@9", K: "x ~@6 x ~@2 x!4 ~@10", L: "~ x ~@8 x ~@8 x ~ x ~@2",
  M: "~ x ~",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<A ~@2 B@8 ~@27 C B@6 ~ B@5 ~@21 B@7 ~@19>".pickRestart({
  A: "x ~@4 x ~@4 x ~ x ~ x ~ x!2 ~ x ~@2 x!2", B: "x ~ x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~@2 x ~",
  C: "~@2 x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~@2 x ~",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A ~@8 B ~@7 C ~@7 C ~@8 D ~@12 E ~@7 E ~@3 A ~@8 D E B F ~@2 E G ~@2 H I E I E ~ J K ~
>`.pickRestart({
  A: "~@19 x ~@4", B: "~@11 x", C: "~@19 x ~@2 x ~", D: "~@17 x ~@6", E: "~@22 x!2", F: "~@19 x!2 ~ x!2",
  G: "~@17 x ~ x ~@2 x ~", H: "~@19 x!2 ~ x ~", I: "~@23 x", J: "x", K: "~@2 x!2 ~@8",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@11 A ~@8 B ~@7 C ~@7 D ~@8 E ~@8 F ~@3 G ~@3 H ~@3 I ~@12 J K G C ~@2 I A ~@2 C G@2 L M N O P ~
>`.pickRestart({
  A: "~@17 x ~@6", B: "~@19 x ~@4", C: "~@14 x ~ x!3 ~@5", D: "~@17 x!2 ~@5", E: "~@14 x ~@4 x ~@4",
  F: "~@19 x!2 ~ x!2", G: "~@19 x!2 ~@3", H: "~@19 x!2 ~ x ~", I: "~@17 x!4 ~@3", J: "~@7 x ~@4", K: "~@18 x!3 ~@3",
  L: "~@10 x!2", M: "~@17 x ~ x!2 ~@3", N: "~@21 x!2 ~", O: "~@11 x", P: "~ x ~ x ~@20",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@11 x ~@33 x ~@33 x ~@17 [~ x ~]>").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@67 B ~@6 C ~@3 D C B ~ B ~@3>".pickRestart({
  A: "~@7 x ~@4", B: "~@19 x ~@4", C: "~@17 x ~@6", D: "~@11 x",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@12 A@5 B@11 ~ B@9 C ~@12 B@21 ~@8 A@10 ~@8>".pickRestart({
  A: "x ~ x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~@2 x ~", B: "x!3 ~ x!5 ~ x!5 ~ x!5 ~ x!2", C: "x",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@2 B@8 C A@16 ~ A@3 ~ A@3 ~ A@8 ~ A@9 ~@16 A ~@26>".pickRestart({
  A: "~@5 x ~ x ~@4 x ~@6 x ~@4", B: "~@5 x ~ x ~@4 x ~@11", C: "x",
})).gain(0.72)

stack(
  flute, electric_guitar_clean, string_ensemble_1, drawbar_organ, bass, kick, snare, hihat, low_tom, mid_tom, crash,
  high_tom, ride, tambourine
)

More by Jethro Tull