Strudelify

It's the Same Old Song

Four Tops

KeyB majorTempo132 bpm
0:00/0:00
// It's the Same Old Song — Four Tops
// 132 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 122 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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.

// chords · piano
const piano = note(`<
  ~@5 A B ~@3 C@2 D E@2 ~@2 F@2 G H F@2 G H F@2 G H I J K J I J K J L@4 F@2 G H F@2 G H F@2 G H I J K J I J K J ~@2 I J
  K J I J K M F@2 G H F@2 G H F@2 G H I J K J I J K J ~@14 I J K J I J K J I J K J I J K J I
>`.pickRestart({
  A: "[f#3,b3,d#4]@10 ~@2 [f#3,b3,e4]@3 ~", B: "[f#3,a#3,c#4]",
  C: "[~@14 e4@5 ~ d#4@3 ~ c#4@3 ~ b3@3 ~, ~@14 [g#3,b3]@13 ~@5]/2", D: "[f#3,a#3,c#4]@3 ~ [g#3,b3,e4]@3 ~",
  E: "[[f#3,b3,d#4]@29 ~@3]/2", F: "[b3,d#4,f#4]/2", G: "[g#3,c#4,e4]", H: "[g#3,b3,e4] [a#3,c#4,f#4]",
  I: "[b3,d#4,f#4]", J: "[a#3,c#4,f#4]", K: "[g#3,b3,e4]", L: "[[b3,d#4,f#4]@61 ~@3]/4", M: "[a#3,c#4,f#4]@3 ~@13",
})).s("gm_piano").gain(0.28).pan(0.6)

// bass · slap bass 1 · "synbass"
const bass = note(`<
  ~@3 A@2 ~@2 B C D E ~ F G@4 D H I J D H I J D H I J D K L M D K L M G@4 D H I J D H I J D H I J D K L M D K L M G@2 D
  K L M D K L N D H I J D H I J D H I J D K L M D K L M ~ B O@2 ~@4 B P@2 G@3 D K L M D K L M D K L M D K Q M R
>`.pickRestart({
  A: "[~ g#1 d#2 f#2@11 ~@2]/2", B: "~@2 f#1 ~ g#1 ~ f#1 b1 ~ g#1 c#2 ~ d#2!2 ~@2", C: "~@2 g#1@2 d#1 ~ f#1@9 ~",
  D: "b1 ~@6 f#1 g#1@2 b1@2 g#1@2 b1@2", E: "~@7 f#1 g#1@2 b1 ~ b1@2 g#1@2", F: "f#1 g#1 a#1 f#1 e1 g#1 e2 g#1",
  G: "b1 ~ c#2 ~ d#2 ~ g#1 ~@3 g#1 ~ f#1 ~ g#1 ~", H: "~@7 f#1 g#1@2 b1 ~ g#1@2 b1@2",
  I: "c#2 ~@6 g#1 b1@2 c#2@2 g#1@2 b1@2", J: "e1!2 f#1 g#1 f#1!2 g#1 a#1", K: "f#1@2 ~@5 f#1 g#1@2 b1@2 e2@2 c#2@2",
  L: "c#2!2 e2 c#2 b1 c#2 g#1 f#1", M: "f#1!2 g#1 a#1 f#1!2 g#1 a#1", N: "f#1!2 ~ f#1 g#1@2 a#1 f#1 ~@8",
  O: "[~@2 g#1@2 d#1 ~ f#1@17 ~@9]/2",
  P: "[~@2 g#1@2 d#1 ~@11 b1 ~ c#2 ~ d#2 ~ g#1 ~@3 g#1 ~ f#1 ~ g#1 ~, ~@6 f#1@17 ~@9]/2",
  Q: "c#2@2 c#2@2 e2@2 c#2@2 b1@2 c#2@2 g#1!2 ~ f#1", R: "b1@7 ~@9",
})).s("gm_slap_bass_1").gain(0.37)

// other · electric guitar muted · "cocottes"
const electric_guitar_muted = note(`<
  ~@17 A B C D A B C D A B C D A@2 E F A@2 E F ~@4 A B C D A B C D A B C D A@2 E F A@2 E F ~@2 A@2 ~@2 A@2 ~@2 A B C D A
  B C D A B C D A@2 E F A@2 E F ~@14 A@2 E F A@2 E F A@2 E F A@2 E F ~
>`.pickRestart({
  A: "~@2 f#4 ~ f#4 ~ d#4 ~ f#4!2 g#4 f#4 ~@4", B: "~@4 f#4 ~ d#4 ~ f#4!2 g#4 f#4 ~@4",
  C: "~@4 b3 ~ g#3 ~ b3!2 c#4 b3 ~@4", D: "~@2 b3 ~ b3 ~ g#3 ~ b3!2 c#4 b3 ~@2 c#4 d#4",
  E: "~@2 b3 ~ b3 ~ g#3 ~ b3!2 c#4 b3 ~@4", F: "~@2 c#4 ~ c#4 ~ a#3 ~ c#4!2 a#3 ~ c#4 ~@3",
})).s("gm_electric_guitar_muted").gain(0.18)

// drums · kick
const kick = s("bd").struct("<~ A@60 B C A@7 D A@30 B@4 A@16 E>".pickRestart({
  A: "x!4", B: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~", C: "~ x ~ x!2 ~ x ~", D: "~ x ~ x ~@3 x ~@8", E: "x",
})).gain(0.59)

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

// drums · hihat
const hihat = s("hh").struct("<~ A@4 B@12 C@44 B@2 C@38 B@4 C@16 D>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x ~ x ~@3 x ~ x!3 ~ x ~ x ~", C: "x ~ x ~ x ~ x!5 ~ x ~ x ~", D: "x",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@27 B A@23 B A@8 ~@2 A@7 ~ A@7 C A@3 B A@18 ~@4 A@16 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!3 ~@3 x ~",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@12 B ~@11 B ~@3 B ~@7 B ~@11 B ~@3 B ~@5 B ~@3 B ~@3 B ~@11 B ~@3 B ~@3 B ~@3 B ~@9 B ~@3 B ~@2 A B ~@3 B ~@2
  A B
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.3)

// drums · congas
const congas = s("conga:13").struct("<~ [x!3 ~@5]!69 ~ [x!3 ~@5]!50 x>").gain(0.47)

// drums · congas
const congas_2 = s("conga:18").struct("<~ [~@6 x!6 ~@4]!69 ~ [~@6 x!6 ~@4]!50 ~>").gain(0.47)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~ [~@12 x!4]!69 ~ [~@12 x!4]!50 ~>").gain(0.24)

stack(piano, bass, electric_guitar_muted, kick, snare, hihat, tambourine, crash, congas, congas_2, congas_soft)

More by Four Tops