Strudelify
Wrong Way cover art

Sublime

Wrong Way

Sublime

KeyA majorTempo148 bpm
0:00/0:00
// Wrong Way — Sublime
// 148 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: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(148/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.

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  A@2 B@5 C@4 D E F E F E G H I J K L K J K L M F M N M F O P Q F R F R F R F S E F E F E F T ~@8 U F M F V F V W X F R
  F R F R Y Z F M F M F M ~@2
>`.pickRestart({
  A: "[~@13 [b2,e3]@15 [b2,e3]@3 d#3, ~@13 b3@19]/2", // E5
  B: "[d3 a3@5 ~@10 [a2,d3]@4 [d#3,e3] ~ b3@5 ~@13 d#3 d3 a3@5 ~@13 d#3 e3 b3@8 ~@8 [b2,e3,b3,e4]@2, ~ [a2,d3]@15 ~@6 [b2,e3]@15 [b2,e3]@5 [a2,d3]@15 [a2,d3]@5 [b2,e3]@16 ~@2, ~@6 a3@15 ~@6 b3@15 ~@5 a3@15 ~@8 b3@8 ~@2, ~@9 f#4@8 ~@12 g#4@8 ~@13 f#4@8 ~@17 g#4@5, ~@14 d4@8 ~@12 e4@8 ~@13 d4@8 ~@17]/5", // D5 Emaj7 E5 D5 E5 D5 E5
  C: "[[a3,a#3] ~@2 a3@5 ~@13 d#3 e3 ~@8 e4@5 e4@5 ~@3 [a2,d3,a3]@20, ~@3 [a2,d3]@15 [a2,d3]@5 [b2,e3,b3]@20 ~@21, ~@8 a3@15 ~@41, ~@5 f#4@4 ~@23, ~@2 d4 ~@5]/4", // A#maj7 D5 E5
  D: "[c#4,e4,a4]@2 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~", // A
  E: "~@2 [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~", // G
  F: "~@2 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~", // A
  G: "~@2 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] [f4,a#4]", // A A#5
  H: "[f#4,b4] ~ [c4,e4,g4,c5] ~@3 [c4,e4,g4,c5] ~@3 [c4,e4,g4,c5] ~@3 [c4,e4,g4,c5] ~", // B5 C
  I: "a#4@2 [f#3,c#4,f#4] ~@3 [f#3,c#4,f#4,a#4] ~@3 [f#3,c#4,f#4,a#4] ~@3 [f#3,c#4,f#4,a#4] ~", // F#5 F#
  J: "~@2 [f#3,c#4,f#4,b4] ~@3 [f#3,c#4,f#4,b4] ~@3 [f#3,c#4,f#4,b4] ~@3 [f#3,c#4,f#4,b4] ~", // F#sus4
  K: "~@2 [f#3,c#4,f#4,a#4] ~@3 [f#3,c#4,f#4,a#4] ~@3 [f#3,c#4,f#4,a#4] ~@3 [f#3,c#4,f#4,a#4] ~", // F#
  L: "~@2 [f#3,b3,e4,g#4] ~@3 [f#3,b3,e4,g#4] ~@3 [f#3,b3,e4,g#4] ~@3 [f#3,b3,e4,g#4] ~", // E
  M: "~@2 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~", // B
  N: "~@2 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] [d4,d#4,g4,g#4]", // A D#maj7
  O: "~@2 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] [e4,f4,g4,g#4,c5,c#5]", // B C#maj7
  P: "[f#4,a4,d5] ~ [d4,f#4,a4,d5] ~@3 [d4,f#4,a4,d5] ~@3 [d4,f#4,a4,d5] ~@3 [d4,f#4,a4,d5] ~", // D
  Q: "[e3,b3,e4,g#4]@3 ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~", // E
  R: "~@2 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~", // E
  S: "[a3,c#4,e4,a4]@3 ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~", // A
  T: "~@2 [c4,e4,g4,c5] ~@3 [c4,e4,g4,c5] ~@3 [c4,e4,g4,c5] ~@3 [c4,e4,g4,c5] ~", // C
  U: "[f#3,b3,d#4,f#4]@3 ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~", // B
  V: "[f4,a#4] ~ [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~", // A#5 B
  W: "~@2 [d4,f#4,a4,d5] ~@3 [d4,f#4,a4,d5] ~@3 [d4,f#4,a4,d5] ~@3 [d4,f#4,a4,d5] ~", // D
  X: "[e3,b3,e4,g#4]@2 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~", // E
  Y: "~@2 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4]@2", // A
  Z: "[b3,d#4,f#4,b4]@2 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~", // B
})).s("gm_distortion_guitar").gain(0.39).pan(0.6)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@5 A@6 B C D C D C D E F G F H F I F I J K J K J K J L M N O N M N M N D P D P D P D E Q R Q M Q R S T U K U K U K U
  V W X M N M N M N J K J K J K J Y@2
>`.pickRestart({
  A: "[~@7 e1@2 e1@5 e1@20 ~ d1@20 e1@20 ~ d1@20]/6", B: "a1 ~ a1 ~ e2 ~ e2 ~ g2@3 ~ a2 ~ a2 ~",
  C: "g1 ~ g1 ~ d2 ~ d2 ~ f2 ~ f2 ~ f#2 ~ g2 ~", D: "a1 ~ a1 ~ e2 ~ e2 ~ g2 ~ g2 ~ a2 ~ a2 ~",
  E: "c2 ~ c2 ~ g2 ~ g2 ~ a#2 ~ a#2 ~ b2@2 c3 ~", F: "f#2@3 ~@3 f#2 ~ c#3 ~ c#3 ~ c#2 ~ c#2 ~",
  G: "e2@3 ~@3 e2@2 b2@4 c#2@4", H: "e2@3 ~@3 e2 ~ b2 ~ b2 ~ c#2@3 ~", I: "e2@3 ~@3 e2 ~ b2 ~ b2 ~ c#2 ~ c#2 ~",
  J: "b1 ~ b1 ~ f#2 ~ f#2 ~ a2 ~ a2 ~ b2 ~ b2 ~", K: "a1 ~ a1 ~ e2 ~ e2 ~ g2 ~ g2 ~ g#2 ~ a2 ~",
  L: "d2 ~ d2 ~ a2 ~ a2 ~ c3 ~ c3 ~ d3 ~ d3 ~", M: "e2@4 ~@2 e2 ~ b2 ~ b2 ~ b1 ~ b1 ~",
  N: "d2@4 ~@2 d2 ~ a2 ~ a2 ~ a1 ~ a1 ~", O: "e2@4 ~@2 e2@2 b2@4 b1@3 ~", P: "g1 ~ g1 ~ d2 ~ d2 ~ f2 ~ f2 ~ g2 ~ g2 ~",
  Q: "f#2@4 ~@2 f#2 ~ c#3@3 ~ c#3@3 ~", R: "e2@4 ~@2 e2 ~ b2@3 ~ b2@3 ~", S: "f#2@4 ~@2 c#3 ~ c#3 ~ c#3 ~ c#3@3 ~",
  T: "f#2 f#3 g#2 g#3 a2 a3 g#2 g#3", U: "b1 ~ b1 ~ f#2 ~ f#2 ~ a2 ~ a2 ~ a#2 ~ b2 ~",
  V: "d2@2 d2 ~ a2@2 a2 ~ c3@2 c3 ~ c#3@2 d3@2", W: "e2 ~ e2 ~@3 e2 ~ b2 ~ b2 ~ b1 ~ b1 ~",
  X: "d2@4 ~@2 d2 ~ a2 ~ a2 ~ a1@4", Y: "[d2@3 e1@3 d2@7 b1@16 ~@3]/2",
})).s("gm_fretless_bass").gain(0.44)

// other · trumpet
const trumpet = note("<~@50 A B C D E F@2 G H ~@7 I J ~@2 K L@3 M ~ N O P Q R ~@3>".pickRestart({
  A: "[a3,a#3,b3] ~@15, c4@7 ~", B: "~@4 f#3 c#4 a#3 f#3 [c#3,a#3] c#4 a#3 f#3 a#3 c#4 a#3 [c#3,f#3]",
  C: "a#3 c#4 f#3 c#4 a#3 f#3 c#3 a#3 c#4 a#3 f#3 a#3 c#4 a#3 [c#3,f#3] a#3", D: "c#4@2 ~@8 c#4 ~ f#4 ~ f#4 ~",
  E: "f#4@3 ~ e4 ~ e4 ~ e4@3 ~ f#4 ~ f#4 ~",
  F: "[a4@2 a#4@2 a4@2 a#4@2 f#4@3 ~@3 g#4@4 a4@2 g#4@2 a4@2 e4@3 ~@3 f#4 ~]/2",
  G: "a4@2 a#4 ~ b4@2 c5 ~ c#5@3 ~ f#4@3 ~", H: "e4@3 ~ e4@2 e4@2 g#4@2 g#4@2 b4@4", I: "~@5 e4 f#4 g4",
  J: "g#4@3 ~@13", K: "d5 e5 d5 c#5 b4 g#4 a4 g4", L: "[g#4 e4 b3 a3 g#3@16 ~@4]/3", M: "~@4 c#4@2 b3 g#3",
  N: "~@8 a3@2 a3@2 c#4@3 ~", O: "d#4 b3 ~@2", P: "c#4!2 e4@2 g#4@2 f#4 e4", Q: "d#4@2 b3 b3@3 ~@2",
  R: "c#4@2 a3 a3@2 ~@3",
})).s("gm_trumpet").gain(0.61).pan(0.4)

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

// drums · rim
const rim = s("rim").struct("<~@51 [~ x ~ x]!7 [~ x ~@2] ~@25>").gain(0.48)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@22 A ~@3 B ~@7 C ~@15 B ~@7 B ~@3 B ~@7 A ~@13>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@5 x ~@2", C: "~@12 x!3 ~",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@58 [~ x] ~@7 [~@10 x!3 ~ x ~] ~@7 [~@10 x!2 ~@4] ~@9>").gain(0.48)

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

// drums · open hat
const open_hat = s("oh").struct("<~@22 A ~@3 B ~@23 B ~@15 C ~@3 A ~@7 D ~@5>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x", C: "x", D: "~@7 x",
})).gain(0.48)

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

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@10 A B@7 C B@3 D B@3 E B@7 F B@7 E B@7 G ~@7 H B@3 I B@3 J B@3 D B@3 E B@7 K ~
>`.pickRestart({
  A: "~@13 x ~@2", B: "~ x ~ x", C: "~@4 x ~@3 x!5 ~ x ~", D: "~@4 x ~@6 x ~@2 x ~", E: "~@2 x ~@3 x!2", F: "~ x ~@2",
  G: "~@2 x ~@4 x", H: "~@6 x!2", I: "~@4 x ~@5 x!2 ~@2 x ~", J: "~@2 x!3 ~@11", K: "x ~@5 x ~@6 x ~@2",
})).gain(0.48)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@22 [~@5 x ~@2] ~@43 [~@2 x!3 ~ x!3 ~ x!3 ~ x ~] ~@3 [~@5 x ~@2] ~@13>")
  .gain(0.24)

// drums · ride
const ride = s("rd").struct("<~@5 [~@9 x!2 ~@3 x ~] ~@2 [~ x ~ x ~@4 x ~@7] [~@6 x!3 ~@7] ~@74>").gain(0.72)

stack(
  distortion_guitar, bass, trumpet, kick, rim, snare, snare_soft, low_tom, hihat, open_hat, mid_tom, crash, high_tom,
  high_tom_soft, ride
)

More by Sublime