Strudelify

Mykel & Carli

Weezer

KeyG♭ majorTempo98 bpm
0:00/0:00
// Mykel & Carli — Weezer
// 98 bpm, 4/4, key Gb 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 74 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.
setcpm(98/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 · acoustic guitar steel · "Guitar I"
const acoustic_guitar_steel = note("<~ A B C D C D C D ~@44 A B C D E F E F ~@13>".pickRestart({
  A: "[gb2,bb2,db3,gb3,db4,gb4] [gb2,bb2,db3,gb3,db4] [gb2,bb2,db3,gb3,db4,gb4]!2 [b2,eb3,gb3,b3,eb4]!3 [db3,gb3,bb3,eb4]", // Gb B Ebm7
  B: "[db3,ab3,db4,f4]!2 [db3,ab3,db4,eb4] [db3,ab3,db4,f4] [gb2,bb2,db3,gb3,db4,gb4]!3 [ab2,db3,gb3,bb3,eb4]", // Db Dbsus2 Db Gb Ebm7
  C: "[gb2,bb2,db3,gb3,db4,gb4]!4 [b2,eb3,gb3,b3,eb4]!3 [db3,gb3,bb3,eb4]", // Gb B Ebm7
  D: "[db3,ab3,db4,f4]!2 [db3,ab3,db4,eb4] [db3,ab3,db4,f4] [gb2,bb2,db3,gb3,db4,gb4]!3 [gb2,bb2,db3,gb3,db4]", // Db Dbsus2 Db Gb
  E: "[eb2,bb2,eb3,gb3,bb3,eb4]!3 [eb2,ab2,db3,gb3] [ab2,eb3,ab3,b3,eb4]!4", // Ebm Ebm7 Abm
  F: "[db3,ab3,db4,f4]!4 [gb2,bb2,db3,gb3,db4,gb4]!4", // Db Gb
})).s("gm_acoustic_guitar_steel").gain(0.31)

// other · electric guitar clean · "Guitar II"
const electric_guitar_clean = note("<~@4 [~ ab3] ~@69>").s("gm_electric_guitar_clean").gain(0.41)

// chords · overdriven guitar · "Guitar III"
const overdriven_guitar = note(`<
  ~@9 A B A B C B C B A B A B D B C B E B E B A B A F A B A B D B C B E B E B D B C B G B E B ~@7 H E B E B E B E B I@5
>`.pickRestart({
  A: "[gb2,db3,gb3]!4 [gb2,b2,gb3]!4", B: "[ab2,db3,ab3]!4 [gb2,db3,gb3]!4", C: "[bb2,eb3,bb3]!4 [ab2,eb3,ab3]!4",
  D: "[bb2,eb3,bb3,eb4]!4 [ab2,eb3,ab3]!4", E: "[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [gb2,b2,gb3]!4",
  F: "[ab2,db3,ab3]!4 [gb2,db3,gb3]!2 [gb2,db3,gb3]@2", G: "f4@2 f4@2 f4 eb4@3", H: "bb2",
  I: "[[bb2,f3,bb3]@4 [bb2,f3,bb3]@4 [b2,gb3,b3]@4 ~ [b2,gb3,b3]@4 [db3,ab3,db4]@5 ~ [db3,ab3,db4]@5 [gb2,db3,gb3,bb3]@38 ~@14]/5", // Bb5 B5 Db5 Gb
})).s("gm_overdriven_guitar").gain(0.41)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@8 A B C B C D E D C B C B C F E D C G C G C B C B H B C B C F E D C G C G C F E D C ~ C G C ~@7 I J C J C G E G C
  K@5
>`.pickRestart({
  A: "~@3 gb1", B: "gb1!4 b1!4", C: "db2!4 gb1!4", D: "eb2!4 ab1!4", E: "db2!4 gb1 ab1 gb1!2", F: "eb1!4 ab1!4",
  G: "[bb1,f2]@2 [bb1,f2]@2 b1!4", H: "db2!4 gb1!2 gb1@2", I: "bb1", J: "bb1@2 bb1@2 b1!4",
  K: "[bb1@4 bb1@4 b1@4 ~ b1@4 db2@5 ~ db2@5 gb1@38 ~@14]/5",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · harmonica
const harmonica = note("<~@5 A B@2 C ~@20 A D@2 C ~@41>".pickRestart({
  A: "gb6 eb6",
  B: "[~ db6@5 ~@2 bb5@10 ~@2 bb5@2 ~@2 bb5@2 ~@3 b5@2 ~, bb5@3 ~@3 b5@2 ~@14 ab5@2 ~@4 ab5@4, ~@7 eb6@2 ~@14 b5@2 ~@7]/2",
  C: "gb5@6 db5 ~ gb5@8, ~@7 f5@2 ~@7",
  D: "[~ db6@5 ~@2 bb5@10 ~@2 bb5@2 ~@2 bb5@4 ~ b5@2 ~, bb5@3 ~@3 b5@2 ~@14 ab5@2 ~@4 ab5@4, ~@7 eb6@2 ~@14 b5@2 ~@7]/2",
})).s("gm_harmonica").gain(0.36)

// other · overdriven guitar · "Solo"
const overdriven_guitar_2 = note("<~@17 A B@2 ~@9 C D E F@2 ~@15 G H@2 I ~@21>".pickRestart({
  A: "[gb4,gb5]@2 [gb4,gb5]!2 [eb4,eb5]!4", B: "[[db4,db5]!3 [b3,b4] [bb3,bb4]@8 ~@4]/2", C: "[gb4,gb5]!4 [eb4,eb5]!4",
  D: "[db4,db5]!3 [b3,b4] [bb3,bb4]!2 [ab3,ab4]@2", E: "[bb3,bb4]!3 [ab3,ab4] [bb3,bb4]!2 [ab3,ab4]!2",
  F: "[[gb3,gb4]!3 [f3,f4] [gb3,gb4]@8 ~@4]/2", G: "eb5!2 eb5@2",
  H: "[b4@2 bb4@2 b4@2 db5@2 bb4@4 ab4 gb4 ab4@5 eb5!2 ~ db5 ~ bb4 ~ ab5@4 ab5@2]/2",
  I: "gb5 ab5 gb5 eb5 db5 eb5 db5 eb5 gb5@4 gb5@4",
})).s("gm_overdriven_guitar").gain(0.46)

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

// drums · rim
const rim = s("rim").struct("<[x!4] ~@73>").gain(0.41)

// drums · snare
const snare = s("sd").struct("<~@9 A@16 B A B A@13 B A B A@5 C A B A ~@8 D A D A D A D A E F ~@3>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "x", D: "x!2 ~ x", E: "~@4 x ~@8 x ~@2", F: "~@7 x ~@8",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@8 [~@3 x] ~@40 [~@3 x] ~@10 [~@3 x] ~@13>").gain(0.41)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~ [~ x ~ x]!7 [~ x ~@2] ~@65>").gain(0.41)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@3 A ~@5 A ~ A ~@3 B ~ B ~ A ~@2 C A ~ A ~ A ~@3 B ~ B ~ A ~@3 A ~ B ~@9 D ~ D ~ D ~ D ~ B E ~@3
>`.pickRestart({
  A: "x", B: "x!2", C: "~@3 x", D: "x!3 ~", E: "~ x ~@10 x ~@3",
})).gain(0.41)

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

stack(
  acoustic_guitar_steel, electric_guitar_clean, overdriven_guitar, bass, harmonica, overdriven_guitar_2, kick, rim,
  snare, low_tom, pedal_hat, open_hat, crash, ride
)

More by Weezer