Strudelify

Hey Jealousy

Gin Blossoms

KeyD majorTempo152 bpm
0:00/0:00
// Hey Jealousy — Gin Blossoms
// 152 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 141 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(152/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 · synth bass 2 · "Bass"
const bass = note(`<
  A B@2 C@2 B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 E@4 F@3 G B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 E@4 F@3 H
  B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 E@4 F@3 G B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 B@2 D@2 E@4 F@3 G B@2 D@2 B@2 D@2
  B@2 D@2 B@2 I@6
>`.pickRestart({
  A: "~@4 b1 c#2 b1 a1", B: "[d1@2 d1@2 d1@2 d1 e1@3 e1@2 e1@2 e1@2]/2",
  C: "[f#1@2 f#1@2 f#1@2 f#1 e1@3 e1@2 b1 c#2 b1 a1]/2", D: "[f#1@2 f#1@2 f#1@2 f#1 e1@3 e1@2 e1@2 e1@2]/2",
  E: "[a1 ~ a1 e1 f#1 a1 f#1 d1@4 d1@2 c#1 d1 ~]/2", F: "[f#1@2 f#1 ~ f#1!3 e1@3 e1 ~ e1!3 d1@3 d1@2 d1!4]/3",
  G: "~ d2@2 d1 d2@2 d1@2, d1 ~@3", H: "d1 d1@2 d1 d1@2 d1@2",
  I: "[f#1@4 f#1@4 f#1@4 f#1@2 e1@6 e1@5 b1@3 c#2@3 b1@3 a1@4 d1@46 ~@12]/6",
})).s("gm_synth_bass_2").gain(0.64)

// chords · electric guitar clean · "Clean GTR"
const electric_guitar_clean = note(`<
  ~@9 A B C B A B C B ~@16 A B C B A B C B A B C B A B C B ~@40 A B C B A B C B A B C B A B C B ~@16 A B C B A B C B
  ~@12
>`.pickRestart({
  A: "~ a3 ~@2 e4@4, d3@7 ~, ~ d4 ~@2, ~@3 a3@5", B: "~ e4@2 b3@4 ~, e3@7 ~", C: "~ f#3 ~@2 c#4@4, ~ a3 ~@2, ~@3 f#3@5",
})).s("gm_electric_guitar_clean").gain(0.33)

// chords · distortion guitar · "Dist GTR"
const distortion_guitar = note(`<
  A B@2 C@2 B@2 C@2 D E F G H I J K B@2 C@2 B@2 C@2 L M N O L P Q@2 ~@8 D E F G H I J K B@2 C@2 B@2 C@2 L M N O L P Q@2
  ~@16 L M N O L P Q@2 ~@8 D E F G H I J K B@2 C@2 B@2 C@2 L M N O L P Q@2 D E F G H I J K B@2 C@2 B@2 R@6
>`.pickRestart({
  A: "~@4 b2 c#3 b2 a2", B: "[~@2 [f#3,a3]@5 ~@3 [g#3,b3]@6, [a2,d3]@7 [b2,e3]@9]/2",
  C: "[~@2 [a3,c#4]@5 ~@3 [g#3,b3]@6, [c#3,f#3]@7 [b2,e3]@9]/2", // A G#m F#5 E5
  D: "[a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,b2,e3]@2", // D5 Asus2
  E: "~@4 [b2,e3] ~ e3 ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
  F: "c#3 ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [b2,e3]@2, ~@14 c#3 ~", // F#5 E5
  G: "~@4 e3 ~ e3 ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
  H: "[a2,d3] ~ d3 ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [b2,e3]@2", // D5 E5
  I: "~@4 e3 ~@3 [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
  J: "[c#3,f#3] ~ c#3 ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [b2,e3]@2", // F#5 E5
  K: "~@4 [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", L: "[a3,a4]",
  M: "[g#3,g#4] [f#3,f#4] ~ [e3,e4]@2 [f#3,f#4]@3", N: "[e3,e4]", O: "[d3,d4] [c#3,c#4] ~ [b2,b3]@2 [c#3,c#4]@3",
  P: "[b3,b4]", Q: "[a3,a4]/2",
  R: "[~@2 [a3,c#4]@5 ~@3 [g#3,b3]@9 [a2,d3,e4,a4]@23 ~@6, [c#3,f#3]@7 [b2,e3]@12 ~@29]/6", // A G#m Asus4 F#5 E5
})).s("gm_distortion_guitar").gain(0.48)

// other · distortion guitar · "Lead GTR"
const distortion_guitar_2 = note("<~@65 A B C D E@2 F G H@2 I@2 J K L@2 ~@60>".pickRestart({
  A: "a4", B: "a4 g#4 ~ f#4 ~ e4 ~ e4", C: "e4 f#4 a4 e4 f#4 a4 e4 f#4", D: "~@4 b3 c#4 b3 ~, e4@5 ~@3",
  E: "[b3@2 a3@6 e3@2 f#3@2 a3@3 b3@3 c#4 b3 a3@4 e3@2 f#3@2 a3@3 ~]/2", F: "e4@2 f#4@2 a4@2 e4@2 f#4@2 a4@2 b4 ~ b4@2",
  G: "a4@9 ~ e4 ~@3 e4 ~", H: "[e4,a4] ~@3 [e4,a4] ~@3 [e4,a4] ~@3 [e4,a4] ~@3",
  I: "[c#5@4 c#5@4 b4@2 a4@2 f#4@2 a4@4 e4@2 f#4@2 a4@6 c#5@2 b4 ~]/2", J: "b4 c#5 e5 b4 c#5 e5 b4 c#5",
  K: "e5 b4 c#5 f#5@3 e5 c#5", L: "[b4@4 b4 a4 f#4 a4@3 f#4 e4@5]/2",
})).s("gm_distortion_guitar").gain(0.48)

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

// drums · kick
const kick = s("bd").struct(`<
  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 B C B C B C B C B C B D 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 B C B D B C B C B C B C B C B C B C B C B C B C B C B D 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 B C B C B C B C B C B E F ~@3
>`.pickRestart({
  A: "~@5 x ~@2", B: "x ~@3 x!2 ~ x", C: "~ x ~@3 x ~@2", D: "~@2 x ~@7 x!2 ~@2 x ~", E: "~ x ~@4 x ~", F: "~@3 x ~@4",
})).gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct("<A ~@23 B ~@31 B ~@7 B ~@15 B ~@31 B ~@23 C D ~@3>".pickRestart({
  A: "~@7 x", B: "~@12 x!4", C: "~@15 x", D: "~ x ~@6",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~ A@16 ~@8 A@24 ~@8 A@48 ~@8 A@16 ~@12>".pickRestart({
  A: "x!8",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@17 A@8 ~@24 A@8 ~@48 A@8 ~@16 A@7 B C ~@3>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@4 x ~@5 x", C: "~@3 x ~@4",
})).gain(0.32)

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

// drums · ride
const ride = s("rd").struct(`<
  ~ A B A B A B A B ~@16 C D C E C E C D ~@24 C D C E C E C D C D C E C E C D C D C E C E C D C D C E C E C D ~@24 C D C
  E C E C D ~@20
>`.pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "~ x!3", C: "x ~ x ~ x!2 ~ x", D: "~ x ~ x ~ x ~@2", E: "~ x ~ x ~ x!2 ~",
})).gain(0.64)

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

More by Gin Blossoms