Strudelify

Me & My Old Lady

The Offspring

KeyA majorTempo117 bpm
0:00/0:00
// Me & My Old Lady — The Offspring
// 117 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 8 "Guit1B" distortion guitar (copy of ch 2 "Guit1" distortion guitar); ch 4 "Guit2B" overdriven guitar (copy of ch 3 "Guit2" distortion guitar, 0.083 beats late); ch 6 "Guit2C" overdriven guitar (copy of ch 3 "Guit2" distortion guitar, 0.167 beats late)
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(117/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 · distortion guitar · "Guit1"
const distortion_guitar = note(`<
  ~@6 A B@2 C D C D E F E F G H E F E F E F G H E F E F E F G H E F I J K L I J K L I J K M N O P@2 C D C D E F E F E F
  E F E F E F G H E F E F E F G H E F I J K L I J K L I J K M N O P@2 C D C D E F E F E F E F E F E F G H E F E F E F G
  H E Q R S T@5
>`.pickRestart({
  A: "~@3 [b2,e3,c#6]", B: "[[e2,b2,e3,b3,e4]@15 e5]/2",
  C: "[e3,b3,e4]@2 [e3,b3,e4]@2 [d3,a3,d4]!3 [e3,b3,e4]@2 [f3,c4,f4] [f3,c4,f4]@2 [a3,e4,a4]@2 [f3,c4,f4]@2", // E5 D5 E5 F5 A5 F5
  D: "[e3,b3,e4]@2 [e3,b3,e4]@2 [d3,a3,d4]!3 [e3,b3,e4]@2 [g#3,b3,e4]!3 [e4,b4,e5]@4", // E5 D5 E5 E E5
  E: "[e3,b3]@2 [e3,b3]@2 [d3,a3]!3 [e3,b3]@2 [f3,c4] [f3,c4,f4]@2 [a3,e4,a4]@2 [f3,c4]@2", // E5 D5 E5 F5 A5 F5
  F: "[e3,b3]@2 [e3,b3]@2 [d3,a3]!3 [e3,b3]@2 [g#3,b3,e4]!3 [e4,b4,e5]@4", // E5 D5 E5 E E5
  G: "[a2,e3]@2 [a2,e3]@2 [g2,d3]!3 [a2,e3]@2 [a#2,f3] [a#2,f3,a#3]@2 [d3,a3,d4]@2 [a#2,f3]@2", // A5 G5 A5 A#5 D5 A#5
  H: "[a2,e3]@2 [a2,e3]@2 [g2,d3]!3 [a2,e3]@2 [c#3,e3,a3]!3 [a3,e4,a4]@4", // A5 G5 A5 A A5
  I: "[e2,e3,a3,d4,f#4]@2 [e2,e3,b3,e4,g#4]!2 [e2,e3,a3,d4,f#4]!2 [e2,e3,b3,e4,g#4]!2 ~@6 [e2,a2,d3]!2", // D E D E Dsus2
  J: "[d3,g3,c4,e4]@2 [d3,a3,d4,f#4]!2 [d3,g3,c4,e4]!2 [d3,a3,d4,f#4]!2 ~@6 [e2,a2,d3]!2", // C D C D Dsus2
  K: "[a2,d3,g3,b3]@2 [a2,e3,a3,c#4]!2 [a2,d3,g3,b3]!2 [a2,e3,a3,c#4]!2 ~@6 [e2,a2,d3]!2", // G A G A Dsus2
  L: "[e2,e3,a3,d4,f#4]@2 [e2,e3,b3,e4,g#4]!2 [e2,e3,a3,d4,f#4]!2 [e2,e3,b3,e4,g#4]!2 ~@6 [e2,e3,b3]!2", // D E D E E5
  M: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [e3,a3,d4,f#4]!2 [e3,b3,e4,g#4] [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4] [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4]@2", // D E
  N: "[e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]!3 [d3,a3,d4]", O: "[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]!3 [a2,d3,g#3]",
  P: "[a2,e3,a3,c#4]/2", Q: "[e3,b3]@2 [e3,b3]@2 [d3,a3]!3 [e3,b3,e4]@5 [e3,b3,e4]@2 [e3,b3,e4]!2",
  R: "[d3,d4]@5 [d3,d4]!2 [c#3,c#4]", S: "[c#3,c#4]@10 [c#3,c#4]@2 [c#3,c#4]@2 [e2,b2,b3]!2",
  T: "[~ [e2,b2,b3]@70 ~@9]/5", // E5
})).s("gm_distortion_guitar").gain(0.48).pan(0.4)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A B C B C B C B C B C B C D E B C B C B C D E B C B C B C D E B C F G H F@2 G H F@2 G H I J K L@2 B C B C B C B C
  B C B C B C B C D E B C B C B C D E B C F G H F@2 G H F@2 G H I J K L@2 B C B C B C B C B C B C B C B C D E B C B C B
  C D E B M N O P@5
>`.pickRestart({
  A: "~@3 e3", B: "e2@2 e2@2 d2!3 e2@2 f2 f2@2 a2@2 f2 e2", C: "e2@2 e2@2 d2!3 e2@2 ~@3 e3@4",
  D: "a1@2 a1@2 g1!3 a1@2 a#1 a#1@2 d2@2 a#1 a1", E: "a1@2 a1@2 g1!3 a1@2 ~@3 a2@4", F: "e2!8 ~@8", G: "d2!8 ~@8",
  H: "a1!8 ~@8", I: "e2!7 e2@2 e2@2 e2 e2@2 e2@2", J: "e2@2 e2@2 e2!3 d2", K: "d2@2 d2@2 d2!3 a1", L: "a1/2",
  M: "e2@2 e2@2 d2!3 e2@5 e2@2 e2!2", N: "d2@3 d2@2 f#2 a2 c#3", O: "c#2@3 c#2@2 e2 g#2 b2", P: "[~ e1@70 ~@9]/5",
})).s("gm_electric_bass_finger").gain(0.64)

// other · distortion guitar · "Guit2"
const distortion_guitar_2 = note("<~@21 A B C D E F G H ~@103>".pickRestart({
  A: "g#4@13 e4 g#4 a4", B: "a4@6 b4 a4", C: "a4@5 g#4 a4 f4", D: "f4@7 e4@2 e4!3 e4@2 e4@2",
  E: "e4@6 e4 e4@3 a3 b3 d4 e4@2 g#4", F: "g#4@5 b4@2 a4", G: "b4 d5@2 b4!2 b4@2 a4",
  H: "b4@2 d5@2 b4@2 a4 b4@2 g#4!2 a#4 b4@4",
})).s("gm_distortion_guitar").gain(0.64).pan(0.4)

// other · music box · "Voc2"
const music_box = note("<~@45 A@2 ~@2 B@2 ~@5 C ~@32 A@2 ~@2 B@2 ~@5 C ~@31>".pickRestart({
  A: "[~@6 e5 f#5@2 e5 c#5 f#5@2 e5 ~@2]/2", B: "[~@2 g#5@2 f#5 e5@2 f#5@2 ~@7]/2", C: "~@3 e6",
})).s("gm_music_box").gain(0.51).pan(0.6)

// other · pad warm · "Ambience"
const pad_warm = note("<~ A@3 ~@128>".pickRestart({
  A: "e2/3",
})).s("gm_pad_warm").gain(0)

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

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A B@11 A B@14 C B@8 C@4 A B ~@2 A B@3 A B@31 C@4 A B ~@2 A B@3 A B@23 ~@7
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A@3 ~@11 A ~@23 B@4 A ~ A ~ A ~@3 A ~@31 B@4 A ~ A ~ A ~@3 A ~@23 A@2 C ~@4
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@14",
})).gain(0.45)

// drums · shaker
const shaker = s("sh").struct("<~@9 A@27 B ~@16 A@27 B ~@16 A@28 ~@7>".pickRestart({
  A: "x!8", B: "x!6 ~@2",
})).gain(0.35)

stack(distortion_guitar, bass, distortion_guitar_2, music_box, pad_warm, kick, snare, low_tom, open_hat, crash, shaker)

More by The Offspring