Strudelify

The Kids Are Alright

The Who

KeyD majorTempo128 bpm
0:00/0:00
// The Kids Are Alright — The Who
// 128 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Guitar" electric guitar clean (copy of ch 2 "Guitar" electric guitar clean); ch 4 "GuitarOD" overdriven guitar (copy of ch 2 "Guitar" electric guitar clean); ch 2 "Guitar" electric guitar clean (copy of ch 5 "GuitarOD2" overdriven guitar)
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · overdriven guitar · "GuitarOD2"
const overdriven_guitar = note(`<
  ~@2 A B A B A C D E F G H E F I J B K I L D L D L D M E F G H E F D N D N O P Q R S@2 T@2 S U V W X L Y A C Z AA AB AC
  AD AA ~ D N D N AE AF AG AH AF AI AJ@2 AK@2 AL@2 AM AN AO A AP L D L D@2 AQ N AR D AQ N AS N AS N AS N AT@2
>`.pickRestart({
  A: "[g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]!2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!2", // G A
  B: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2", // D
  C: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!4", D: "[d3,a3,d4,f#4]!8", E: "[e2,b2,e3,g3,b3,e4]",
  F: "[a2,e3,a3,c#4,e4]", G: "[g2,b2,d3,g3,b3,g4]", H: "[d3,a3,d4,f#4]",
  I: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!3 [a3,d4,f#4]!3", J: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!6",
  K: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!2", // A
  L: "[d3,g3,b3,g4] [g2,b2,d3,g3,b3,g4]!3 [a2,e3,a3,c#4,e4]!4", M: "[d3,a3,d4,f#4] [d3,a3,d4,f#4]@3",
  N: "[a2,e3,a3,c#4,e4]!8", O: "a3@2 a3!2 a3@2 a3@2 a3!2 a3@2 a3@2 a3@2",
  P: "[a3,e4]@2 a3!2 a3@2 [a3,e4]@2 a3!2 a3@2 [a3,e4]@2 a3@2", // A5
  Q: "[a3,e4,a4]@2 [a3,c#4,e4,a4]!2 [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 a2!2 a2@2 [a3,c#4,e4,a4]@2 a2@2", // A5 A
  R: "[a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]!2 [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 a2!2 a2@2 [a3,c#4,e4,a4]@2 a2@2", // A
  S: "[a2,d3,b3,d4] a2!2 [a2,d3,b3,d4] a2!4", T: "[a3,c#4,e4,a4] a2!2 [a3,c#4,e4,a4] a2!4", U: "a2!3 a2@5",
  V: "[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2", // D
  W: "[g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]!2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@2", X: "[d3,a3,d4,f#4]!2",
  Y: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2", Z: "[d3,a3,d4,f#4]!4 [d3,a3,d4,f#4]@2 ~@2",
  AA: "~@3 [e2,b2,e3,g3,b3,e4]!2 ~@3", AB: "~@3 [a2,e3,a3,c#4,e4]!2 ~@3", AC: "~@3 [g2,b2,d3,g3,b3,g4]!2 ~@3",
  AD: "~@3 [d3,a3,d4,f#4]!2 ~@3", AE: "a3@7 d4", AF: "[a3,e4]", AG: "[a3,e4,a4]", AH: "[a3,e4,a4]@7 d4",
  AI: "[a3,e4]@7 a3", AJ: "[a3,e4,a4]@3 [a3,e4,a4]@4 a3", AK: "[a3,d4,a4]!16",
  AL: "[a3,e4,a4]@3 [a3,e4,a4]@3 [a3,e4,a4]@2", AM: "d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4@2 d4@2 d4@2", AN: "d4!8",
  AO: "[d3,a3,d4,f#4]!4", // D
  AP: "[d3,a3,d4,f#4]@3 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2", // D
  AQ: "[e2,b2,e3,g3,b3,e4]!8", AR: "[g2,b2,d3,g3,b3,g4]!8", AS: "[d3,a3,d4,f#4]!4 [d3,a3,d4,g4]!4",
  AT: "[d3,a3,d4,f#4]/2", // D
})).s("gm_overdriven_guitar").gain(0.42).pan(0.8)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@2 A B A C D E F G H I J K L M N O P Q R S T Q D U V W L X Y Z N AA AB AA P AB@4 AC@2 AD@2 AE P C D AF AG C D V AH W
  N X AI AJ AE AK P AK P AL@7 AB P AM L@2 AN AO F AP F AQ F AP AH@2 W L X AI W N AR P AS P AT P AU@2
>`.pickRestart({
  A: "g2 a2", B: "d2@2 f#2 a2", C: "d2 d3!3", D: "g2@2 d3 g2 a2@2 a2!2", E: "d2@2 d3@2 d3@2 d3!2", F: "d3!4",
  G: "d2@2 d2!2", H: "a2@2 a2!2 a2@2 a2@2", I: "g2@2 g2!6", J: "d2@2 d2!2 d2@2 d2@2", K: "e2@2 e2!2 e2@2 e2@2",
  L: "a2@2 a2!2 a2@2 a2!2", M: "d2@3 d2 g2!4", N: "a2@2 a2!6", O: "d2@3 d2 d2@3 d2", P: "a2!8", Q: "d2@3 d3 d3@2 d3!2",
  R: "g2@3 g2 a2@4", S: "d2@3 d3 d3@2 d3@2", T: "g2 d3!2 g2 a2 e2!3", U: "d2@2 d3!2 d3@2 d3!2", V: "d3@2 d3!6",
  W: "e2@2 e2!2 e2@2 e2!2", X: "g2@2 g2!2 g2@2 g2!2", Y: "d2@3 d2 d2@2 d2@2", Z: "e2@3 e2 e2@2 e2@2",
  AA: "d2@2 d2@2 g2!2 e2 f#2", AB: "a2@3 a2@2 a2!3", AC: "g2@3 g2@2 g2 g2@2", AD: "a2@3 a2@2 a2 a2@2", AE: "a2@3 a2!5",
  AF: "d2@2 d3@2 d3!4", AG: "g2!4 a2!4", AH: "d3!8", AI: "d2@2 d2!6", AJ: "e2@2 e2!6", AK: "d2!4 g2!4",
  AL: "a2@3 a2@3 a2@2", AM: "a2!4 g2!4", AN: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2 g2@2 g2@2", AO: "g2!8",
  AP: "g2@2 g2@2 a2@2 a2!2", AQ: "g2@2 g2@2 a2!4", AR: "d2@2 d2!2 g2 f#2 d3 g2", AS: "d3@2 d3 g2@2 g2!3",
  AT: "d3@2 d3@2 g2!4", AU: "[d3@9 d3@7]/2",
})).s("gm_electric_bass_finger").gain(0.56)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C B A B D E@2 F E@2 F E D E F B A B E B A B G E F E@3 H E@3 I D@2 I F E H F E@2 H B A B G B A B H E D E I E J
  E F E H F G E I F H F H F E J H E H B A B D B A B D E@3 H E I E D E@4 A K
>`.pickRestart({
  A: "x ~@2 x!3 ~ x", B: "x ~@2 x!2 ~@2 x", C: "~@4 x!2 ~@2", D: "~@9 x ~@6", E: "x!2 ~ x!3 ~ x", F: "x!2 ~ x ~@4",
  G: "~ x!2 ~ x!2 ~@2", H: "x!2 ~ x ~ x ~ x", I: "~ x ~@6", J: "~@7 x", K: "~ x ~ x ~@2 x ~",
})).gain(0.58)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A ~@4 B ~@2 A ~@5 B ~@3 C ~@3 B ~@3 B ~@2 A@2 ~@2 B ~@2 B@2 ~@4 C ~@5 A ~@9 C B ~@6 B ~@2 B ~@4 A ~@3 A ~ B ~@5 A
  ~@6
>`.pickRestart({
  A: "~@7 x", B: "~@2 x!6", C: "~@3 x",
})).gain(0.58)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~@7 A ~@9 B ~@9 C A@2 C ~@10 B ~@5 A ~ C ~@7 B ~ C ~@13 A ~@3 A ~@5 C ~ A ~@6
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@3 x ~@2 x ~", C: "~@4 x!2 ~@2",
})).gain(0.58)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A B ~@3 C ~@2 C ~@3 C ~@5 A B ~@2 C ~@3 C ~@7 C ~ C@2 ~@2 C ~@7 C ~@7 C ~ C@2 ~@3 C@5 ~@2 C ~ C ~ A ~@3 A ~@5 C
  ~@10
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~ x ~@2",
})).gain(0.58)

// drums · high tom
const high_tom = s("ht").struct("<~@26 A ~@9 B ~@2 B ~@10 A ~@7 B ~@7 A ~ B ~@23 B ~@8>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.58)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A@2 ~ A@2 ~ A ~ A ~@4 A ~@4 A ~ A@3 ~ A@3 ~@5 A ~@2 A@2 ~@9 A ~ A ~ A ~ A ~ A ~@3 A ~@6 A ~@2 A ~@9 A@3 ~ A ~ A ~
  A@4 ~@2
>`.pickRestart({
  A: "x!8",
})).gain(0.58)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@9 A@2 ~ A@2 ~ A ~ A ~@4 A ~@4 A ~ A@3 ~ A@3 ~@5 A ~@2 A@2 ~@9 A ~ A ~ A ~ A ~ A ~@3 A ~@6 A ~@2 A ~@9 A@3 ~ A ~ A ~
  A@4 ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(2.93)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@9 A@2 ~ A B ~ A ~ A ~@4 B ~@4 A ~ A B A ~ A B A ~@5 B ~@2 B@2 ~@9 A ~ A ~ A ~ A ~ A ~@3 B ~@6 B ~@2 B ~@9 A B A ~ A
  ~ A ~ A@4 ~@2
>`.pickRestart({
  A: "x!8", B: "x!4",
})).gain(0.58)

stack(
  overdriven_guitar, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine, cabasa, shaker
)

More by The Who