Strudelify

Where the River Flows

Collective Soul

KeyF majorTempo136 bpm
0:00/0:00
// Where the River Flows — Collective Soul
// 136 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Overdriven Guitar" overdriven guitar (copy of ch 2 "Distortion Guitar" distortion guitar); ch 2 "Distortion Guitar" distortion guitar (copy of ch 4 "Bass" electric bass pick)
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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.

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B A B A B A B C@3 D A B A B C@3 D A B A B E F C G E F C H A B A B C@3 D A B A B C@3 D A B A B E F C G E F C H A B A
  B I@4 J@2 I@2 A B A B C@3 D A B A B C@3 D A B A B E F C G E F C H E F C G E F C H A B A B A B A
>`.pickRestart({
  A: "[c2,c3]@2 ~ [c2,c3] [d2,d3] [c2,c3] [eb2,eb3] ~", B: "~ [c2,c3] [d2,d3] [c2,c3] [eb2,eb3] ~ [eb2,eb3] ~",
  C: "[f2,f3]!8", D: "[f2,f3]!5 [c2,c3] [g2,g3] [eb2,eb3]", E: "[g2,g3]!8", F: "[g2,g3]!7 [c2,c3]",
  G: "[f2,f3]!7 [c2,c3]", H: "[f2,f3]!3 [c2,c3] [eb2,eb3] [c2,c3] [eb2,eb3]!2",
  I: "[eb2,eb3] [c2,c3]!7 [eb2,eb3] [c2,c3] [eb2,eb3] [c2,c3] [g1,g2]!2 [eb2,eb3] [c2,c3]", // Eb C Eb C Eb C G Eb …
  J: "[f2,f3]!8 [g2,g3] [bb2,bb3]!2 [g2,g3] [bb2,bb3]!2 [g2,g3]!2", // F G Bb G Bb G
})).s("gm_electric_bass_pick").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B C D E@3 F A B C D E@3 F A B C D E G E A E G E@2 A B C D E@3 F A B C D E@3 F A B C D E G E A E G E@2 A B C D
  A@4 H@2 A F A B C D E@3 F A B C D E@3 F A B C D E G E A E G E@3 G E A E G E@2 A B C D A B A
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@2 x!2 ~@3", C: "x ~@4 x ~ x", D: "~ x ~ x!2 ~@3", E: "x!2", F: "x", G: "x ~@3 x ~@2 x",
  H: "~@5 x ~@2",
})).gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@7 B A@7 B A@4 ~@8 A@7 B A@7 B A@4 ~@8 A@4 C@4 ~@2 C D A@7 B A@7 B A@4 ~@23
>`.pickRestart({
  A: "x!8", B: "x!4 ~ x!3", C: "~@2 x!3 ~ x!2 ~@2 x!3 ~ x!2", D: "~@2 x!3 ~ x!2 ~@8",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@7 A ~@11 B ~@7 A ~@7 A ~@11 B ~@4 C@4 D@2 C E ~@7 A ~@7 A ~@11 B ~@15
>`.pickRestart({
  A: "~ x", B: "~@5 x ~ x", C: "x!2", D: "x!4", E: "x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@15 A ~@11 A ~@15 A ~@23 A ~@15 A ~@6 B A ~@14>".pickRestart({
  A: "x", B: "~@5 x ~ x",
})).gain(0.64)

// drums · ride bell
const ride_bell = s("rd").struct("<~@100 [x!4]!8 ~@7>").gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@24 A@7 B ~@20 A@7 B ~@32 A@7 B ~@15>".pickRestart({
  A: "x!16", B: "x!8 ~@8",
})).gain(0.64)

stack(bass, kick, snare, hihat, open_hat, crash, ride_bell, tambourine)

More by Collective Soul