Strudelify

Pretty Fly (For a White Guy)

The Offspring

KeyG majorTempo142 bpm
0:00/0:00
// Pretty Fly (For a White Guy) — The Offspring
// 142 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "guitar" distortion guitar (copy of ch 1 "guitar" overdriven guitar)
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(142/4)

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

// chords · overdriven guitar · "guitar"
const overdriven_guitar = note(`<
  ~@9 A B A B A B A C ~@8 D@2 E F D@2 E G D@2 E F H I J K A B A B A B A C ~@8 D@2 E F D@2 E G D@2 E F H I J K ~@4 L@3 M
  A B A B A B C N D@2 E F D@2 E G D@2 E F H I H I H I J K
>`.pickRestart({
  A: "[b2,f#3,b3]@3 [b2,f#3,b3] [f#2,c#3,f#3]@2 [a2,e3,a3]@2", B: "[b2,f#3,b3]@3 [b2,f#3,b3] [e3,b3,e4]@2 [d3,a3,d4]@2",
  C: "[b2,f#3,b3] ~@3", D: "[b2,f#3,b3]@3 [b2,f#3,b3] [f3,c4,f4] [f#3,c#4,f#4] [f3,c4,f4] [f#3,c#4,f#4]",
  E: "[d3,a3,d4]@3 [d3,a3,d4] [a2,e3,a3]@2 [d3,a3,d4]@2", F: "[e3,b3,e4]@3 [e3,b3,e4] [d3,a3,d4]@2 [a2,e3,a3]@2",
  G: "[d3,a3,d4] [e3,b3,e4]@2 [d3,a3,d4] [e3,b3,e4]@2 [d3,a3,d4]@2", // D5 E5 D5 E5 D5
  H: "[g3,d4,g4]@3 [g3,d4,g4] [d3,a3,d4]@2 [g3,d4,g4]@2", I: "[a3,e4,a4]@3 [a3,e4,a4] [e3,b3,e4]@2 [a3,e4,a4]@2",
  J: "[b2,f#3,b3]!2 [f#3,c#4,f#4] [f3,c4,f4] [e3,b3,e4] [b2,f#3,b3] [d3,a3,d4] [e3,b3,e4]", K: "[b2,f#3,b3] ~@7",
  L: "[b2,f#3,b3]@2 ~@5 [a2,e3,a3]", M: "[b2,f#3,b3]!4 [a2,e3,a3] [f#2,c#3,f#3] [e2,b2,e3] [d2,a2,d3]",
  N: "~@3 [b2,f#3,b3] [e3,b3,e4]@2 [d3,a3,d4]@2", // B5 E5 D5
})).s("gm_overdriven_guitar").gain(0.47).pan(0.3)

// chords · distortion guitar · "guitar" · B5
const distortion_guitar = note(`<
  ~@17
  [~@2 [b3,f#4,b4] ~@2 [b3,f#4,b4] ~@2]!7
  ~@25
  [~@2 [b3,f#4,b4] ~@2 [b3,f#4,b4] ~@2]!7
  ~@53
>`).s("gm_distortion_guitar").gain(0.57)

// other · woodblock
const woodblock = note("<~ A@7 B ~@31 C ~@7 B ~@23 C ~@35 C>".pickRestart({
  A: "~@4 c5 ~@7 c5 ~@3", B: "~@2 c5 ~@3 c5 ~ c5 ~@3 c5 ~@3", C: "~@2 c#6 ~ f6 ~ g5 ~ g5 ~ f6 ~ f6 ~@3",
})).s("gm_woodblock").gain(0.47)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@9 A B A B A B A C A B A B A B A B D@2 E F D@2 E G D@2 E F H I J K A B A B A B A B A B A B A B A B D@2 E F D@2 E G
  D@2 E F H I J K L@3 M L@3 N A B A B A B C O D@2 E F D@2 E G D@2 E F H I H I H I J K
>`.pickRestart({
  A: "b1@3 b1 f#1@2 a1@2", B: "b1@3 b1 e2@2 d2@2", C: "b1 ~@3", D: "b1@3 b1 f2 f#2 f2 f#2", E: "d2@3 d2 a1@2 d2@2",
  F: "e2@3 e2 d2@2 a1@2", G: "d2 e2@2 d2 e2@2 d2 e2", H: "g2@3 g2 d2@2 g2@2", I: "a1@3 a1 e1@2 a1@2",
  J: "b1!2 f#2 f2 e2 b1 d2 e2", K: "b1 ~@7", L: "b1@2 ~@5 a1", M: "b1 ~ b1!2 e2@2 d2@2, ~ b2@2 ~@5",
  N: "b1 b2 a2 f#2 a2 f#2 e2 d2", O: "~@3 b1 e2@2 d2@2",
})).s("gm_electric_bass_finger").gain(0.8)

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

// drums · rim
const rim = s("rim").struct("<~@73 A B A B A B A B A B A B A B ~@22>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x!2 ~ x!2 ~",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@9 A@7 ~ A@7 ~ A@14 B C A@7 ~ A@7 ~ A@14 B C ~@7 D A@6 E F A@18 B C>".pickRestart({
  A: "~ x ~ x", B: "x!8", C: "x", D: "~ x ~@2 x!3 ~", E: "~ x!7", F: "x!3 ~ x ~ x ~",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<A ~@23 B ~@31 B ~@30 C D ~@18 E F>".pickRestart({
  A: "~@5 x!3", B: "~@6 x!2", C: "~@3 x!5", D: "x!3 ~@5", E: "x!8", F: "x",
})).gain(0.8)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@16 [~@5 x!3] ~@70 [~ x ~@2] ~@21>").gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<[~@2 x!3 ~@3] ~@15 [~@3 x!2 ~@3] ~@7 [~@2 x!4 ~@2] ~@31 [~@2 x!4 ~@2] ~@52>").gain(0.8)

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

// drums · high tom
const high_tom = s("ht").struct("<[x ~ x!2 ~@12] ~@108>").gain(0.8)

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

// drums · ride
const ride = s("rd").struct("<~@37 A B C ~@29 A B C ~ D E D E D E D F D E D E D E ~@14 A B A B A B C ~>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x", D: "~@2 x!2 ~@2 x ~", E: "~@2 x!2 ~ x!2 ~", F: "~@2 x!2 ~@4",
})).gain(0.8)

// drums · cowbell
const cowbell = s("cb").struct("<~@40 A ~@31 A B C B C B C B D B C B C B C ~@21 A>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@3 x", C: "~@5 x!2 ~", D: "~@4 x!3 ~",
})).gain(0.8)

// drums · bongos
const bongos = s("bongo:4").struct("<~@73 [~ x ~@2]!14 ~@22>").gain(2.1)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~ A@7 B ~@31 C ~@7 B ~@23 C ~@35 C>".pickRestart({
  A: "~ x ~ x", B: "~ x ~ x!2 ~ x ~", C: "~@2 x ~@2 x!2 ~",
})).gain(2.1)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@73 [x!8]!8 ~@28>").gain(4.06)

// drums · guiro
const guiro = s("guiro:4").struct("<~ [x!2]!7 ~@65 [x!2]!8 ~@28>").gain(16.9)

stack(
  overdriven_guitar, distortion_guitar, woodblock, bass, kick, rim, snare, low_tom, low_tom_soft, hihat, mid_tom,
  open_hat, high_tom, crash, ride, cowbell, bongos, bongos_2, cabasa, guiro
)

More by The Offspring