Strudelify
Today cover art

Siamese Dream

Today

The Smashing Pumpkins

KeyE majorTempo88 bpm
0:00/0:00
// Today — The Smashing Pumpkins
// 88 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/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"
const bass = note(`<
  ~@4 A B A B A C A D ~@4 A E F G H I H I H I H J K L K L K L M N H O H P H O Q J A R A R A S A T U H U H U H U H A V A
  W A X A Y Z
>`.pickRestart({
  A: "e1!4 b1!4", B: "a1@2 a1!2 a1@2 a1!2 a1@2 a1!2 a1@2 a1!2", C: "c#2!4 a1!4",
  D: "a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1 b1", E: "a1@2 a1!2 a1@2 a1!2 a1@2 a1 a1@2 a1!2 b1",
  F: "e1@2 e1@2 e1@2 e1@2 b1@2 b1@2 b1@2 b1!2", G: "a1!8", H: "f#1@2 f#1@2 f#1@2 f#1 g#1 a1@2 a1@2 a1@2 a1 b1",
  I: "c#2@2 c#2!2 c#2@2 c#2!2 c#2@2 c#2!4 e1!2", J: "g#1@2 g#1@2 g#1@2 g#1 d#2!2 e2 d#2 e2 d#2 e2 d#2 e2",
  K: "e2@2 e2@2 e2@2 e2@2 b1@2 b1@2 b1@2 b1 e1", L: "a1@2 a1!2 a1@2 a1!2 a1@2 a1 a1@2 a1!2 e2",
  M: "e2@2 e2@2 e2@2 e2@2 b1@2 b1@2 b1@2 b1!2", N: "c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2!2 c#2@2",
  O: "e1@2 e1@2 e1@2 e1 b1 b1@2 b1@2 b1@2 e1 f1", P: "e1@2 e1@2 e2@2 e1!2 b1@2 b1@2 b1@2 e1 f1",
  Q: "f#1@2 f#1@2 f#1@2 f#1 g#1 a1@2 a1@2 a1@2 f#1 g1", R: "e1@2 e1@2 e1@2 e1 b1 a1@2 a1@2 a1@2 a1@2",
  S: "c#2@2 c#2!2 c#2@2 c#2@2 a1@2 a1@2 a1!2 a1@2", T: "c#2!8", U: "c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 e1 f1",
  V: "c#2@2 c#2!2 c#2@2 c#2!2 a1@2 a1!2 a1@2 a1 b1", W: "c#2@2 c#2!2 c#2@2 c#2!2 a1!3 a1@2 a1!2 b1",
  X: "c#2@2 c#2@2 c#2@2 c#2@2 a1@2 a1 a1@2 a1!2 b1", Y: "c#2!4 a1!3 b1", Z: "e1@3 ~",
})).s("gm_electric_bass_finger").gain(0.44).pan(0.4)

// chords · acoustic guitar steel · "Guitar 1"
const acoustic_guitar_steel = note("<A@8 B@4 C D C D C E C F ~@8 C D C D C E C F ~@24 A@8 ~>".pickRestart({
  A: "[~@12 g#4 ~@15 g#4 ~@15 g#4 ~@15 g#4 ~@15 g#4 ~@15 g#4 ~@15 g#4 ~@15 g#4 ~ b3@2, e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3, ~ b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 ~]/8",
  B: "[~@12 g#4 ~@15 g#4 ~@15 g#4 ~@3 a4@6 g#4@2 e4@4 ~@4, e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 e4@4 f#4@4 e4@4 ~ e4@3 ~@16, ~ b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 ~@7]/4",
  C: "[b2,e3,b3,e4,f#4,b4]@2 [b2,e3,b3,e4,f#4,b4]@2 [b2,e3,b3,e4,f#4,b4]@2 [b2,e3,b3,e4,f#4,b4]!2 [b2,f#3,b3,d#4,f#4,b4]@2 [b2,f#3,b3,d#4,f#4,b4]@2 [b2,f#3,b3,d#4,f#4,b4]@2 [b2,f#3,b3,d#4,f#4,b4]!2", // Bsus4 B
  D: "[a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]!2 [a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4] [a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]!2 [b2,f#3,b3,d#4,f#4,b4]", // A B
  E: "[a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]!2 [a2,e3,a3,c#4,e4,a4]@2 [a2,e3,a3,c#4,e4,a4]!5 [b2,f#3,b3,d#4,f#4,b4]", // A B
  F: "[c#3,g#3,c#4]!8", // C#5
})).s("gm_acoustic_guitar_steel").gain(0.44).pan(0.4)

// chords · overdriven guitar · "Guitar 2"
const overdriven_guitar = note(`<
  ~@4 A B A B A C A B ~@8 D E D E D E D F ~@8 G H G H G H I F A J A J A K A L@2 D E D E D E D A M A M A M A M N
>`.pickRestart({
  A: "[e2,b2,e3]!4 [b2,f#3,b3]!4", // E5 B5
  B: "[a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!2", // A5
  C: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!2", // C#5 A5
  D: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]!2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!2", // F#5 A5
  E: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!6", // C#5
  F: "[g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]!2 [d#3,a3] [e3,b3] [d#3,a3] [e3,b3] [d#3,a3] [e3,b3] [d#3,a3] [e3,b3]", // G#5 D#dim E5 D#dim E5 D#dim E5 D#dim …
  G: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]!2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2", // F#5 A5
  H: "[e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]!2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [e2,b2,g#3]!2", // E5 B5 E
  I: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]!2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [f#2,c#3,f#3]@2", // F#5 A5 F#5
  J: "[e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] [b2,f#3,b3] [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!2", // E5 B5 A5
  K: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!4", // C#5 A5
  L: "[c#3,g#3,c#4]!8", // C#5
  M: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3] [b2,f#3,b3]", // C#5 A5 B5
  N: "[e3,b3]@3 ~", // E5
})).s("gm_overdriven_guitar").gain(0.44).pan(0.6)

// other · distortion guitar · "Guitar 3"
const distortion_guitar = note(`<
  ~@4 A@2 B C D E F G ~@9 H@3 ~ H@3 I@4 J@4 ~@8 A@7 K L M H@3 ~ H@3 N@2 O P Q@2 ~@2
>`.pickRestart({
  A: "g#4@2 g#4@2 g#4@2 g#4@2 g#4@2 g#4@2 g#4 a4 g#4@2", B: "e4@4 g#4@2 e4@2 g#4@4 g#4 a4 g#4@2",
  C: "e4@4 g#4@2 e4@4 e4@2 g#4 a4 g#4@2", D: "e4@2 e4@2 g#4@2 e4@2 e4@2 e4@2 g#4 a4 g#4@2",
  E: "e4@4 g#4@2 e4@4 g#4 a4 g#4 a4 g#4@2", F: "g#4@2 g#4@2 g#4@2 g#4@2 g#4@2 g#4@2 g#4 a4 a4@2", G: "e4!4 b3!2 ~@2",
  H: "[~ f#4@2 ~]/3",
  I: "[~@28 a4 ~ e4@2, e4@2 f#4@2 e4@2 g#4@2 e4@2 c#4@2 ~ c#4@2 ~, ~@2 b3@4 b3@4 b3@4 a4@4 b3@4 e4@6 ~ g#4@3]/2",
  J: "[~@22 c#4 ~@21 g#4 e4 ~@2 c#4@4 g#4@4 f#4@8, e4@2 f#4@2 e4@2 g#4@2 e4@2 a4@2 b4@2 a4@2 e4@2 f#4@2 e4@2 ~ e4@2 ~@7, ~@2 b3@4 b3@4 b3@4 a4@4 b3@4 ~ c#4@3 c#4@4 g#4@4 b3@4 b3@4 b3@4 ~@18]/4",
  K: "g#4@6 e4 g#4 e4 f#4 e4@2 g#4@2 e4@2", L: "c#4@2 d#4 c#4 f4 d#4 c#4 b3 c#4 d#4 c#4@2 d#4 c#4 d#4 c#4", M: "d#4",
  N: "[~@8 g#4 a4 e4 f#4 g#4 e4!2 f#4@17]/2", O: "~@8 g#4 a4 g#4 f#4 g#4 f#4 g#4 a4", P: "b4",
  Q: "[~@8 e5 f#5 ~ c#5 d#5 ~ b4 c#5@17]/2",
})).s("gm_distortion_guitar").gain(0.44).pan(0.6)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A B A B A B A ~ A B A B A B A ~ A B A B A B A ~ A B A B A B A ~ A B A B A B A ~ A B A B A B A ~@2 A ~ A ~ A ~ C A
  B A B A B A ~@2
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x ~ x ~@3 x!2 ~@2 x!2 ~@4", C: "x!2 ~@6",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ C B ~ B ~ B ~ B ~@2 A
  ~ A ~ A ~ B ~
>`.pickRestart({
  A: "~@14 x!2", B: "x!4 ~@4", C: "x!8",
})).gain(0.44)

// drums · ride
const ride = s("rd").struct("<~@4 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~@2 A ~ A ~ A ~ B A@7 ~@2>".pickRestart({
  A: "x!8", B: "x!4 ~@4",
})).gain(0.44)

stack(bass, acoustic_guitar_steel, overdriven_guitar, distortion_guitar, snare, low_tom, mid_tom, ride)

More by The Smashing Pumpkins