Strudelify

Come Out and Play

The Offspring

KeyD majorTempo160 bpm
0:00/0:00
// Come Out and Play — The Offspring
// 160 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Noodles2" distortion guitar (copy of ch 2 "Noodles" overdriven guitar)
// note: Full arrangement: all 128 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): Dexter.
setcpm(160/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · electric guitar clean · "Dexter"
const electric_guitar_clean = note("<~@16 A B A B A B A ~@33 A B A B A B A ~@33 A B A B A B A B ~@24>".pickRestart({
  A: "~ c3 d#3 e3 ~ e3 d#3 c3", B: "~@3 c3 b2@4",
})).s("gm_electric_guitar_clean").gain(0.45)

// chords · overdriven guitar · "Noodles"
const overdriven_guitar = note(`<
  ~@3 A ~@4 B@8 C D C D C D C E C D C D C D C D F G F G C D H@2 B@3 E B@3 E B@2 I J B K B E C D C D C D C E C D C D C D
  C D F G F G C D H@2 B@3 E B@3 E B@2 I J B K B E C D C D C D C D F G F G C D H@2 B@3 E B@3 E B@2 I J B K B E
>`.pickRestart({
  A: "~@4 [b4,e5] ~@3 [b4,e5]@2 ~@2 [b4,e5]@3 ~", B: "[b2,f#3,b3]!3 [d3,a3,d4]!2 [f#2,c#3,f#3] [a2,e3,a3]!2",
  C: "[b2,f#3,b3] ~ [b2,f#3,b3] ~ [b2,f#3,b3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~", // B5 F#5 A5
  D: "[b2,f#3,b3] ~ [b2,f#3,b3] ~ [b2,f#3,b3] ~ [d3,a3,d4]!3 ~ [f#2,c#3,f#3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~", // B5 D5 F#5 A5
  E: "[b2,f#3,b3] ~@7", F: "[e3,b3,e4]!4 [g3,d4,g4]!4",
  G: "[f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [d3,a3,d4]@3 ~", // F#5 B5 D5
  H: "[f#3,c#4,f#4]!8", I: "[e3,b3,e4]!8", J: "[c3,g3,c4]!8", K: "[f#2,c#3,f#3]!6 [a2,e3,a3]!2",
})).s("gm_overdriven_guitar").gain(0.14).pan(0.8)

// bass · electric bass pick · "Greg Kriesel"
const bass = note(`<
  ~@8 A@8 B C B C B C B D E A E A E A E A F G F G E A H I A@3 D A@3 D A@2 J K A L A D B C B C B C B D E A E A E A E A F
  G F G E A H I A@3 D A@3 D A@2 J K A L A D B C B C B C B C F G F G E A H I A@3 D A@3 D A@2 J K A L A D
>`.pickRestart({
  A: "b1@2 b1 d2 ~ f#1 a1@2", B: "b1@3 f#1@2 f#1 a1@2", C: "b1@3 f#1@3 d2@2", D: "b1 ~@7", E: "b1@2 b1 f#1 ~ f#1 a1@2",
  F: "e2!2 g2!2", G: "f#2!3 b1@2 b1 d2@2", H: "f#2@2 f#2!6", I: "f#2!8", J: "e2!4", K: "c2!3 c2@2 c2 c2@2",
  L: "f#1@2 f#1!2 ~ f#1 a1@2",
})).s("gm_electric_bass_pick").gain(0.47)

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

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!3 ~ [~ x ~ x]!3 ~@121>").gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B@15 A B@14 C D B@3 A B@3 E B@7 A B@7 A B@14 C D B@3 A B@3 E B@7 A B@14 C D B@3 A B@3 E B@7 ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x", D: "~@8 x ~ x ~ x!4", E: "~ x ~@2 x ~@2 x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[x!5 ~ x!2]!3 x [x!5 ~ x!2]!3 x ~@120>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@38 A B ~@38 A B ~@30 A B ~@16>".pickRestart({
  A: "~@2 x!6", B: "x!6 ~@2",
})).gain(0.64)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 A ~@3 A ~@7 A ~@7 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~@3 A ~@7 A ~@7 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~
  A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@32 A B A B ~@14 A B ~@20 A B A B ~@14 A B ~@12 A B A B ~@14 A B ~@4>".pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.64)

stack(electric_guitar_clean, overdriven_guitar, bass, kick, rim, snare, hihat, low_tom, open_hat, crash, ride)

More by The Offspring