Strudelify

Nutbush City Limits

Tina Turner

KeyA majorTempo130 bpm
0:00/0:00
// Nutbush City Limits — Tina Turner
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 "Sax 4" baritone sax (copy of ch 9 "Sax 3" tenor sax)
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar.
setcpm(130/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 · acoustic bass · "Bass"
const bass = note(`<
  A B A C A B A D A B A C E@2 F@2 A G A C A B A C A B A C E@2 F@2 A H A D A B A C A B A C E@2 F@2 A H A D A B A C A B A
  C E@2 F@2 A G A D A B A D A B A I E@2 F@2 A G A C A B A C A B A J E@2 F@2 A G A D A B A C A B A D A B A D A B A H A H
  A G K L M N O@8 P Q
>`.pickRestart({
  A: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", B: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a2 ~ a1 ~",
  C: "a1 ~ a1 ~ a1 ~ a1 ~ f#1 ~ f#1 ~ e1 ~ b1 ~", D: "a1 ~ a1 ~ a1 ~ a1 ~ f#1 ~ f#1 ~ e1 ~ g#1 ~",
  E: "c2!2 d#2 e2 g2!2 a2 g2", F: "g2!2 a#2 b2 d3!2 e3 d3", G: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a2 ~ b1 ~",
  H: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a2 ~ g#1 ~", I: "a1 ~ a1 ~ a1 ~ a1 ~ f#1 ~ f#1 ~ e1 ~ c#2 ~",
  J: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a2 ~ c#2 ~", K: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  L: "c2 ~ c2 ~ c2 ~ c2 ~ a1 ~ a1 ~ g1 ~ f2 ~", M: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
  N: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g3 ~ g2 ~", O: "a1!2 c2 c#2 e2!2 f#2 e2", P: "a1!2 c#2!2 d2!2 d#2!2",
  Q: "e2 f#2 g#2 a2 ~@2 a1 ~",
})).s("gm_acoustic_bass").gain(0.57).pan(0.8)

// chords · piano
const piano = note(`<
  ~@4 A B C D A B A E F G H I A B A J A B C D C D C D F K L M A B N O A B A B C D A E F P L Q A B C D A B C D C D R D S
  T L Q A B N O A B C D C D A E S T L M A B A J A B C D C D N O F P L Q A B A B A B N O A B A E A B A J A E N O A E A B
  U V L Q A E A B A B A O W X
>`.pickRestart({
  A: "[c#4,e4,a4]@3 ~ [c#4,d4,f#4] ~ [c#4,e4]@3 ~ [c#4,e4] ~ [c#4,d4,f#4] ~ [c#4,e4]@2", // A Dmaj7 C#m Dmaj7 C#m
  B: "~@2 [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,d4,f#4] ~ [c#4,e4]@2 ~@2", // A Dmaj7 C#m
  C: "[c#4,e4]@3 ~ [c#4,d4,f#4] ~ [c#4,e4]@5 ~ [c#4,d4,f#4] ~ [c#4,e4]@2", // C#m Dmaj7 C#m Dmaj7 C#m
  D: "~@2 [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,d4,f#4]@2 ~@2", // A Dmaj7
  E: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] c#7 [c#6,d6,e6,f#6,a6] [f#5,a5,c#6,d6] [c#5,d5,e5] [f#4,a4,c#5] [c#4,d4,e4] d4", // A Dmaj7 C#m F#m C#m
  F: "[e4,g4,c5]@3 ~ [e4,f4,a4] ~ [e4,g4]@3 ~ [e4,g4] ~ [e4,f4,a4] ~ [e4,g4]@2", // C Fmaj7 Em Fmaj7 Em
  G: "~@2 [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,f4,a4] ~ [e4,g4]@2 ~@2", // C Fmaj7 Em
  H: "[g4,b4,d5]@2 ~@2 [g4,a4,c5] ~ [g4,b4]@3 ~ [g4,b4] ~ [g4,a4,c5] ~ [g4,b4]@2", // G Am7 G Am7 G
  I: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ f#4 a4 g4 ~ [c4,g4,b4]@2 [b3,g4] ~, ~@4 b4 ~@3", // G Cmaj7 Em
  J: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c4,c#4,e4,a4] d4 c#4 ~ [f#3,c#4,e4]@2 [e3,c#4] ~", // A F#7 C#m
  K: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] e7 [e6,f6,g6,a6,c7] [a5,c6,e6,f6] [e5,f5,g5] [a4,c5,e5] [e4,f4,g4] f4", // C Fmaj7 Em Am Em
  L: "[g4,b4,d5]@3 ~ [g4,a4,c5] ~ [g4,b4]@3 ~ [g4,b4] ~ [g4,a4,c5] ~ [g4,b4]@2", // G Am7 G Am7 G
  M: "~@2 [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,a4,c5] ~ [g4,b4]@2 ~@2", // G Am7 G
  N: "[c#4,e4,a4]@2 ~@2 [c#4,d4,f#4] ~ [c#4,e4]@3 ~ [c#4,e4] ~ [c#4,d4,f#4] ~ [c#4,e4]@2", // A Dmaj7 C#m Dmaj7 C#m
  O: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ c4 d4 c#4 ~ [f#3,c#4,e4]@2 [e3,c#4] ~, ~@4 e4 ~@3", // A F#7 C#m
  P: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [d#4,e4,g4,c5] f4 e4 ~ [a3,e4,g4]@2 [g3,e4] ~", // C A7 C
  Q: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [f#4,g4,b4,d5] a4 g4 ~ [c4,g4,b4]@2 [b3,g4] ~", // G Gmaj7 Cmaj7 Em
  R: "[c#4,e4]@3 ~ [c#4,d4,f#4] ~ [c#4,e4]@3 ~ [c#4,e4] ~ [c#4,d4,f#4] ~ [c#4,e4]@2", // C#m Dmaj7 C#m Dmaj7 C#m
  S: "[e4,g4,c5]@2 ~@2 [e4,f4,a4] ~ [e4,g4]@3 ~ [e4,g4] ~ [e4,f4,a4] ~ [e4,g4]@2", // C Fmaj7 Em Fmaj7 Em
  T: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ d#4 f4 e4 ~ [a3,e4,g4]@2 [g3,e4] ~, ~@4 g4 ~@3", // C A7 C
  U: "[e4,g4]@3 ~ [e4,f4,a4] ~ [e4,g4]@5 ~ [e4,f4,a4] ~ [e4,g4]@2", // Em Fmaj7 Em Fmaj7 Em
  V: "~@2 [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,f4,a4]@2 ~@2", // C Fmaj7
  W: "[a2,a3]!2 [c#3,c#4]!2 [d3,d4]!2 [d#3,d#4]!2", // A C# D D#
  X: "[e3,e4]@2 [f#3,f#4]@2 [g#3,g#4]@2 [a3,a4]@2 ~@2 [c#6,d6,e6,f#6,g#6,a6] [d5,e5,f#5,g#5,a5,b5] [e3,c#4,a4]@2 ~@2, ~@12 [a2,b4,c#5] ~@3", // E F# G# A Dmaj7 E7 A
})).s("gm_piano").gain(0.37).pan(0.4)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  A B C D A B A B A B C D E F G H A B A B A B C D A B A B E F G H A B C D A B A B A B A B E F G H A B A B A B C D A B C
  D E F G H A B C D A B C D A B A B E F G H A B A B A B C D A B C D E F G H A B C D A B C D A B C D A B C D A B A B A B
  A B E F G H A B A B A B A I J K
>`.pickRestart({
  A: "[a2,e3] ~ [a2,e3] ~ [a2,f#3] ~ e3 ~ [a2,a3]@2 e3 ~ [a2,f#3] ~ [a2,e3]@2", // A5 D A D A5
  B: "~@2 [a2,e3] ~ [a2,f#3]@2 e3 ~ [a2,a3]@2 e3 ~ [a2,f#3] ~ [a2,e3]@2", // A5 D A D A5
  C: "[a2,e3] ~ [a2,e3] ~ [a2,f#3]@2 e3 ~ [a2,a3]@2 e3 ~ [a2,f#3] ~ [a2,e3]@2", // A5 D A D A5
  D: "~@2 c3 ~ c#3 ~ e3 ~ f#3 ~ [e3,a3]@6", E: "[c3,g3] ~ [c3,g3] ~ [c3,a3] ~ g3 ~ [c3,c4]@2 g3 ~ [c3,a3] ~ [c3,g3]@2",
  F: "~@2 [c3,g3] ~ [c3,a3]@2 g3 ~ [c3,c4]@2 g3 ~ [c3,a3] ~ [c3,g3]@2", // C5 F C F C5
  G: "[g2,d3] ~ [g2,d3] ~ [g2,e3] ~ d3 ~ [g2,g3]@2 d3 ~ [g2,e3] ~ [g2,d3]@2", // G5 C G C G5
  H: "~@2 [g2,d3] ~ [g2,e3]@2 d3 ~ [g2,g3]@2 d3 ~ [g2,e3] ~ [g2,d3]@2", I: "[a2,e3] ~ c3 ~ c#3 ~ e3 ~ f#3 ~ [e3,a3]@6",
  J: "[a2,a3]!2 [c#3,c#4]!2 [d3,d4]!2 [d#3,d#4]!2", K: "[e3,e4] [f#3,f#4] [g#3,g#4] [a3,a4] ~@2 [a2,e3,c#4,a4] ~",
})).s("gm_electric_guitar_muted").gain(0.45).pan(0.7)

// chords · electric guitar clean · "Guitar" · D A D A5
const electric_guitar_clean = note("<~@131 [~@4 [a2,f#3] ~@3 [a2,a3]@2 ~@2 [a2,f#3] ~ [a2,e3]@2] ~@2>")
  .s("gm_electric_guitar_clean").gain(0.4).pan(0.4)

// chords · alto sax · "Sax 1"
const alto_sax = note(`<
  A B A B ~@8 C@2 D@2 ~@3 E ~ E ~ E ~ F ~ E G@2 D@2 ~ E ~ E ~ E ~ E ~ F ~ E G@2 D@2 ~ E ~ E ~ E ~ E ~ H ~ E G@2 D@2 ~ E
  ~ E ~ E ~ E ~ F ~ E G@2 D@2 ~ E ~ E ~ E ~ E ~ H ~ E G@2 D@2 ~ E ~ I ~@11 J K L K L M N O P Q R S T U V U ~ W ~@5
>`.pickRestart({
  A: "~@5 a3!2 g#3", B: "g3@2 a3!2 g3 ~@3", C: "[~@5 a#3 ~ d#4 e4 g4 a4 c5@5, ~@2 c4@4 c4@3 ~@7]/2",
  D: "[~ [g3,b3,d4]@2 ~]/2", E: "[c#4,e4,a4]@2 [c#4,e4,a4]@5 ~@9", F: "[c#4,e4,a4] ~", G: "[~ [c4,e4,g4]@2 ~]/2",
  H: "~ c#4@3 ~@4, a4 ~, ~ e4@7 ~@8", I: "[c#4,e4,a4]@3 ~", J: "~@10 a4@5 ~", K: "a4@3 ~ a4@2 c4@4 a3@2 a3@2 g#3@2",
  L: "g3@2 a3!2 g3 a4!3", M: "c#5@3 ~ c#5@2 c4@4 a3@2 a3@2 g3@2", N: "g3@2 a3!2 g3 e5@2 d5",
  O: "c#5@3 ~ a4@2 c4@4 a3@2 a3@2 g3@2", P: "g3@2 a3!2 g3 a3 a3@2", Q: "~@2 c4@3 a#3 c4 d#4", R: "e4 g4 a4 c5@5",
  S: "b4 g4", T: "d4@4 ~ g4!3", U: "a4@3 ~ a4@3 ~@9", V: "~@5 g4 a4 g4", W: "a4@3 ~ a4@3 ~ c5@2 c#5@2 a4@2 a4@2",
})).s("gm_alto_sax").gain(0.45)

// other · alto sax · "Sax 2"
const alto_sax_2 = note("<~@111 A B C D C E F G H I J K L M N M ~ O ~@5>".pickRestart({
  A: "~@5 c#4@2 ~", B: "c#4@3 ~ c#4 ~ a3@3 ~ c#3 ~ c#3 ~ c#3 ~", C: "e3@3 ~ c#3 ~ c#3 ~ e3 ~ c#4 ~ c#4 ~ c#4 ~",
  D: "c#4@3 ~ c#4 ~ e3@3 ~ c#3 ~ c#3 ~ c#3 ~", E: "e4@3 ~ e4 ~ e3@3 ~ c#3 ~ c#3 ~ e3 ~",
  F: "e3@3 ~ c#3 ~ c#3 ~ e3 ~ c#5@3 ~ b4 ~", G: "e4@3 ~ c#4 ~ e3@3 ~ c#3 ~ c#3 ~ e3 ~",
  H: "e3@3 ~ c#3 ~ c#3 ~ e3 ~ c#3 ~ c#3@3 ~", I: "~@4 e3@4 ~@2 g3 ~ e3 ~ g3 ~", J: "c4 ~ e4 ~ c4 ~ e4@7 ~@3",
  K: "d4@3 ~ b3@3 ~", L: "b3@6 ~@4 b3 ~ b3 ~ b3 ~", M: "c#4@3 ~ c#4@3 ~@9", N: "~@10 e4 ~ c#4 ~ e4 ~",
  O: "c#4@3 ~ c#4@3 ~ e4 ~ e4 ~ c#4 ~ c#4 ~",
})).s("gm_alto_sax").gain(0.45)

// drums · kick
const kick = s("bd").struct("<A@7 B A@11 B A@3 B A@11 B A@35 B A@15 B A@15 B A@17 B A@12>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x",
})).gain(0.6).pan(0.2)

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@7 C A@3 D A@3 E A@7 F A D A G A@3 E A@7 H A C A C A@3 H A@7 H A H A F A@3 C A@7 B A C A D A@3 B A@7 B A H A D
  A@7 E A@3 H A@3 H A H A H A C A@5 B A H A C A@3 D A@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~ x ~@5 x!4", C: "~ x!3 ~@2 x ~", D: "~@4 x ~@7 x!4", E: "~@2 x ~@2 x!2 ~",
  F: "~@2 x ~@2 x!3", G: "~@4 x ~ x ~@5 x!3 ~", H: "~@2 x!3 ~@5 x!3 ~ x ~",
})).gain(0.6).pan(0.2)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A ~ B ~ C ~@3 D ~@7 D ~ C ~@5 D ~@9 A ~ A ~@15 D ~@3 A ~@9 A ~ C ~@15 C ~@3 E ~@3 D ~@13 A ~@9 A ~@3 C ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@2 x ~@2 x ~@2", C: "~@8 x!4 ~@4", D: "~@5 x!3", E: "~@2 x ~@2 x ~ x",
})).gain(0.54).pan(0.2)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@11 A ~ B ~ C ~@3 D ~@7 E ~ C ~@5 E ~@9 A ~ A ~@15 E ~@3 A ~@9 A ~ C ~@15 C ~@3 F ~@3 D ~@13 A ~@9 A ~@3 C ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@2 x ~@2 x", C: "~@4 x!4 ~@8", D: "~@3 x!2 ~@3", E: "~@2 x!3 ~@3", F: "~ x ~@2 x ~@3",
})).gain(0.54).pan(0.2)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@2 B@5 A B A B@3 A B@7 A B A B@4 A B A B@8 A@3 B A B@9 A B@7 A B A B@3 A B@5 A@3 B@11 A B A B@13 A B@3 A B@3 A B A B
  A B@2 A B@6 A B@8
>`.pickRestart({
  A: "~@2 x ~@4 x", B: "~ x ~@2",
})).gain(0.54).pan(0.2)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@11 A B C B D ~@3 E ~@7 F B D B G ~@3 F ~@8 B H B H ~@3 I ~@8 B@3 J ~@3 A ~@8 B H B K ~@12 B@3 D ~@3 L ~@3 E ~@3 I
  ~@3 I ~@5 A ~@6 B@3 H B@3 D ~@2
>`.pickRestart({
  A: "~ x", B: "~ x ~ x", C: "x ~ x!2 ~@2 x ~", D: "x!4 ~@12", E: "~ x!2 ~@5", F: "~ x ~@6", G: "~@4 x ~@7 x ~@2 x",
  H: "~ x!3", I: "~@6 x!3 ~@7", J: "~ x!2 ~@3 x ~", K: "x!5 ~@7 x ~@3", L: "x ~@2 x ~@2 x ~",
})).gain(0.36).pan(0.2)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@12 A B A ~@13 A ~ A C ~@12 A@2 C A ~@12 A C A D ~@12 A@3 C ~@12 A C A ~@29 A C A@3 C@2 ~@3
>`.pickRestart({
  A: "~ x!7", B: "~ x!2 ~ x!2 ~ x", C: "x!8", D: "x!5 ~ x!2",
})).gain(0.42).pan(0.2)

stack(
  bass, piano, electric_guitar_muted, electric_guitar_clean, alto_sax, alto_sax_2, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, ride
)

More by Tina Turner