Strudelify

Once in a Lifetime

Talking Heads

KeyD majorTempo118 bpm
0:00/0:00
// Once in a Lifetime — Talking Heads
// 118.2 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118.2/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 finger · "OnceInALifetime"
const bass = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C D@2 ~@2
>`.pickRestart({
  A: "~@12 a2@3 ~", B: "e1@2 a1 ~ a1@2 ~@10", C: "a1@2 f#1 ~ f#1@2 ~@10", D: "d1/2",
})).s("gm_electric_bass_finger").gain(0.45)

// other · epiano1
const epiano1 = note(`<
  ~ A B C D E C F G A B C D E C F G E C F G A B C D E C F G A B C D E C F G A B C D E C F G H@2 I H@5 A B C D E C F G
  J@2 K L J@4 A B C D E C F G A B C D E C F G A B C D E C F G J@2 K L J@4 A B C D E C F G A B C D E C F G A B C D E C F
  G A B ~@2
>`.pickRestart({
  A: "~@2 d5 g5 ~@6 d5 g5 ~@4", B: "~@2 d5 g5 ~@6 d5 g5@2 ~@3", C: "~@3 g5@2 ~@5 d5 g5@2 ~@3, ~ d5 ~@6",
  D: "~@2 d5 g5@2 ~@5 d5 g5 ~@4", E: "~@2 d5 g5@2 ~@5 d5 g5@2 ~@3", F: "~@2 d5 g5@2 ~@6 g5 ~@4, ~@5 d5 ~@2",
  G: "~@3 g5@2 ~@6 g5 ~@4, ~ d5 ~@3 d5 ~@2", H: "d5 ~ f#5 d5 ~ f#5 d5 ~ f#5 d5 ~@2 f#5@3 ~",
  I: "d5 ~ f#5 d5 ~ f#5 d5 ~ f#5 d5 ~@2 f#5@4", J: "~@2 f#5 d5 ~ f#5 d5 ~ f#5 d5 ~@2 f#5@2 ~@2",
  K: "~@2 f#5 d5 ~ f#5 d5 ~ f#5 ~ d5 ~ f#5@3 ~", L: "~@2 f#5 d5 ~ f#5 d5 ~ f#5 ~ d5 ~ f#5@2 ~@2",
})).s("gm_epiano1").gain(0.3)

// other · epiano2
const epiano2 = note(`<
  ~ A@5 B A@7 B A@3 B A@7 B A@7 B A@7 B A@2 C@8 A@5 B A@2 ~@8 A@5 B A@7 B A@7 B A@2 ~@8 A@5 B A@7 B A@7 B A@4 ~@2
>`.pickRestart({
  A: "~ g4 ~ g4 ~@5 g4 ~ g4 ~@4", B: "~ g4 ~@2 g4 ~@4 g4 ~ g4 ~@4", C: "~ d5!9 ~@6",
})).s("gm_epiano2").gain(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note("<~ A@8 ~@20 A@8 ~@8 B@3 C@4 D E@8 F@8 ~@8 A@8 ~@8 F@8 ~@28>".pickRestart({
  A: "[g5,a5]/8", B: "~ d5@14 ~", C: "~ d5@13 ~@2", D: "~ d5@11 ~@4", E: "[[g5,a5]@63 ~]/8", F: "[[d5,a5]@127 ~]/8",
})).s("gm_string_ensemble_2").gain(0.2)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@21 A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 E@8 ~@16 A@2 B@2 F@2 D@2 ~@8 A@2 B@2 F@2 D@2 ~@36
>`.pickRestart({
  A: "[~@8 [d4,f#4]@4 [f#4,a4]@2 [d4,f#4]@4 [a3,d4]@3 ~ [a3,d4]@2 [b3,e4]@4 [f#3,b3]@4]/2", // D F#m D D5 E5 B5
  B: "[[e3,a3]@4 ~@4 [d4,f#4]@4 [f#4,a4]@2 [d4,f#4]@4 [a3,d4]@3 ~ [a3,d4]@2 [b3,e4]@4 [f#3,b3]@4]/2", // A5 D F#m D D5 E5 B5
  C: "[[e3,a3]@3 ~@5 [d4,f#4]@4 [f#4,a4]@2 [d4,f#4]@4 [a3,d4]@3 ~ [a3,d4]@2 [b3,e4]@4 [f#3,b3]@4]/2", // A5 D F#m D D5 E5 B5
  D: "[[e3,a3]@3 ~@5 [d4,f#4]@4 [f#4,a4]@2 [d4,f#4]@4 [a3,d4]@3 ~ [a3,d4]@2 [b3,e4]@4 [f#3,b3]@2 ~@2]/2", // A5 D F#m D D5 E5 B5
  E: "a4 ~ a4 ~@2 a4 ~ a4!3 ~ a4 a4@3 ~",
  F: "[[e3,a3]@3 ~@5 [d4,f#4]@4 [f#4,a4]@2 [d4,f#4]@4 ~ a3@3 [a3,d4]@2 [b3,e4]@4 [f#3,b3]@4, ~@18 d4@3 ~@11]/2", // A5 D F#m D D5 E5 B5
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.2)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@45 [~@3 a4!2 ~@10 a4]!8 ~@76>")
  .s("gm_electric_guitar_clean").gain(0.2).pan(0.2)

// chords · electric guitar clean
const electric_guitar_clean_3 = note(`<
  ~@21 A B C D E F G H ~@8 A B C D E F G H I@8 ~@8 J@8 A B C D E F G H ~@8 A B C D E F G H J@8 ~@28
>`.pickRestart({
  A: "~@6 [d5,f#5] ~ [d5,f#5] f#5 [d5,f#5] d5 [d5,f#5] ~ [d5,f#5]!2", // D
  B: "~ d5 [a4,d5] d5 [a4,d5]!2 a4 [a4,d5] [b4,e5]!2 b4 [b4,e5]!2 ~ [b4,e5]!2", // D5 E5
  C: "b4 [a4,d5]!4 a4 [a4,d5]!2 [d5,f#5] d5!3 [d5,f#5]!2 d5 [d5,f#5]", // D5 D
  D: "[d5,f#5] d5 [a4,d5]!3 a4 [a4,d5]!2 [b4,e5]!2 ~ [b4,e5]!5", // D D5 E5
  E: "[b4,e5] [a4,d5]!7 [d5,f#5] d5!3 [d5,f#5] d5 [d5,f#5]!2", // E5 D5 D
  F: "[d5,f#5] [a4,d5] [a4,d5,e5] [a4,d5]!5 [b4,e5] b4!3 [b4,e5] e5 [b4,e5]!2", // D D5 Asus4 D5 E5
  G: "[b4,e5] [a4,d5]!4 ~ [a4,d5] a4 [d5,f#5] d5 ~ [d5,f#5]!5", // E5 D5 D
  H: "[d5,f#5] [a4,d5]!5 a4 [a4,d5] [b4,e5]!2 b4 [b4,e5]!3 e5 ~", I: "d4!16", J: "d4!2 ~ d4!13",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.8)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_4 = note(`<
  ~@21 A B C D E F G H ~@8 A B C D E F G H ~@24 A B C D E F G H ~@8 A B C D E F G H ~@36
>`.pickRestart({
  A: "~@11 f#5 ~ [d5,f#5] ~@2", B: "d5 ~@5 d5 ~@3 e5 ~@2 [b4,e5] ~@2", C: "e5 ~@4 d5 ~@4 f#5 ~@3 f#5 ~",
  D: "~@10 [b4,e5] ~@5", E: "~@10 f#5 ~@5", F: "~@9 e5!3 ~ b4 ~@2", G: "~@5 d5 ~@4 [d5,f#5] ~@5", H: "~@10 e5 ~@5",
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.8)

// other · electric guitar clean
const electric_guitar_clean_5 = note(`<
  ~@21 A B A B A B A C ~@8 A B A B A B A C ~@24 A B A B A B A C ~@8 A B A B A B A C ~@36
>`.pickRestart({
  A: "~@8 a3@3 ~ a3@3 ~", B: "~@8 g3@3 ~ g3@3 ~", C: "~@8 g3@3 ~ g3@2 ~@2",
})).s("gm_electric_guitar_clean").gain(0.35)

// other · lead 5 charang
const lead_5_charang = note("<~@101 A B A B A B A B A B A B A B A C A B A B A B A B D@2 ~@2>".pickRestart({
  A: "[d2,d3]", B: "[c2,c3] [g2,g3]", C: "[c2,c3]@8 [g2,g3]@7 ~", D: "[d2,d3]/2",
})).s("gm_lead_5_charang").gain(0.4)

// chords · brass section
const brass_section = note(`<
  ~@21 A@2 B@2 C@2 D@2 E ~@7 A@2 B@2 C@2 D@2 F G@6 H ~@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E ~@7 A@2 B@2 C@2 D@2 A@2 B@2
  C@2 D@2 ~@16 I@2 J@2 K@2 L@4 ~@2
>`.pickRestart({
  A: "[~@2 [b3,d4]@3 [b3,d4] [b3,d4]@2 [c#4,e4]@3 [d4,f#4] ~@2 [d4,f#4]@4 [f#3,a3]@3 [f#3,a3]!2 ~ [f#3,a3]@2 [g3,b3] ~ [g3,b3] ~ [g3,b3]@2]/2", // Bm C#m D F#m G
  B: "[~@2 [b3,d4]@2 ~ [b3,d4] b3@2 [c#4,e4]@3 f#4@2 ~ [d4,f#4]@4 [f#3,a3]@2 ~ [f#3,a3]!2 ~ [f#3,a3]@2 [g3,b3] ~ [g3,b3] ~ [g3,b3]@2, ~@6 d4 ~@4 d4 ~@12 a#3 ~@7]/2", // Bm C#m D F#m G
  C: "[~@2 [b3,d4]@3 [b3,d4] b3@2 [c#4,e4]@3 d4@2 ~ [d4,f#4]@4 [f#3,a3]@2 ~ [f#3,a3]!2 ~ [f#3,a3]@2 [g3,b3] ~ [g3,b3] ~ [g3,b3]@2, ~@6 d4 ~@4 f#4 ~@20]/2", // Bm C#m D F#m G
  D: "[~@2 [b3,d4]@2 ~ [b3,d4] b3@2 [c#4,e4]@3 f#4@2 ~ [d4,f#4]@4 [f#3,a3]@2 ~ [f#3,a3]!2 ~ [f#3,a3]@2 [g3,b3] ~ [g3,b3] ~ [g3,b3]@2, ~@6 d4 ~@4 d4 ~@20]/2", // Bm C#m D F#m G
  E: "[e3,a3]@3 ~@13", F: "[e3,a3]@2 d5@13 ~", G: "~@2 d5@13 ~", H: "~@2 d5@11 ~@3",
  I: "[~@2 [a3,d4]@2 ~ [a3,d4] [a3,d4]@2 [c#4,e4]@3 [d4,f#4]@2 ~ d4@17 ~, ~@7 f#4@7 ~@2]/2", // D5 C#m D
  J: "[~@2 [a3,d4]@2 ~ [a3,d4] [a3,d4]@2 [c#4,e4]@3 [d4,f#4]@3 g3@18, ~@14 c4@15 ~@3]/2", // D5 C#m D
  K: "[~@2 [a3,d4]@2 ~ [a3,d4] [a3,d4]@2 [c#4,e4]@3 [d4,f#4]@2 ~ [d4,f#4]@16 ~@2]/2", // D5 C#m D
  L: "[~@2 [a3,d4]@2 ~ [a3,d4] [a3,d4]@2 [c#4,e4]@3 [d4,f#4]@3 [g3,f#4]@8 [g3,e4]@2 [a3,f#4]@2 [g3,e4]@2 [a3,f#4] [g3,e4] [f#3,d4]@34]/4", // D5 C#m D Gmaj7 C D C D …
})).s("gm_brass_section").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~ [x!3 ~ x ~@3]!124 x ~ x ~>").gain(0.51)

// drums · snare
const snare = s("sd").struct("<~ [~@4 x ~@2 x ~@4 x ~@3]!124 ~@4>").gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<[~@3 x] ~@126 x ~>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@7 B A@3 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B ~@4
>`.pickRestart({
  A: "x!8", B: "x!5 ~ x!2",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@11 x!2 ~@3] [~@7 x]!124 ~@2 x ~>").gain(0.51)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@4
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@126 [~@15 x] ~@2>").gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  A ~@2 B ~ B ~@2 A ~@3 C D ~ D ~ D ~ D A ~@2 B ~ B ~@2 A ~@7 A ~@2 B ~ B ~@2 A ~@7 A ~@2 B ~ B ~@2 A ~@2 B ~ B ~@2 A
  ~@2 B ~ B ~@2 A ~@7 A ~@2 B ~ B ~@2 A ~@2 B ~ B ~@2 A ~@7 A ~@7 A ~@7 A B ~ B ~
>`.pickRestart({
  A: "~@6 x!2", B: "x", C: "~@3 x", D: "~@7 x",
})).gain(0.26)

// drums · shaker
const shaker = s("sh").struct("<~ [x!8]!124 ~@4>").gain(0.26)

stack(
  bass, epiano1, epiano2, string_ensemble_2, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3,
  electric_guitar_clean_4, electric_guitar_clean_5, lead_5_charang, brass_section, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, shaker
)

More by Talking Heads