Strudelify

Rivers

Sugar Ray

KeyG majorTempo96 bpm
0:00/0:00
// Rivers — Sugar Ray
// 96 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · electric guitar clean · "Clean Guitar-1"
const electric_guitar_clean = note("<A B A B A B A C A B A B A B A C ~@8 A B A C A B A B A B A C ~@33>".pickRestart({
  A: "g4 b4 d5 b4 f#4 g4 d5 g4", B: "c4@2 g4@2 c5@2 g4@2 d4@2 a4 g4 a4@2 b4@2",
  C: "c4@2 g4@2 c5@2 g4@2 d4@2 a4 g4 a4@2 g4@2",
})).s("gm_electric_guitar_clean").gain(0.72)

// bass · acoustic bass · "Bass Guitar"
const bass = note(`<
  A B A B A B A B 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 B A B C D C D C D C D E@2 F@2 E@2 G ~ C D C D C D C
  D C D C D C D C D H
>`.pickRestart({
  A: "g2@7 ~ f#2@7 ~", B: "c2@7 ~ d2@7 ~", C: "g2!4 e2!4", D: "c3!4 d3!4", E: "e3@7 ~ e3@7 ~", F: "c3@7 ~ c3@7 ~",
  G: "d3@15 ~", H: "g2@15 ~",
})).s("gm_acoustic_bass").gain(0.72)

// other · kalimba · "Woodblock"
const kalimba = note(`<
  [a5@2 d6 ~@3 d6@2 a5@2 d6 ~@3 d6@2]!15
  [a5@2 d6 ~@3 d6@2 a5@2 d6 ~@5]
  ~@8
  [a5@2 d6 ~@3 d6@2 a5@2 d6 ~@3 d6@2]!11
  [a5@2 d6 ~@3 d6@2 a5@2 d6 ~@5]
  ~@33
>`).s("gm_kalimba").gain(0.72)

// chords · distortion guitar · "Dist.-Guitar"
const distortion_guitar = note(`<
  ~@16 A B A B A B A B ~@12 A B A B A B A B C@2 D@2 C@2 E ~ A B A B A B A B A B A B A B A B F
>`.pickRestart({
  A: "[g2,d3,g3]!4 [e2,b2,e3]!4", B: "[c3,g3,c4]!4 [d3,a3,d4]!4", C: "[e3,b3,e4]@7 ~ [e3,b3,e4]@7 ~",
  D: "[c3,g3,c4]@7 ~ [c3,g3,c4]@7 ~", E: "[d3,a3,d4]@15 ~", F: "[g2,d3,g3]@15 ~",
})).s("gm_distortion_guitar").gain(0.72)

// other · guitar harmonics
const guitar_harmonics = note("<~@15 [~@10 g4@5 ~] ~@19 [~@6 e4@3 ~ b4@5 ~] ~@33>").s("gm_guitar_harmonics").gain(0.72)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@59 [~@15 x] x ~@8>").gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@59 [~@7 x] ~@9>").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@59 [~@13 x ~@2] ~@9>").gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@16 A@8 ~@12 A@14 B ~ A@7 C D@8 B>".pickRestart({
  A: "x!4", B: "x", C: "x!3 ~", D: "x!2",
})).gain(0.72)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!8]!16 ~@8 [x!8]!12 ~@24 [x!4]!8 x>").gain(3.65)

stack(
  electric_guitar_clean, bass, kalimba, distortion_guitar, guitar_harmonics, kick, snare, low_tom, mid_tom, high_tom,
  crash, cabasa
)

More by Sugar Ray