Strudelify

Undone

Weezer

KeyG majorTempo80 bpm
0:00/0:00
// Undone — Weezer
// 80 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 16-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.

// chords · electric guitar clean · "Gtr. 1"
const electric_guitar_clean = note(`<
  ~@2 A B A B A B A B A B A B A B A B ~@8 A B A B ~@44 A B A B A ~@7 C@5
>`.pickRestart({
  A: "~ e4 a#4 ~@2 e4 a#4 b4, g3 c4, ~@3 b4@2 ~@3", B: "~ f#4 c5 ~@2 e4 a#4 b4, d4 c4, ~@3 b4@2 ~@3",
  C: "[~@2 e5@2 a#5@2 ~@4 e5@2 a#5@2 ~@5 f#5@2 c6@2 ~@4 e5@2 a#5@3 ~@4 e5@3 a#5@2 ~@5 e5@2 a#5@2 b5@3 ~@2 f#5@3 c6@2 ~@5 e5@3 a#5@3 b5@4 ~@5, g4@8 c5@8 d5@9 c5@9 g4@9 c5@10 d5@10 c5@10 ~@7, ~@6 b5@4 ~@4 b5@4 ~@5 b5@4 ~@5 b5@4 ~@5 b5@5 ~@14 b5@5 ~@15]/5",
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · acoustic guitar steel · "Gtr. 2"
const acoustic_guitar_steel = note("<~@18 A B A B ~@8 A B A B ~@57>".pickRestart({
  A: "[g3,d4,g4,b4] ~ [g3,d4,g4,b4] ~ [g3,d4,g4,b4] ~ [g3,d4,g4,b4] ~ [c4,e4,g4,c5] ~ [c4,e4,g4,c5] ~ [c4,e4,g4,c5] ~ [c4,e4,g4,c5] ~", // G C
  B: "[d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [c4,e4,g4,c5] ~ [c4,e4,g4,c5] ~ [c4,e4,g4,c5] ~ [c4,e4,g4,c5] ~", // D C
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.3)

// chords · acoustic guitar steel · "Gtr. 2" · soft notes · A# D#5 F5 D#5
const acoustic_guitar_steel_2 = note(`<
  ~@42
  [[a#3,f4,a#4,d5] ~ [a#3,f4,a#4,d5] ~ [a#3,f4,a#4,d5] ~ [a#3,f4,a#4,d5] ~ [a#3,d#4,a#4,d#5] ~ [a#3,d#4,a#4,d#5] ~ [a#3,d#4,a#4,d#5] ~ [a#3,d#4,a#4,d#5]!2]
  [[c4,f4,c5,f5]!3 ~ [c4,f4,c5,f5] ~ [c4,f4,c5,f5]!2 [a#3,d#4,a#4,d#5]!3 ~ [a#3,d#4,a#4,d#5] ~ [a#3,d#4,a#4,d#5]!2]
  ~@47
>`).s("gm_acoustic_guitar_steel").gain(0.05).pan(0.3)

// chords · overdriven guitar · "Gtr. 3"
const overdriven_guitar = note(`<
  ~@22 A B A B ~@8 A B A B A B A B C D C D C D C D A B A B A B A B A E A B A B A B A B A B A B A B A B A B F G F G F G F
  G H@5
>`.pickRestart({
  A: "[g2,d3,g3] ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~", // G5 C5
  B: "[d3,a3,d4] ~ [d3,a3,d4] ~ [d3,a3,d4] ~ [d3,a3,d4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~", // D5 C5
  C: "[a#2,f3]!2 [a#2,g3] [a#2,f3]!2 ~ [a#2,g3] [a#2,f3] [d#3,a#3]!2 [d#3,c4] [d#3,a#3]!2 ~ [d#3,c4] [d#3,a#3]", // A#5 D# A#5 D# A#5 D#5 Cm D#5 …
  D: "[f3,c4]!2 [f3,d4] [f3,c4]!2 ~ [f3,d4] [f3,c4] [d#3,a#3]!2 [d#3,c4] [d#3,a#3]!2 ~ [d#3,c4] [d#3,a#3]", // F5 Dm F5 Dm F5 D#5 Cm D#5 …
  E: "[d3,a3,d4] ~ [d3,a3,d4] ~ [d3,a3,d4] ~ [d3,a3,d4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [a#2,f3,a#3] ~ [a#2,f3,a#3] ~", // D5 C5 A#5
  F: "[g2,d3,g3]!8 [c3,g3,c4]!8", G: "[d3,a3,d4]!8 [c3,g3,c4]!8", H: "[[g2,d3,g3]@66 ~@7 [g2,d3,g3]@4 ~@3]/5",
})).s("gm_overdriven_guitar").gain(0.26).pan(0.7)

// other · overdriven guitar · "Gtr. 4"
const overdriven_guitar_2 = note(`<
  ~@42 A B@4 C D E F@2 G ~@12 H I J K L M N I O P Q R S T U V W X Y Z AA ~@5
>`.pickRestart({
  A: "a#4!3 g#4 a#4 ~ a#4 g#4 a#4!3 g4 a#4 ~ a#4 g4",
  B: "[a#4!3 g4 a#4 c5 d5 d5@3 c5 a#4 a4 a#4 g4 f4@2 f4 g4 a#4@3 g4 f4 c5!3 ~ a#4 ~ g4 f4@2 ~ c5 ~ c5 ~ a#4 f5@4 ~ d5 ~ c5 a#4@2 ~ a#4 ~ [a#4,a#5] [c5,c6]!3 [d5,d6]!3 [d#5,d#6]!2 [f5,f6]!2 [g5,g6]]/4", // A# C D D# F G
  C: "[g5,g6] [a5,a6]!2 [a#5,a#6]!2 [c6,c7]!3 ~ [a#5,a#6] [a5,a6] [g5,g6]!2 [f5,f6] ~ f5", // G A A# C A# A G F
  D: "d6@2 g5 d6@2 g5@2 d6@2 g5@2 d6 g5!2 f5@2", E: "~@2 g6@4 g6 f6 a#6@5 a#6 ~ a6", F: "[d6@24 c6 b5@3 a5 g5 a5 ~]/2",
  G: "g5@11 ~@5", H: "~@15 g5", I: "[g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5]!3 ~ [g4,g5]!2",
  J: "[f#4,f#5] ~ [f#4,f#5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] [d4,d5]@5 ~@2", // F# E D
  K: "[d4,d5] ~ [d4,d5]!2 [g4,g5] ~ [g4,g5] ~ [g4,g5]!8", // D G
  L: "[f#4,f#5] ~ [f#4,f#5] ~ [e4,e5] ~ [e4,e5] ~ [e4,e5] [d4,d5]!4 ~ [d4,d5]!2", // F# E D
  M: "[d4,d5] ~ [d4,d5]!2 [d5,d6] ~ [d5,d6]!3 ~ [d5,d6] ~ [c5,c6] ~ [c5,c6] ~", // D C
  N: "[b4,b5] ~ [b4,b5] ~ [b4,b5] ~ [c5,c6] ~ [a4,a5]@3 ~ [a4,a5] ~ [b4,b5] ~", // B C A B
  O: "[a4,a5] ~ [a4,a5] ~ [a4,a5] ~ [a4,a5] ~ [a#4,a#5]!7 [a#5,a#6]", P: "[a#5,a#6]!15 [c6,c7]",
  Q: "[c6,c7]!8 [a#5,a#6]!8", R: "[a#5,a#6]!16", S: "[c6,c7]!9 [c#6,c7]!2 [d6,c7]!5",
  T: "[d6,c7]!8 [c6,c7] [c#6,c7] [d6,c7]!4 [d#6,c7]!2", U: "[d#6,c7]!4 [e6,c7]!4 e6 f#6!4 g6!3", V: "f6 f#6 g6!14",
  W: "g6!8 g#6!8", X: "[d5,b5]!8 [g5,e6]!8", Y: "[a5,f#6]!8 [g5,e6]!4 [a#4,a#5]!4", Z: "[a#4,g5,a#5,g6] [g5,g6]!15",
  AA: "[g5,c6,g6,c7] [c6,c7]!7 [b5,b6]!4 b6@2 b5 ~, ~@12 b5 ~@3", // C5 C B
})).s("gm_overdriven_guitar").gain(0.26)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@2 A B A B A B A B A B A B A B 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 D E F G F H F I J A B C B C B C B A
  K C K C K C K L M L M L M L M L M L M N O N O P Q R S T@5
>`.pickRestart({
  A: "g2 ~ g2 ~ g2 ~ g2 ~ c2 ~ c2 ~ c2 ~ c2 ~", B: "d2 ~ d2 ~ d2 ~ d2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  C: "g1 ~ g1 ~ g1 ~ g1 ~ c2 ~ c2 ~ c2 ~ c2 ~", D: "d2 ~ d2 ~ d2 ~ d2 ~ c2 ~ c2 ~ c2 ~ f2!2",
  E: "f2!5 f#2 g2!2 d#2!7 ~", F: "f2!3 ~ f2!3 ~ d#2!3 ~ d#2!3 ~", G: "a#1!3 ~ a#1!4 d#2!3 ~ d#2 ~ d#2 ~",
  H: "a#1!3 ~ a#1!4 d#2!3 ~ d#2!3 ~", I: "a#1!3 ~ a#1!3 ~ d#2!3 ~ d#2 ~ d#2 ~",
  J: "f2!3 ~ f2!3 ~ d#2 ~ d#2 ~ d#2!2 f2 ~", K: "d2 ~ d2 ~ d2 ~ d2 ~ c2 ~ c2 ~ a#1 ~ a#1 ~",
  L: "g1 ~ g1 ~ g1!3 ~ c2 ~ c2!3 ~ c2 ~", M: "d2 ~ d2 ~ d2 ~ d2 ~ c2!3 ~ c2!4", N: "g1!8 c2!8", O: "d2!8 c2!8",
  P: "g2 ~ c2 ~ g2 ~ g2 ~ e2!8", Q: "f#2!8 g2!8", R: "g2!8 e2!8", S: "d2!8 c2!5 ~ c2 ~", T: "[g1@66 ~@7 g1@4 ~@3]/5",
})).s("gm_electric_bass_pick").gain(0.36)

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

// drums · hihat
const hihat = s("hh").struct("<~@2 A@15 B A@3 B A@11 B A@15 C A@24 ~@17>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!5 ~@3",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A B C B C B C B C B C B C B C B D B C B C B C B D 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 ~@17
>`.pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "x ~@2 x!2 ~@3", C: "x ~@3 x!2 ~@2", D: "x ~@7 x ~ x ~@2 x ~@2",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@18 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~ A ~@5 A ~@11 A@9 ~@4>".pickRestart({
  A: "x",
})).gain(0.36)

stack(
  electric_guitar_clean, acoustic_guitar_steel, acoustic_guitar_steel_2, overdriven_guitar, overdriven_guitar_2, bass,
  snare, hihat, low_tom, crash
)

More by Weezer