Strudelify

Falls Apart

Sugar Ray

KeyE majorTempo104 bpm
0:00/0:00
// Falls Apart — Sugar Ray
// 104 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/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 · overdriven guitar
const overdriven_guitar = note(`<
  A@9 B A C D E F G H E F G H I J I J A B K L A M A L A M A C D E F G H E F G H I J I J A B K L A M A L A M A C N B N O
  N B P Q R@8 E F G H S T S ~ A M A C U M A C A M A V@2 W D ~@8
>`.pickRestart({
  A: "[e4,b4,e5]!8", B: "[a3,e4,a4]!8", C: "[c#4,g#4,c#5]!4 [b3,f#4,b4]!4", D: "[e4,b4,e5]@13 ~@3",
  E: "~ e4 g#4 b4@2 c#5 b4 e4", F: "a3 e4 f#4 a4@2 g#4 e4 a3", G: "e4@2 e4@2 g#4@2 b4@4 c#5@2 b4@3 ~",
  H: "a4@2 g#4@2 a4@2 b4@2 a4@2 g#4@3 ~ e4@2", I: "[c#4,g#4,c#5]!8", J: "[b3,f#4,b4]!8",
  K: "[e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]!2 [e4,b4,e5]@2 [e4,b4,e5]@2", // E5
  L: "[c#4,g#4,c#5]!4 [b3,f#4,b4]!2 ~@2", // C#5 B5
  M: "[a3,e4,a4,e5]!3 [a3,e4,a4]!2 [a3,e4,a4,e5] [a3,e4,a4]!2, ~@3 d#5@2 ~ c#5@2", N: "[g#3,d#4,g#4]!8",
  O: "[a3,e4,a4]!4 [b3,f#4,b4]!4", // A5 B5
  P: "~@2 [g#3,d#4,g#4]@2 [g#3,d#4,g#4]@3 ~ [g#3,d#4,g#4]@3 ~ [g#3,d#4,g#4]@2 [g#3,d#4,g#4]@2", // G#5
  Q: "[g#3,d#4,g#4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2 ~@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]!2", // G#5 A5 B5
  R: "[[e4,b4,e5]@59 ~@5]/8", S: "g#3 f#4 b4 [d#5,g#5]@4 ~", T: "c#4 g#4 b4 [b4,e5,g#5]@4 ~",
  U: "[e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]@2 [e4,b4,e5]!2", // E5
  V: "[c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 [b3,f#4,b4]@3 ~@5", // C#5 B5
  W: "[c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]!2", // C#5 B5
})).s("gm_overdriven_guitar").gain(0.29)

// bass · electric bass pick
const bass = note(`<
  ~@4 A B A C A B A C ~ D E D F D E D F G H G I J E ~@2 J E J F J E J F ~ D E D F D E D F G H G I J E ~@2 J E J F J E J
  F K L K M N O P@2 Q@4 R S D T U V U W X ~@2 Y J S J Z J S J AA AB AC AD F@2 AA Q@4 ~@5
>`.pickRestart({
  A: "e2@2 [e2,e3]@2 [e2,e3]@2 [e2,c#3]@2 [e2,e3]@2 e3 f#3 e2@2 e2@2, ~@5 e2 e3@2", // E C#m E
  B: "a2@2 [a2,e3]@2 [a2,e3]@2 [a2,c#3]@2 [a2,e3]@2 e3 f#3 a2@2 a2@2, ~@5 a2 e3@2", // A5 A A5
  C: "[c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2 e3 ~ b2@2 [b2,d#3]@2 [b2,e3]@2, ~@4 b2 ~@3, ~@9 d#3@3 ~@4", D: "e3!8",
  E: "a2!8", F: "c#3!4 b2!4", G: "c#3!8", H: "b2!8", I: "b2!6 g#2 f#2", J: "e2!8", K: "g#2!8", L: "a2!6 a3 a2",
  M: "a2!2 a3 a2 b2!2 b3 b2", N: "g#2!4 g#3 f#3 d#3 c#3", O: "a2!2 a3 a2!5",
  P: "[~@2 g#2@2 g#2@3 ~ g#2@3 ~ g#2@2 g#2@4 a2@2 a2@2 a2@2 a2@2 b2@2 b2@3 ~]/2", Q: "[e2@61 ~@3]/4",
  R: "e2@2 e2@2 e2@2 e2!2 e2@2 e2@2 e2@2 e2@2", S: "a2@2 a2@2 a2@2 a2!2 a2@2 a2@2 a2@2 a2@2", T: "c#3!4 b2!3 e2",
  U: "e3@2 e3@2 e3!4 e3@2 e3@2 e3@2 e3@2", V: "a2@2 a2@2 a2!4 a2@2 a2@2 a2@2 a2@2",
  W: "c#3@2 c#3@2 c#3@2 c#3!2 b2@2 b2@2 b2@2 b2@2", X: "g#3@13 ~@3", Y: "c#3!4 ~@4",
  Z: "c#3@2 c#3@2 c#3@2 c#3@2 b2@2 b2@2 b2@2 b2!2", AA: "c#3!4 b2!2 g#2 f#2", AB: "e2!6 f#2 g#2", AC: "a2!6 b2 c#3",
  AD: "e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 f#3 g#3",
})).s("gm_electric_bass_pick").gain(0.29)

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

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

// drums · clap
const clap = s("cp").struct("<~@2 A@5 B ~@4 C A@16 ~@8 C A@16 ~@16 A@7 B A@4 D@2 A@2 ~@14 E A ~@7>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@12 x!4", D: "~@2 x ~@4 x", E: "~@12 x ~@2 x",
})).gain(0.26)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A B@4 ~@17 B@8 ~@17 B@7 C B@6 D E ~@7 A ~@4 F@2 ~@2 B@7 C B@6 G ~@8>".pickRestart({
  A: "~@5 x!3", B: "x!3 ~ x!3 ~", C: "x ~ x ~ x ~@3 x ~ x!6", D: "x!5 ~ x!2", E: "x!3 ~ x ~ x!2", F: "~@2 x ~@3 x!2",
  G: "x",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct("<~@2 A@5 B ~@5 A@16 ~@9 A@16 ~@24 A@4 ~@2 A@2 ~@23>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@4 B ~@24 C ~@39 A ~@4 A@2 ~@25>".pickRestart({
  A: "~@7 x", B: "~@12 x!4", C: "~@8 x!8",
})).gain(0.26)

// drums · high tom
const high_tom = s("ht").struct("<~@7 [~@7 x] ~@69 [~@7 x] ~@31>").gain(0.26)

// drums · crash
const crash = s("cr").struct("<~@8 A@4 ~@17 A@8 ~@17 A@7 B A@6 C@2 D ~@15 A@7 B A@6 D ~@8>".pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "~ x!2 ~ x ~ x!2", D: "x",
})).gain(0.26)

// drums · ride
const ride = s("rd").struct("<~@2 A@6 ~@5 A@15 B ~@9 A@15 B ~@16 C D@6 E A@4 F@3 B ~@23>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~@4", C: "~@4 x!4", D: "x!8", E: "x!4 ~@3 x", F: "~@7 x",
})).gain(0.26)

// drums · bongos
const bongos = s("bongo:4").struct("<~@2 A@5 B ~@5 A@16 ~@9 A@16 ~@24 A@4 C@2 A@2 ~@23>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@2 x ~@4 x",
})).gain(0.69)

stack(overdriven_guitar, bass, kick, snare, clap, low_tom, hihat, mid_tom, high_tom, crash, ride, bongos)

More by Sugar Ray