Strudelify

Jamie

Weezer

KeyG♭ majorTempo107 bpm
0:00/0:00
// Jamie — Weezer
// 107 bpm, 4/4, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 65, 4/4 at bar 66, 3/4 at bar 68, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar IV, guitar program 31.
setcpm(107/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 · acoustic guitar steel · "Guitar I"
const acoustic_guitar_steel = note("<A ~@2 B@2 C D C D C D C D C D ~@102>".pickRestart({
  A: "gb2 ~@15",
  B: "[gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,bb3]!2 [db3,ab3,db4,f4]!2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,gb4]@2", // Gb Db Dbsus4
  C: "[gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,db4]!2 [db3,ab3,db4,f4]!2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,gb4]@2", // Gb Db Dbsus4
  D: "[gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3,db4,gb4]@2 [gb2,bb2,db3,gb3]!2 [db3,ab3,db4,f4]!2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,gb4]@2", // Gb Db Dbsus4
})).s("gm_acoustic_guitar_steel").gain(0.31)

// chords · overdriven guitar · "Guitar III"
const overdriven_guitar = note(`<
  A@5 B@10 C D C D B@2 E F G H I F J G I B@11 C D C D B@2 E F G H I F J G I F G H I F J G I K L M N O B@10 C D C D C D C
  D F G H I F J G I F G H I F J G I K L M N O B@4 E B@2 E P
>`.pickRestart({
  A: "[~ [db4,gb4]@19]/5", // Gb5
  B: "[gb2,db3,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!2 [ab2,db3,ab3]!2 [ab2,db3,ab3]@2 [ab2,db3,ab3]@2 [ab2,db3,ab3]@2", // Gb5 Db5
  C: "[gb2,db3,gb3]!4 [ab2,db3,ab3]!4", D: "[bb2,eb3,bb3]!4 [gb2,b2,gb3]!4",
  E: "[db3,ab3,db4] [eb3,bb3,eb4] [eb2,eb3,bb3,eb4]!2 [eb2,eb3,bb3,eb4]@2 [f2,bb2,f3]@2 ~@2 [gb2,b2,gb3]@2 [b2,gb3]!2 [ab2,eb3,ab3]@2", // Db5 Eb5 Bb5 B5 Ab5
  F: "[gb2,db3,gb3]!8", G: "[f2,bb2,f3]!8", H: "[bb2,eb3,bb3]!4 [ab2,db3,ab3]!4", I: "[gb2,b2,gb3]!8",
  J: "[ab2,db3,ab3]!8", K: "[gb2,db3,gb3]!2 ~ [gb2,db3,gb3] [ab2,db3,ab3]!2 [bb2,eb3,bb3]!2",
  L: "[bb2,eb3,bb3]@2 [bb2,eb3,bb3]@2 [gb2,b2,gb3]@2 [gb2,b2,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!2", // Eb5 B5 Gb5
  M: "[ab2,db3,ab3]!2 [ab2,db3,ab3]@2 [ab2,db3,ab3]@2 [ab2,db3,ab3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!2", // Db5 Gb5
  N: "[ab2,db3,ab3]!2 [ab2,db3,ab3]@2 [ab2,db3,ab3]@2 [ab2,db3,ab3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]@2 ~@2 [gb2,db3,gb3]@2", // Db5 Gb5
  O: "[ab2,db3,ab3]!2 [bb2,eb3,bb3]!4 [gb2,b2,gb3]!2", P: "[gb2,db3,gb3] ~@7",
})).s("gm_overdriven_guitar").gain(0.41)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@5 A@10 B C B C A@2 D E F G H I J F H A@11 B C B C A@2 D E F G H I J F H E F G H I J F H K L M N O A@3 P A@6 B C B C
  B C B C E F G H I J F H E F G H I J F H K L M N O A@4 D A@2 D Q
>`.pickRestart({
  A: "gb1@2 gb1@2 gb1@2 gb1!2 db2!2 db2@2 db2@2 db2@2", B: "gb1!4 db2!4", C: "eb2!4 b1!4",
  D: "db2 eb2!3 eb2@2 bb1@2 ~@2 b1@2 b1!2 ab1@2", E: "gb1!8", F: "bb1!8", G: "eb2!4 db2!4", H: "b1!8", I: "gb2!8",
  J: "db2!8", K: "gb1!2 ~ gb1 db2!2 eb2!2", L: "eb2@2 eb2@2 b1@2 b1@2 gb1@2 gb1@2 gb1@2 gb1!2",
  M: "db2!2 db2@2 db2@2 db2@2 gb1@2 gb1@2 gb1@2 gb1!2", N: "db2!2 db2@2 db2@2 db2@2 gb1@2 gb1@2 ~@2 gb1@2",
  O: "db2!2 eb2!4 b1!2", P: "gb1@2 [gb0,gb1]@2 gb1@2 gb1!2 db2!2 db2@2 db2@2 db2@2", Q: "gb1@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.41)

// other · overdriven guitar · "Solo"
const overdriven_guitar_2 = note("<~@71 A B@7 ~@38>".pickRestart({
  A: "~ bb3 bb4@2 db5@2 b4!2",
  B: "[b4 bb4@3 bb4@4 gb4@2 ab4@2 gb4@2 bb4@6 bb4@4 gb4@2 ab4@2 gb4@2 bb4@4 gb4@4 eb4 db4@5 eb4@2 gb4@4 eb4@2 db4@2 gb4@2 bb4@4 ab4@2 gb4@4 eb4@2 db4@2 gb4@2 bb4@2 db5 bb4@2 db5 bb4@4 ab4@2 gb4@2 eb4 db4 bb4@4 bb4@2 gb4@4 gb4@2 ab4@2 gb4@2 bb4 b4 bb4@6]/7",
})).s("gm_overdriven_guitar").gain(0.46)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@62 [x!8]!2 ~@53>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~@5 [x!8]!111 x>").gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@13 A ~ B A ~@7 A ~@14 A ~ B A ~@7 A ~@6 C D ~@2 E F ~@18 A ~@7 A ~@7 D ~@2 E F ~@4 B ~@2 B A
>`.pickRestart({
  A: "x", B: "x ~@2 x ~ x ~@2", C: "~@2 x!2", D: "x ~@2 x", E: "~ x", F: "~ x ~@2",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@23 A ~@25 A ~@7 A ~@30 A ~@7 A ~@20>".pickRestart({
  A: "x",
})).gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct("<~@21 A ~@25 A ~@64 A ~@2 A ~>".pickRestart({
  A: "~@7 x",
})).gain(0.41)

stack(
  acoustic_guitar_steel, overdriven_guitar, bass, overdriven_guitar_2, kick, snare, low_tom, open_hat, crash, high_tom,
  ride_bell
)

More by Weezer