Strudelify
KeyD majorTempo63 bpm
0:00/0:00
// To Forgive — The Smashing Pumpkins
// 63 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Guitar 1" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(63/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.

// other · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  A B C D E F G H I J K L D H M N O@2 P Q R S T U@2 V W H I J K L D H M Q R S T U@2 X Y Z AA AB AC AD AE AF H I J K L D
  H M Q R S T AG AH AI AJ@2
>`.pickRestart({
  A: "g3@2 d4@2 a4@2 g3 [g4,d5] f#3@2 a3@2 e4@2 a3 e4", B: "e3@2 b3@2 f#4@2 e3 f#4@2 b3 e3@2 [b3,f#4] a3!2 d4",
  C: "g3@2 d4@2 a4@2 g3 d5 f#3@2 a3@2 e4@2 a3 e4", D: "[e3,b3]@2 b3@2 f#4@2 e3 f#4@2 b3 e3!2 [b3,f#4] a3!2 d4",
  E: "b3@3 d4 c#4@2 [a3,e4]@4 e4@2 [g4,d5]@2 a3 e4", F: "[e3,b3]@3 g4 f#3@2 g3@2 g3@8",
  G: "b3@3 g4 c#4@2 [a3,e4,g4]@9 ~", H: "g3@4 [g4,d5]@2 g3 g4 f#3@2 a3@2 e4@2 f#3 e3",
  I: "e3@2 b3@2 f#4@2 e3 f#4@2 b3@2 e3 [b3,f#4] a3!2 d4", J: "g3@2 g4@2 a4@2 g3 d5 f#3@2 a3@2 e4@2 a3 e4",
  K: "e3@2 b3@2 f#4@2 e3 f#4@2 b3 e3!2 [b3,f#4] a3 [e3,a3] d4", L: "g3@4 a4@2 g3 d5 f#3@2 a3@2 e4@2 f#3 e4",
  M: "e3@2 b3@2 f#4 b3 e3 f#4@2 b3 e3!2 [b3,f#4] a3!2 d4", N: "b3@3 d4 c#4@2 [a3,e4]@4 [a3,e4]@2 [g4,d5]@2 e4 g4",
  O: "[e3@3 [g4,b4] f#3@2 g3@4 [b3,d4]@2 [g4,d5]@2 d4 ~ b3@3 g4 c#4@2 a3@4 e5@2 e5@2 e3 [d4,g4], ~@15 g4@4 ~@3 f#4@6 ~@4]/2", // G Bm G5
  P: "[e3,b3]@3 f#3@2 ~ g3@10, ~@3 d5@13, ~@3 g4@11 ~@2", // E5
  Q: "[g3,b3,d4,g4,d5]@4 [d4,g4,d5,g5]@2 d4 [g4,b4] [f#3,a3]@2 d4@2 [d4,a4]@3 [d4,a4]", // G G5 G F#m D5
  R: "e3@2 b3@2 f#4@2 b3 f#4@2 b3 e3!2 [b3,f#4] a3!2 d4", // B5
  S: "[g3,b3,d4]@4 [d4,g4,d5,g5]@2 d4 [d4,g4] f#3@2 [a3,d4]@2 a4@3 d4", // G G5 D5
  T: "[e3,b3]@2 b3@2 f#4@2 b3 f#4@2 b3 e3!2 [b3,f#4] a3!2 d4", // E5 B5
  U: "[g3@2 b3@2 a4@2 g3 [g4,d5] f#3@2 a3@2 [d4,a4]@2 d4 ~ b3@2 d4@2 [g4,d5]@2 [g4,d5] g4 a3@2 [d5,e5]@2 g4 [e4,g4] g4 d4, ~@15 [g4,d5]@3 ~@14]/2", // G5 D5 G5 Dsus2 Em G5
  V: "g3@4 a4@2 a3 [g4,d5] f#3@2 a3@2 e4@2 a3 d4", W: "[e3,b3,e4]",
  X: "g3@3 d4 [g4,d5,g5]@2 d4 g4 f#3@2 [d4,a4]@2 [a4,d5,e5]@3 a4", // G5 D5 Asus4
  Y: "[a3,e4,a4]@2 [a3,e4]@2 [e4,a4,b4,e5]@2 e4 a4 b3@4 [d5,e5] a4 d4 g4", // A5 Esus4 Dsus2
  Z: "c#4@4 [c#4,e4,b4]@2 c#4 g4 d4@2 a4 b4 e3@2 b3 g4", AA: "f#3@4 [f#3,e4,a4]@3 a4 g3@2 d4@2 [d4,a4,b4,e5]@2 d4 a4",
  AB: "a3@2 e4@2 [e4,a4,c#5]@2 e4 a4 b3@2 d4 g4 c#4@2 [e4,b4] b4", // A E5
  AC: "d4@2 a4 d5 [d5,e5]@2 [d4,a4] g4 e3@2 b3 e4 [g4,b4,e5] g4 e4 g4", // Dsus2 D5 Em
  AD: "a3@2 e4@2 [e4,a4,c#5]@2 e4 a4 [g3,d4,a4,b4,g5]@2 b4 a4 [a3,e4,a4,c#5]@2 e4 a4", // A G A
  AE: "b3@2 d4 g4 b4 d5 d4 g4 c#4@2 e4 b4 [e4,b4]@2 c#4 g4", // E5
  AF: "d4@2 a4 d5 [a4,d5,e5]@2 [d4,a4] g4 [e3,b3]@2 d4 g4 f#3@2 f#4 [e4,a4]", // Asus4 D5 E5 A5
  AG: "g3@2 b3@2 [d4,g4,d5]@2 g3 [d4,g4,d5] f#3 d4 a3@2 [d4,a4,b4]@4", // G5 Bm7
  AH: "[b3,d5]@2 g4 e5 d5 g4 d4 g4 a3@2 e4@2 [g4,d5,e5] e5 e4 g4", // Bm Em7
  AI: "[g3,b3,d4]@2 [d4,g4]@2 [g4,d5,g5]@2 d4 g4 f#3@2 [a3,d4]@2 [d4,a4,d5,e5]@2 ~ d4", // G G5 D5 Dsus2
  AJ: "[b3 [e3,b3,f#4]@17 ~@14]/2", // Esus2
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.7)

// other · clavinet · "Fills"
const clavinet = note("<~@15 [~@3 d6@2 b5@3] ~@32 [~@3 b4] [g5@2 b4 g5 f#5@2 b4 f#5 d5@2 b4 d5 b4@4] [a4 ~] ~@16>")
  .s("gm_clavinet").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  A B A B C D C A B A B A B A B C E C E A B A B A F A B A B A B A B A B A B A B A F A G H I G J K L J A M A B A B A B A
  B A B A F A N@2
>`.pickRestart({
  A: "[g1,g2] [f#1,f#2]", B: "[e1,e2]", C: "[b1,b2]@3 [a1,a2]@5", D: "[e1,b1,e2,b2]@3 [g1,g2]@5",
  E: "[e1,e2]@3 [g1,g2]@5", F: "[b1,b2] [a1,a2]", G: "[a1,a2] [b1,b2]", H: "[c#2,c#3]@2 [d2,d3] [e1,e2]",
  I: "[f#1,f#2] [g1,g2]", J: "[d2,d3] [e1,e2]", K: "[a1,a2]@2 [d2,d3] [e2,e3]", L: "[b1,b2] [c#2,c#3]",
  M: "~@2 [d1,d2] [e1,e2], [e1,e2]@3 ~", N: "[~ [e1,e2]@17 ~@14]/2",
})).s("gm_electric_bass_finger").gain(0.64)

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

// drums · snare
const snare = s("sd").struct("<~@4 A B A C@19 ~ C@7 D C@30 ~@2>".pickRestart({
  A: "~ x ~@2", B: "~@4 x ~@7 x!4", C: "~ x ~ x", D: "~ x!3",
})).gain(0.31)

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

// drums · crash
const crash = s("cr").struct("<~@4 [x ~@2 x ~@4]!3 ~@60>").gain(0.31)

stack(electric_guitar_clean, clavinet, bass, kick, snare, pedal_hat, crash)

More by The Smashing Pumpkins