Strudelify

Say It Ain't So

Weezer

KeyE♭ majorTempo80 bpm
0:00/0:00
// Say It Ain't So — Weezer
// 80 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 84 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 finger · "Bass Guitar"
const bass = note(`<
  ~@2 A B A B C D A B A B A B A B C D A B A B A B E F E F E F E F A B C D A B A B A B A B E F E F E F E F G@8 H F H F H
  F H F H F H F H F H I ~@8
>`.pickRestart({
  A: "c2@6 g1@5 ~ f1 ~ g1@2", B: "ab1@3 eb2@3 g1 bb1", C: "~ c2@17 g1@8 ~@4 f1@3 ~@3 g1@11 ~",
  D: "ab1@7 ~@11 eb2@24 ~@6", E: "c2 ~ c2@2 ~@4 g1 ~ g1 ~@5", F: "ab1 ~ ab1 ~@3 eb2@3 ~ eb2 ~ eb2 ~ eb2 ~",
  G: "[bb2@4 ~@2 bb2@5 ~@7 bb2@6 a2@5 ~ a2@5 ~@7 a2@5 eb2@4 ~@2 eb2@5 ~@8 eb2@5 gb2@4 ~@2 gb2@4 ~@2 gb2@4 ~@2 gb2@4 ~@3]/2",
  H: "c2 ~ c2@2 ~@2 c2@2 g1 ~ g1 ~@3 g1@2", I: "ab1 ~ ab1 ~@3 eb2@3 ~@7",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note(`<
  A B A B A B A C A B A B A B A B A C A B A B A B ~@8 A B A C A B A B A B A B ~@32 A B A B A B A C
>`.pickRestart({
  A: "c3@9 [eb3,f3,g3,bb3,c4] ~@9 [d3,g3]@12 ~@8 g3@3 b3@2 ~ bb3@2 ~, ~@19 g2@9 ~@3 g2@11 ~@6, ~@6 d3 ~", // Cm7 G5
  B: "ab2@9 [c3,eb3,ab3] ~@9 [bb2,eb3,g3]@10 ~ eb3@6 f3@3 g3@3 bb3@4 ~@2", // Ab Eb
  C: "ab2@9 [c3,eb3,ab3] ~@9 [bb2,eb3,g3]@10 ~@19", // Ab Eb
})).s("gm_electric_guitar_jazz").gain(0.32)

// chords · electric guitar jazz · "Reggae Guitar"
const electric_guitar_jazz_2 = note(`<
  ~@4 A B A C A B A B A B A B A C A B A B A B ~@8 A B A C A B A B A B A B ~@40
>`.pickRestart({
  A: "~@7 [g3,c4,eb4]@5 ~@6 [g3,bb3,d4]@5 ~@7 [g3,bb3,d4]@4 ~@8 [g3,bb3,d4]@4 ~@2", // Cm Gm
  B: "~@6 [ab3,c4,eb4]@4 ~@8 [bb3,eb4,g4]@6 ~@6 [bb3,eb4,g4]@5 ~@7 [bb3,eb4,g4]@5 ~", // Ab Eb
  C: "~@3 [ab3,c4,eb4]@2 ~@4 [bb3,eb4,g4]@3 ~@12", // Ab Eb
})).s("gm_electric_guitar_jazz").gain(0.35).pan(0.2)

// chords · distortion guitar · "Overdrive Guitar"
const distortion_guitar = note("<~@23 A B@2 C@6 ~@11 A B@2 C@6 D E D E D E D E ~ F@4 G H I@3 J@6 K@6 ~@2>".pickRestart({
  A: "c4",
  B: "[~ [g3,c4,eb4]@4 ~ [c3,g3,eb4]@5 ~@12 [g2,g3,bb3,d4]@4 ~@2 [g2,g3,bb3,d4]@4 ~@14 [ab2,ab3,c4,eb4]@4 ~@2 [ab2,ab3,c4,eb4]@3 ~@10 [eb3,eb4,g4,bb4]@28 ~@2, c3@4 ~@2 c4@41 ~@49]/2", // Cm Gm Ab Eb
  C: "[~ [g3,c4,eb4]@4 ~ [c3,g3,c4,eb4]@4 ~@13 [g2,g3,bb3,d4]@4 ~@2 [g2,g3,bb3,d4]@4 ~@14 [ab2,ab3,c4,eb4]@4 ~@2 [ab2,ab3,c4,eb4]@3 ~@10 [eb3,eb4,g4,bb4]@28 ~@2, c3 ~@23]/2", // Cm Gm Ab Eb
  D: "[f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@5 ~@7 [f3,bb3,d4]@4 ~@2 bb3 ~ e4@3 ~ [f3,a3,d4]@4 ~@8 [f3,a3,d4]@3 ~@3, ~@6 [f3,d4] ~@5, ~@25 a3@3 ~@20", // Bb Dm
  E: "[g3,bb3,eb4]@2 ~ [g3,bb3,eb4]@2 ~@4 [g3,bb3,eb4]@2 ~ [gb3,bb3,eb4]@2 ~ [gb3,bb3,eb4]@2 ~@4 [gb3,bb3,eb4]@2 ~, e4 ~@23", // Eb Ebm
  F: "[~@38 c5@3 eb5@3 f5@3 g5@6 f5@6 eb5@6 d5@15 c5@4 d5@2 c5@3 d5@3 c5@3 d5@7 c5@6 bb4@5 g4@30 g5@6 f5@7 eb5@5 d5@16 c5@3 d5@2 c5@3 ~ d5@2 c5@3 ~]/4",
  G: "d5@6 c5@6 bb4@5 g4@30 bb4", H: "bb4@2 c5@3 eb5@3 ~@3 f5@3 eb5@4 d5@5 ~@25, ~@9 g5@5 ~@34",
  I: "[bb4@2 c5@3 eb5@3 g5@3 f5@3 eb5@3 ~@16 g5@2 ab5@3 g5@3 f5@3 g5 ~@4 [g3,c4,eb4]@4 ~ [c3,g3,c4,eb4]@4 ~@7 [c3,g3,c4,eb4]@5 ~ [g2,g3,bb3,d4]@4 ~@2 [g2,g3,bb3,d4]@4 ~@9 [g3,bb3]@3 ~@2 [ab2,ab3,c4,eb4]@4 ~@2 [ab2,ab3,c4,eb4]@3 ~@10 [eb3,eb4,g4,bb4]@28 ~@2, ~@17 d5@25 ~@5 eb5@15 ~@82, ~@48 c3@4 ~@37 [g2,d4]@4 ~@51]/3", // Cm Gm Ab Eb G5
  J: "[~ [g3,c4,eb4]@4 ~ [c3,g3,c4,eb4]@4 ~@7 [c3,g3,c4,eb4]@5 ~ [g2,g3,bb3,d4]@4 ~@2 [g2,g3,bb3,d4]@4 ~@9 [g3,bb3]@3 ~@2 [ab2,ab3,c4,eb4]@4 ~@2 [ab2,ab3,c4,eb4]@3 ~@10 [eb3,eb4,g4,bb4]@28 ~@2, c3@4 ~@37 [g2,d4]@4 ~@51]/2", // Cm Gm Ab Eb G5
  K: "[c4@277 ~@11]/6",
})).s("gm_distortion_guitar").gain(0.32).pan(0.2)

// chords · distortion guitar · "Electric Guitar"
const distortion_guitar_2 = note("<~@26 A ~ B C@2 D ~@12 E@8 F G F G F G F G ~@6 H@2 E@8 ~@8>".pickRestart({
  A: "c4 ~", B: "~@8 g3@7 ~", C: "[~@47 c4@25 ~@24]/2", D: "~@17 eb4@29 ~@2",
  E: "[~@12 [eb4,c5,eb5]@16 ~@8 [eb4,bb4,eb5]@17 ~@6 [eb4,ab4,eb5]@3 ~@3 [eb4,g4,eb5]@31]/2", // Cm Eb5 Ab5 Eb
  F: "~ [bb2,bb3]@4 ~@2 [bb2,bb3]@5 ~@6 [bb2,bb3]@5 ~ [a2,a3]@4 ~@2 [a2,a3]@4 ~@8 [a2,a3]@5 ~", // Bb A
  G: "[eb2,eb3]@3 ~@2 [eb2,eb3]@5 ~@8 eb3@5 ~ gb3@4 ~ [gb2,gb3]@4 ~@9 [gb2,gb3]@5 ~, ~@17 eb2@5 ~ gb2@4 ~@21", // Eb Gb
  H: "[~@24 bb4@2 c5@3 eb5@3 g5@3 f5@3 eb5@3 d5@24 ~@31]/2",
})).s("gm_distortion_guitar").gain(0.32).pan(0.8)

// other · electric guitar jazz · "Solo Jazz"
const electric_guitar_jazz_3 = note(`<
  ~@33
  [~@28 c4@2 eb4@2 ~ f4@3 g4@2 bb4@3 ~ d5@3 bb4@2 ~]
  [c5@9 g4@3 f4@2 ~ g4 ~@2 f4@15 eb4@2 ~@7 d4@2 ~ eb4 ~@2]
  [f4@3 eb4@2 ~ c4@2 ~@4 eb4@2 ~@4 eb4@21 ~@9]
  ~@48
>`).s("gm_electric_guitar_jazz").gain(0.5)

// chords · distortion guitar · "Lead Guitar"
const distortion_guitar_3 = note("<~@24 A@8 ~@12 A@8 B C B C B C B C D@8 ~@16>".pickRestart({
  A: "[~ [g3,c4,eb4]@4 ~ [c3,g3,c4,eb4]@4 ~@13 [g2,g3,bb3,d4]@4 ~@2 [g2,g3,bb3,d4]@4 ~@14 [ab2,ab3,c4,eb4]@4 ~@2 [ab2,ab3,c4,eb4]@3 ~@10 [eb3,eb4,g4,bb4]@28 ~@2, c3 ~@23]/2", // Cm Gm Ab Eb
  B: "[f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@5 ~@7 [f3,bb3,d4]@4 ~@2 bb3 ~ e4@3 ~ [f3,a3,d4]@4 ~@8 [f3,a3,d4]@3 ~@3, ~@6 [f3,d4] ~@5, ~@25 a3@3 ~@20", // Bb Dm
  C: "[g3,bb3,eb4]@2 ~ [g3,bb3,eb4]@2 ~@4 [g3,bb3,eb4]@2 ~ [gb3,bb3,eb4]@2 ~ [gb3,bb3,eb4]@2 ~@4 [gb3,bb3,eb4]@2 ~, e4 ~@23", // Eb Ebm
  D: "[~ [g3,c4,eb4]@4 ~ [c3,g3,c4,eb4]@4 ~@7 [c3,g3,c4,eb4]@5 ~ [g2,g3,bb3,d4]@4 ~@2 [g2,g3,bb3,d4]@4 ~@9 [g3,bb3]@3 ~@2 [ab2,ab3,c4,eb4]@4 ~@2 [ab2,ab3,c4,eb4]@3 ~@10 [eb3,eb4,g4,bb4]@28 ~@2, c3@4 ~@37 [g2,d4]@4 ~@51]/2", // Cm Gm Ab Eb G5
})).s("gm_distortion_guitar").gain(0.32)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@3 B A@9 B A@7 C A C A C A C A@3 B A@9 C A C A C A C A D A D A D A E F C A C A C A C A C A C A C A B ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@12 x ~@22 x ~@12", D: "~@11 x ~@23 x ~@5 x ~@6",
  E: "~@11 x ~@11 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", F: "x!2 ~ x",
})).gain(0.72)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@59 [~@23 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3] ~@24>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@24 A B A B A B A B ~@12 A B A B A B A B C D C D C D C E F B A B A B A B A B A B A B A G ~@8
>`.pickRestart({
  A: "x!8", B: "x!3 ~ x!4", C: "~@11 x ~@12 x ~@11 x ~@11", D: "x ~@10 x ~@11 x ~@12 x ~@10 x", E: "x ~@10 x ~@35 x",
  F: "~ x!7", G: "x!3 ~@5",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@60 x ~@23>").gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A ~@6 B ~@2 A ~@7 A ~ A ~ A ~ A ~@3 A ~@9 A ~ A ~ A ~ A C D C D C D C E ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8
>`.pickRestart({
  A: "~@3 x ~@4", B: "x", C: "x ~@10 x ~@11 x ~@12 x ~@11", D: "x ~@10 x ~@11 x ~@11 x ~@11 x", E: "x ~@10 x ~@35 x",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@2 A B A@3 C ~@6 D E F G ~@14 A@3 C ~@48>".pickRestart({
  A: "x!4", B: "x ~@11 x ~@12 x ~@10 x ~@11", C: "x!2 ~@2", D: "x!2 ~@4 x ~@5 x ~@11 x ~@11 x ~@11", E: "x ~ x!6",
  F: "x!8", G: "x!4 ~@4",
})).gain(0.48)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@14 [~@3 x ~ x ~ x] [~ x ~@6] ~@68>").gain(0.32)

stack(
  bass, electric_guitar_jazz, electric_guitar_jazz_2, distortion_guitar, distortion_guitar_2, electric_guitar_jazz_3,
  distortion_guitar_3, kick, snare, hihat, mid_tom, open_hat, high_tom, crash, ride, ride_soft
)

More by Weezer