Strudelify

I Wanna Be Sedated

Joey Ramone

KeyE majorTempo165 bpm
0:00/0:00
// I Wanna Be Sedated — Joey Ramone
// 165 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar, Guitar.
setcpm(165/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 · electric bass pick · "Bass"
const bass = note(`<
  A B A B A B C B@3 D B E B E B E B D E B F B F G B@2 H G F I F I F I F G I F J K H@2 J K H B F L M I L@2 N I M O M O M
  O M I O L M L M I L@2 N I M O M O M O M I O M I O M@2 I O L P I O L M I O Q
>`.pickRestart({
  A: "d#1 e1!7", B: "e1!8", C: "a1@2 a1!6", D: "a1!8", E: "b1!8", F: "e1@2 e1@2 e1@2 e1@2 e1@2 e1@2 e1@2 e1 ~",
  G: "a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1 ~", H: "e1@2 e1@2 e1@2 e1 ~ e1@2 e1@2 e1@2 e1 ~",
  I: "b1@2 b1@2 b1@2 b1@2 b1@2 b1@2 b1@2 b1 ~", J: "a1@2 a1@2 a1@2 a1 ~ a1@2 a1@2 a1@2 a1 ~",
  K: "b1@2 b1@2 b1@2 b1 ~ b1@2 b1@2 b1@2 b1 ~", L: "f#1!8", M: "f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1 ~",
  N: "f#1@2 f#1@2 f#1@2 f#1 ~ f#1@2 f#1@2 f#1@2 f#1 ~", O: "c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2 ~",
  P: "f#1 ~ f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1 ~", Q: "f#1@15 ~",
})).s("gm_electric_bass_pick").gain(0.35)

// chords · distortion guitar · "Guitar"
const distortion_guitar = note("<~@21 A ~@6 B ~@17 C A ~@16 D E ~@24 F ~@7>".pickRestart({
  A: "~@6 b3 ~", B: "~@9 a2@2 ~@5", C: "[e3,b3,e4] ~@15", D: "c#4 ~@15", E: "~@6 c#4 ~", F: "[f#3,f#4] ~@7",
})).s("gm_distortion_guitar").gain(0.33).pan(0.3)

// other · distortion guitar · "Guitar"
const distortion_guitar_2 = note(`<
  ~@12
  [e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4 ~]!8
  ~@10
  [e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4 ~]!8
  [e4!4]!8
  ~@44
  [f#4!4]!7
  [f#4@13 ~@3]
>`).s("gm_distortion_guitar").gain(0.22).pan(0.6)

// chords · distortion guitar · "Guitar"
const distortion_guitar_3 = note(`<
  A B C D E F G H I@2 G J K L K L M N O P Q R S T U T I@2 G I K V M V W V X Y Z AA K AB AC AA K Z AD R AE AF AG AF AH@2
  AI AH AJ AK AL AK AM AK M AN AO AP AE AF AG AF AH@2 AI AH AJ AK AL AK AM AK M AN AQ K AJ AR AS K AJ AQ AT K AJ AR AS K
  AJ AU
>`.pickRestart({
  A: "[d#2,a#2,d#3]@2 [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // D#5 E5
  B: "[e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  C: "[d#2,a#2,d#3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2", // D#5 E5
  D: "[e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2", // E5
  E: "[e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2", // E5
  F: "[e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~", // E5
  G: "[a2,e3]@4 [a2,e3]@4 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] ~", // A5
  H: "[e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  I: "[e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  J: "[b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  K: "[b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] ~", // B5
  L: "[e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  M: "[b2,f#3] ~ [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] ~", // B5
  N: "[e2,b2] ~ [e2,b2]@2 [e2,b2]@2 [e2,b2] ~ [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2] ~", // E5
  O: "[a2,e3] ~ [a2,e3]@2 [a2,e3]@2 [a2,e3] ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] ~", // A5
  P: "[b2,f#3] ~ [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] ~ [b2,f#3] ~ [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] ~", // B5
  Q: "[e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  R: "[e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [b2,e3]@2 e2 ~ e2@2 [e2,b2,e3]@2", // E5
  S: "[e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~", // E5
  T: "[e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  U: "[a2,e3]@3 ~ [a2,e3]@4 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] ~", // A5
  V: "[e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  W: "[b2,f#3] ~ [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2", // B5
  X: "[a2,e3] ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] ~", Y: "[b2,f#3]!8",
  Z: "[e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2] ~", // E5
  AA: "[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] ~", AB: "[e2,b2]!8",
  AC: "[e2,b2] ~ [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2]@2 [e2,b2] ~", // E5
  AD: "~@2 [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // E5
  AE: "[f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~", // F#5
  AF: "[f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~", // F#5
  AG: "[b2,f#3]@3 ~ [b2,f#3]@4 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] ~", // B5
  AH: "[f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~", // F#5
  AI: "[b2,f#3]@4 [b2,f#3]@4 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] ~", // B5
  AJ: "[c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3] ~", // C#5
  AK: "[f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~", // F#5
  AL: "[c#3,g#3] ~ [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3] ~", // C#5
  AM: "[c#3,g#3] ~ [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2", // C#5
  AN: "[c#3,g#3]!8", // C#5
  AO: "f#2 ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~", // F#5
  AP: "[f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [c#3,f#3]@2 f#2 ~ f#2@2 [f#2,c#3,f#3]@2", // F#5
  AQ: "[f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3] ~", // F#5
  AR: "[f#2,c#3]!8", // F#5
  AS: "[f#2,c#3] ~ [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3] ~", // F#5
  AT: "c#3@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3] ~", // F#5
  AU: "[f#3,c#4,f#4]@15 ~, [f#2,c#3] ~@15", // F#5
})).s("gm_distortion_guitar").gain(0.33).pan(0.6)

// other · piano
const piano = note("<A@3 B ~@8 C A@6 B ~@10 A@7 D@3 ~@46 E@11 F>".pickRestart({
  A: "[e6,e7]!8", B: "[e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7] ~",
  C: "[e6,e7] ~ [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2 [e6,e7]@2", D: "[[e6,e7]!7 [e6,e7]@16 ~]/3",
  E: "[f#6,f#7]!8", F: "[f#6,f#7]@3 ~@13",
})).s("gm_piano").gain(0.35).pan(0.3)

// chords · electric guitar muted · "Guitar"
const electric_guitar_muted = note("<~@89 [~@14 b2 ~] [f#2 ~@15] ~@7>")
  .s("gm_electric_guitar_muted").gain(0.25).pan(0.2)

// other · distortion guitar · "Muted Guitar"
const distortion_guitar_4 = note("<~@38 A@8 ~@44 B@8>".pickRestart({
  A: "[~ e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4]/8",
  B: "[~ f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 ~@7]/8",
})).s("gm_distortion_guitar").gain(0.44).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[x ~@3 x!2 ~@2]!97 x>").gain(0.8)

// drums · clap
const clap = s("cp").struct("<~@38 [~@2 x ~@3 x!2]!8 ~@36 [~@2 x ~@3 x!2]!15 ~>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!45 [~@4 x ~@7 x!4] [~ x ~ x]!51 ~>").gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@38 A ~@2 B ~@3 C ~@36 A ~@2 B A ~@2 B A ~@2 B A ~@3>".pickRestart({
  A: "~ x ~@6", B: "~@3 x ~@4", C: "~@5 x ~@2",
})).gain(0.48)

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

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

// drums · ride
const ride = s("rd").struct("<x ~@11 [~ x!7]!8 ~@78>").gain(0.72)

// drums · tambourine
const tambourine = s("tb").struct("<~@38 [x!8]!8 ~@36 [x!8]!15 ~>").gain(0.56)

stack(
  bass, distortion_guitar, distortion_guitar_2, distortion_guitar_3, piano, electric_guitar_muted, distortion_guitar_4,
  kick, clap, snare, hihat, hihat_soft, open_hat, crash, ride, tambourine
)