Strudelify

Let's Live for Today

The Grass Roots

KeyE majorTempo117 bpm
0:00/0:00
// Let's Live for Today — The Grass Roots
// 117 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 70, 4/4 at bar 71) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar2, dist guitar.
setcpm(117/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.

// bass · electric bass pick · "bass"
const bass = note(`<
  A B A B A B C D C D C D C D E ~ F G F G H I F J A B C D C D C D C D E F G F G H I F J A B A B A B K L K L K L K L K L
  K L M@5 N@8 O P@7
>`.pickRestart({
  A: "c#2", B: "e2", C: "c#2@2 ~ g#1 c#2 c#2@3", D: "e2@2 ~ b1 e2 e2@3", E: "c#2 ~@3", F: "c#1", G: "g#1", H: "a1!4",
  I: "b1!4", J: "~@2 e2 d#2, g#1", K: "c#2@6 ~@3 g#1@3 c#2@3 c#2@4 ~@2 b1@3", L: "e2@6 ~@3 b1@3 e2@3 e2@4 ~@2 b1@3",
  M: "[c#2@6 ~@3 g#1@2 ~ c#2@2 c#2@4 ~@2 b1@2 ~ e2@6 ~@3 b1@2 ~ e2@2 e2@4 ~@2 b1@2 ~ c#2@6 ~@3 g#1@2 ~ c#2@2 c#2@4 ~@2 b1@2 ~ e2@6 ~@3 b1@2 ~ e2@2 e2@4 ~@2 b1@2 ~ c#2@6 ~@3 g#1@2 ~ c#2@2 c#2@4 ~@2 b1@2 ~ e2@5]/5",
  N: "[~@4 b1@2 ~ e2@2 e2@4 ~@2 b1@2 ~ c#2@23 g#2@3 g#2@3 g#2@3 g#2@3 g#2@3 g#2@3 g#2@3 a1@3 ~ a#1@4 ~ b1@4 c2@4 ~@6 c#1@24 g#1@24 c#1@24 g#1@24 a1@6 a1@5]/8",
  O: "~ a1@6 a1@6 b1@6 b1@5",
  P: "[~ b1@6 b1@6 c#1@24 ~@12 e2@6 d#2@6 c#1@24 g#1@24 c#1@24 g#1@24 ~@11, ~@37 g#1@24 ~@107]/7",
})).s("gm_electric_bass_pick").gain(0.5)

// chords · acoustic guitar steel · "guitar1"
const acoustic_guitar_steel = note(`<
  A@4 B C B C B C B C B C D ~ E F E F G H E ~ B C B C B C B C B C D E F E F G H E I J@4 K L K L K L K L K L K L K L M@5
  N O@3 P Q P R@3 ~ S P Q P T
>`.pickRestart({
  A: "[[c#3,g#3,c#4,e4]@23 ~ [b3,e4,g#4]@23 ~ [g#3,c#4,e4]@23 ~ [b3,e4,g#4]@24, ~@23 [b2,e3]@24 c#3@24 [b2,e3]@24 ~]/4", // C#m E C#m E E5
  B: "~@3 e3@2 c#3@2 ~, [c#2,g#2]", C: "~@3 [g#2,b2] ~@2 b2 ~@2 [g#2,b2,e3]@6 e3@3 e3@3 e3@3, e2", D: "[c#2,g#2]",
  E: "[c#3,g#3,c#4,e4]@2 [c#3,g#3,c#4,e4]@2 [c#3,c#4,e4,g#4] [c#3,e4,g#4] [c#3,c#4,e4,g#4]@2", // C#m
  F: "[g#2,d#3,g#3,b3]@2 [g#2,d#3,g#3,b3]@2 [g#2,g#3,b3,d#4] [g#2,b3,d#4] [g#2,g#3,b3,d#4]@2", // G#m
  G: "~@7 a3, a2!2, ~ a3@4 c#4@2 ~, ~ e3@2 e3, ~@3 e4@4 ~",
  H: "~@7 d#4, b2!2, ~ b3@4 d#4@2 ~, ~ f#3@2 c#4, ~@3 f#4@4 ~", I: "[g#2,d#3,g#3,b3]!2 [e2,g#3,b3] [g#3,b3,d#4]",
  J: "[e4@23 ~ [b3,e4,g#4]@23 ~ [g#3,c#4,e4]@23 ~ [b3,e4,g#4]@24, ~@23 [b2,e3]@24 c#3@24 [b2,e3]@24 ~]/4", // E C#m E E5
  K: "[g#3,c#4,e4]@3 [g#3,c#4,e4]@3 [c#3,g#3,c#4,e4] ~@2 [g#3,c#4,e4]@3 [g#3,c#4,e4]@3 [g#3,c#4,e4]@3 [c#3,g#3,c#4,e4] ~@2 [g#3,c#4,e4]@3, c#3 ~ c#3 ~", // C#m
  L: "[b3,e4,g#4]@3 [b3,e4,g#4]@3 [e3,b3,e4,g#4] ~@2 [b3,e4,g#4]@3 [b3,e4,g#4]@3 [b3,e4,g#4]@3 [e3,b3,e4,g#4] ~@2 [b3,e4,g#4]@3, e3 ~ e3 ~", // E
  M: "[[g#3,c#4,e4]@3 [g#3,c#4,e4]@3 [c#3,g#3,c#4,e4] ~@2 [g#3,c#4,e4]@3 [g#3,c#4,e4]@2 ~ [c#4,e4]@2 [c#3,g#3] [c#4,e4] ~ [g#3,c#4,e4]@3 [b3,e4,g#4]@3 [b3,e4,g#4]@3 [e3,b3,e4,g#4] ~@2 [b3,e4,g#4]@3 [b3,e4,g#4]@2 ~ [e4,g#4]@2 [e3,b3] [e4,g#4] ~ [b3,e4,g#4]@3 [g#3,c#4,e4]@3 [g#3,c#4,e4]@3 [c#3,g#3,c#4,e4] ~@2 [g#3,c#4,e4]@3 [g#3,c#4,e4]@2 ~ [c#4,e4]@2 [c#3,g#3] [c#4,e4] ~ [g#3,c#4,e4]@3 [b3,e4,g#4]@3 [b3,e4,g#4]@3 [e3,b3,e4,g#4] ~@2 [b3,e4,g#4]@3 [b3,e4,g#4]@2 ~ [e4,g#4]@2 [e3,b3] [e4,g#4] ~ [b3,e4,g#4]@3 [g#3,c#4,e4]@3 [g#3,c#4,e4]@3 [c#3,g#3,c#4,e4] ~@2 [g#3,c#4,e4]@3 [g#3,c#4,e4]@2 ~ [c#4,e4]@2 [c#3,g#3] [c#4,e4] ~ [g#3,c#4,e4]@3 ~ g#4@2 [b3,e4,g#4]@2, c#3@6 ~@6 c#3@5 ~@6 e3@6 ~@6 e3@5 ~@6 c#3@6 ~@6 c#3@5 ~@6 e3@6 ~@6 e3@5 ~@6 c#3@6 ~@6 c#3@5 ~@6 e3@5, ~@14 g#3@3 ~@20 b3@3 ~@20 g#3@3 ~@20 b3@3 ~@20 g#3@3 ~@6 [b3,e4]@3 ~@2]/5", // C#m C#5 C#m E E5 E C#m C#5 …
  N: "~ [e3,b3,e4,g#4] ~@2 [b3,e4,g#4]@3 [b3,e4,g#4]@2 ~ [e4,g#4]@2 [e3,b3] [e4,g#4] ~@2 g#4@2 ~ e4@2 [g#3,c#4,e4]@3, ~@7 e3@5 ~@6 c#3@6, ~@3 b3 ~ [b3,e4] [g#3,c#4] ~", // E E5 E C#m E5 C#5
  O: "[[g#3,c#4,e4]@3 [g#3,c#4,e4]@3 [g#3,c#4,e4]@2 c#4 [c#4,e4]@2 ~ [g#3,c#4,e4]@5 [g#2,d#3,g#3]@3 [g#2,d#3,g#3]@3 [g#2,d#3,g#3]@3 [g#2,d#3,g#3]@3 [g#2,d#3,g#3]@3 [g#2,d#3,g#3]@3 [g#2,d#3]@3 [a2,e3,a3]@3 ~ [a#2,f3,a#3]@4 ~ [b2,f#3,b3]@4 [c3,g3,c4]@4 ~@6 [c#3,g#3,c#4,e4]@6 [c#3,g#3,c#4,e4]@5, c#3@6 c#3@5 c#3@6 ~@55, ~@8 g#3@3 ~@61]/3", // C#m G#5 A5 A#5 B5 C5 C#m
  P: "~ [c#3,c#4,e4,g#4]@3 [c#3,e4,g#4]@3 [c#3,c#4,e4,g#4]@6 [g#2,d#3,g#3,b3]@6 [g#2,d#3,g#3,b3]@5", // C#m G#m
  Q: "~ [g#2,g#3,b3,d#4]@3 [g#2,b3,d#4]@3 [g#2,g#3,b3,d#4]@6 [c#3,g#3,c#4,e4]@6 [c#3,g#3,c#4,e4]@5", // G#m C#m
  R: "[~ [g#2,g#3,b3,d#4]@3 [g#2,b3,d#4]@3 [g#2,g#3,b3,d#4]@6 ~@21 a3@3 ~@21 d#4@3 ~@11, ~@13 a2@12 a2@12 b2@12 b2@12 ~@11, ~@8 a3@6 c#4@3 ~@3 b3@6 d#4@3 ~@7, ~@19 e3@12 e3@6 ~@6 f#3@12 c#4@6 ~@11, ~@11 e4@6 ~@6 f#4@6 ~@7]/3", // G#m
  S: "~@13 [c#3,g#3,c#4,e4]@6 [c#3,g#3,c#4,e4]@5", T: "~ [g#2,g#3,b3,d#4]@3 [g#2,b3,d#4]@3 [g#2,g#3,b3,d#4]@6 ~@11",
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(1)

// chords · acoustic guitar steel · "guitar2" · G#m E G#m C#5 C#m G#m E G#m
const acoustic_guitar_steel_2 = note(`<
  ~@23
  [[g#3,d#4,g#4,b4]!2 [e3,g#4,b4] [g#4,b4,d#5]]
  ~@51
  [~@13 [c#4,g#4,c#5]@6 [c#4,g#4,c#5]@5]
  [~ [c#4,e5,g#5]@3 [c#4,e5,g#5]@3 [c#5,e5,g#5]@6 [g#3,d#4,g#4,b4]@6 [g#3,d#4,g#4,b4]@5]
  [~ [e3,g#4,b4]@6 [g#4,b4,d#5]@6 ~@11]
  ~@4
>`).s("gm_acoustic_guitar_steel").gain(0.11).pan(0.7)

// chords · electric guitar clean · "elec guitar"
const electric_guitar_clean = note("<~@16 A B A C D E A B ~@11 A B A C D E A B ~@26 F@8 G@3 ~@2>".pickRestart({
  A: "[c#3,g#3,c#4,e4,g#4]", B: "[g#2,d#3,g#3,b3,g#4]", C: "[g#2,d#3,g#3,b3,g#4], c4 ~@3", D: "~ a4@23, [a2,e3,c#4,e4]",
  E: "~ b4@23, [b2,f#3,d#4,f#4]", // B
  F: "[~@13 [c#3,g#3,c#4,e4,g#4]@24 [g#2,d#3,g#3,b3,g#4]@24 [c#3,g#3,c#4,e4,g#4]@24 [g#2,d#3,g#3,b3,g#4]@24 [a2,e3,c#4,e4,a4]@24 [b2,f#3,d#4,f#4,b4]@24 [c#3,g#3,c#4,e4,g#4]@24 [g#2,d#3,g#3,b3,g#4]@11, ~@85 c4@6 ~@101]/8", // C#m G#m C#m G#m A B C#m G#m
  G: "[~@13 [c#3,g#3,c#4,e4,g#4]@24 [g#2,d#3,g#3,b3,g#4]@24 ~@11]/3", // C#m G#m
})).s("gm_electric_guitar_clean").gain(0.32).pan(1)

// chords · electric guitar clean · "elec guitar" · soft notes
const electric_guitar_clean_2 = note("<~@79 A@3>".pickRestart({
  A: "[~@13 [c#3,g#3,c#4,e4,g#4]@24 [g#2,d#3,g#3,b3,g#4]@24 ~@11, ~@37 c4@6 ~@29]/3", // C#m G#m
})).s("gm_electric_guitar_clean").gain(0.08).pan(1)

// bass · distortion guitar · "dist guitar"
const bass_2 = note("<~@23 A ~@19 B ~@31 C@2 D ~@4>".pickRestart({
  A: "[g#1,g#2]@2 [e1,e2] [d#1,d#2]", B: "[c#1,c#2]", C: "[~@13 [c#1,c#2]@18 [c#1,c#2]@6 [g#1,g#2]@11]/2",
  D: "~ [e1,e2]@6 [d#1,d#2]@6 ~@11", // E D#
})).s("gm_distortion_guitar").gain(0.4).pan(0)

// chords · church organ · "organ"
const church_organ = note("<~@16 A B A C D E A B ~@11 A B A C D E A B ~@26 F@6 G@5 ~@2>".pickRestart({
  A: "[c#4,g#4,c#5,e5,g#5]", B: "[g#3,d#4,g#4,b4,g#5]", C: "[g#3,d#4,g#4,b4,g#5], c5 ~@3", D: "~ a5@23, [a3,e4,c#5,e5]",
  E: "~ b5@23, [b3,f#4,d#5,f#5]", // B
  F: "[~@13 [c#4,g#4,c#5,e5,g#5]@24 [g#3,d#4,g#4,b4,g#5]@24 [c#4,g#4,c#5,e5,g#5]@24 [g#3,d#4,g#4,b4,g#5]@24 [a3,e4,c#5,e5,a5]@24 [b3,f#4,d#5,f#5,b5]@11, ~@85 c5@6 ~@53]/6", // C#m G#m C#m G#m A B
  G: "[~@13 [c#4,g#4,c#5,e5,g#5]@24 [g#3,d#4,g#4,b4,g#5]@24 [c#4,g#4,c#5,e5,g#5]@24 [g#3,d#4,g#4,b4,g#5]@24 ~@11]/5", // C#m G#m C#m G#m
})).s("gm_church_organ").gain(0.04).pan(1)

// chords · church organ · "organ" · soft notes
const church_organ_soft = note("<~@79 A@3>".pickRestart({
  A: "[~@13 [c#4,g#4,c#5,e5,g#5]@24 [g#3,d#4,g#4,b4,g#5]@24 ~@11, ~@37 c5@6 ~@29]/3", // C#m G#m
})).s("gm_church_organ").gain(0.01).pan(1)

// other · lead 5 charang · "sitar"
const lead_5_charang = note("<A@5 ~@38 A@5 ~@34>".pickRestart({
  A: "[c#5@6 ~@3 c#5@3 ~@12 b4@6 ~@3 b4@3 ~@12 c#5@6 ~@3 c#5@3 ~@12 b4@6 ~@3 b4@3 ~@8 d#5@6 ~@22, ~@6 c#5@3 ~ c#5@3 ~@5 b4@3 ~ d#5@3 ~@5 c#5@3 ~ c#5@3 ~@5 b4@3 ~@15, ~@8 d#5@3 ~@9 e5@3 ~@9 d#5@3 ~@9 e5@3 ~@13]/5",
})).s("gm_lead_5_charang").gain(0.14).pan(0)

// other · alto sax
const alto_sax = note("<~@55 A@2 B C B C ~ D@2 E@2 F G ~@14>".pickRestart({
  A: "~@9 f#4@3 e4@4 ~@8", B: "~@4 g#4!2 g#4@2", C: "f#4 e4 ~@2",
  D: "[~@5 e5@2 ~ e5@3 e5@5 e5@2 ~ e5@3 f#5@6 e5@6 ~@14]/2", E: "[~@3 e5@2 ~ e5@3 e5@5 e5@2 ~ e5@3 f#5@6 e5@6 ~@16]/2",
  F: "~ e5@2 ~ e5@3 e5@5 e5@2 ~ e5@3 f#5@6", G: "e5 ~@3",
})).s("gm_alto_sax").gain(0.24).pan(1)

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

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@4 B A@9 ~@2 A@8 B A@9 ~ A@8 ~@2 A@16 ~@8 C D@11 E>".pickRestart({
  A: "x!4", B: "~ x!3", C: "~@13 x ~@5 x ~@4", D: "~ x ~@5 x ~@5 x ~@5 x ~@4", E: "~ x ~@5 x ~@16",
})).gain(0.62)

// drums · mid tom
const mid_tom = s("mt").struct("<~@67 [~@17 x ~@2 x ~@2 x] [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@4 x] [~ x ~@6] ~@12>")
  .gain(0.78)

// drums · open hat
const open_hat = s("oh").struct("<~@61 A B C D E F G ~@14>".pickRestart({
  A: "~@3 x ~@5 x ~@4 x ~@5 x ~@3", B: "~@2 x ~@5 x ~@4 x ~@5 x ~@4", C: "~ x ~@5 x ~@4 x ~@5 x ~@5",
  D: "x ~@5 x ~@4 x ~@5 x ~@5 x", E: "~@5 x ~@4 x ~@5 x ~@5 x ~", F: "~@4 x ~@4 x ~@5 x ~@5 x ~@2",
  G: "~@3 x ~@4 x ~@5 x ~@9",
})).gain(0.78)

// drums · high tom
const high_tom = s("ht").struct("<~@67 [~@17 x ~@2 x ~@3] ~@14>").gain(0.78)

// drums · crash
const crash = s("cr").struct(`<
  ~@14 A ~ B C D C ~@2 D C ~@10 A B C D C ~@2 D C ~@26 E F G F H ~ I F J F ~@3
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "~ x ~ x", D: "x!2 ~ x", E: "~@13 x ~@10", F: "~@7 x ~@11 x ~@4", G: "~@7 x ~@5 x ~@5 x ~@4",
  H: "~@7 x ~@16", I: "~@13 x ~@5 x ~@4", J: "~@7 x ~@5 x ~@10",
})).gain(0.7)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@79 [~@7 x ~@5 x ~@5 x ~@4] [~@7 x ~@11 x ~@4] [~@7 x ~@16]>").gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16 A B A B A B A B ~@11 A B A B A B A B C@2 ~@16 D E F G H I J K L M N M N M N M N M ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~ x!3 ~", C: "~@3 x", D: "~@3 x ~@5 x ~@4 x ~@5 x ~@3", E: "~@2 x ~@5 x ~@4 x ~@5 x ~@4",
  F: "~ x ~@5 x ~@4 x ~@5 x ~@5", G: "x ~@5 x ~@4 x ~@5 x ~@5 x", H: "~@5 x ~@4 x ~@5 x ~@5 x ~",
  I: "~@4 x ~@4 x ~@5 x ~@5 x ~@2", J: "~@3 x ~@4 x ~@5 x ~@2 x ~@2 x ~@2 x",
  K: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@4 x", L: "~@3 x ~@15 x ~@4", M: "~@7 x ~@11 x ~@4",
  N: "~ x ~@2 x ~@2 x ~@11 x ~@4",
})).gain(0.78)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@79 [~ x ~@2 x ~@2 x ~@11 x ~@4] [~@7 x ~@11 x ~@4] [~ x ~@2 x ~@2 x ~@16]>")
  .gain(0.23)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, electric_guitar_clean, electric_guitar_clean_2, bass_2,
  church_organ, church_organ_soft, lead_5_charang, alto_sax, kick, snare, pedal_hat, mid_tom, open_hat, high_tom, crash,
  crash_soft, tambourine, tambourine_soft
)

More by The Grass Roots