Strudelify
KeyC minorTempo110 bpm
0:00/0:00
// We Are — Vertical Horizon
// 110 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 8 tuba (copy of ch 1 electric guitar clean)
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D A E C D ~@18 F@2 A B C D A E G H I ~@18 F@2 A B C D A E G H J@6 K@2 ~@6 L F A B C D A E G D M B C D A E G D ~
>`.pickRestart({
  A: "[c2,c3,c4,g4]@2 [c2,c3,c4,g4]@2 [c2,c3,c4,eb4,g4] ~ [c2,c3,c4,g4]@2 [c2,c3,c4,g4] ~ [c2,c3,c4,g4]@2 [c2,c3,c4,eb4,g4] ~ [c2,c3,bb3,f4] ~", // C5 Cm C5 Cm Fsus4
  B: "[bb1,bb2,bb3,f4] ~ [bb1,bb2,bb3,f4] ~ [bb1,bb2,bb3,d4,f4] ~ [bb1,bb2,bb3,f4] ~ [bb1,bb2,bb3,f4] ~ [bb1,bb2,bb3,f4] ~ [bb1,bb2,bb3,d4,f4] ~ [bb1,bb2,bb3,f4] ~", // Bb5 Bb Bb5 Bb Bb5
  C: "[f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3,c4] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3,c4] ~ [f1,d3,g3,bb3] ~", // Fm Gm7
  D: "[ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4,eb4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4,eb4] ~ [ab1,ab3,c4] ~", // Ab
  E: "[bb1,bb3,f4] ~ [bb1,bb3,f4] ~ [bb1,bb3,d4,f4] ~ [bb1,bb3,f4] ~ [bb1,bb3,f4] ~ [bb1,bb3,f4] ~ [bb1,bb3,d4,f4] ~ [bb1,bb3,f4] ~", // Bb5 Bb Bb5 Bb Bb5
  F: "[c3,c4]!8", // C
  G: "[f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,c3,f3,ab3] ~ [f1,d3,g3,bb3] ~", // Fm Gm7
  H: "[ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~ [ab1,ab3,c4] ~", // Ab
  I: "[bb1,bb3] ~ [bb1,bb3] ~ [bb1,bb3] ~ [bb1,bb3] ~ [bb1,bb3] ~ [bb1,bb3] ~@5", // Bb
  J: "[[g1,g3]@3 [ab1,ab3]@3 [bb1,bb3]@10]/2", K: "[[g1,g3]@3 [ab1,ab3]@3 [bb1,bb3]@8 ~@2]/2", L: "c3 [c3,c4]!7",
  M: "[c2,c3,c4,g4] ~ [c2,c3,c4,g4]@2 [c2,c3,c4,eb4,g4] ~ [c2,c3,c4,g4]@2 [c2,c3,c4,g4] ~ [c2,c3,c4,g4]@2 [c2,c3,c4,eb4,g4] ~ [c2,c3,bb3,f4] ~", // C5 Cm C5 Cm Fsus4
})).s("gm_electric_guitar_clean").gain(0.44)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~ A B@2 ~ A B@2 ~@21 A B@2 ~ A B@2 ~@22 A B@2 ~ A B@2 ~@17 A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~
>`.pickRestart({
  A: "~ d4", B: "c4/2",
})).s("gm_electric_guitar_jazz").gain(0.64)

// chords · electric guitar jazz · soft notes
const electric_guitar_jazz_2 = note(`<
  ~ A@2 ~@2 A@2 ~@22 A@2 ~@2 A@2 ~@23 A@2 ~@2 A@2 ~@18 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2
>`.pickRestart({
  A: "[~@15 db4@2 ~@15]/2",
})).s("gm_electric_guitar_jazz").gain(0.32)

// chords · fretless bass
const fretless_bass = note(`<
  ~@8 A B A C A B A D A E F@2 G@2 F@6 ~@9 A B A C A B A D A E F@2 G@2 F@6 ~@16 A B A D A E F@2 ~@17
>`.pickRestart({
  A: "c5 eb5 g5 bb4 eb5 f5 c5 eb5, c4@3 bb3@3 c4@2", B: "bb5 c5 eb5 bb5 c5 eb5 bb5 f5, ~@2 c4@5 ~ c4@7 ~",
  C: "c6 c5 f5 c6 c5 f5 c6 f5, ~@2 c4@5 ~ c4@7 ~", D: "c6 c5 f5 c6 c5 f5 c6 f5, ~@2 c4@5 ~ c4@6 ~@2",
  E: "bb5 c5 eb5 bb5 c5 eb5 bb5 f5, ~@2 c4@5 ~ c4@6 ~@2",
  F: "[c5 eb5 g5 bb4 eb5 f5 c5 eb5 c6 c5 f5 c6 c5 f5 c6 f5, c4@31 ~]/2",
  G: "[c5 eb5 g5 bb4 eb5 f5 c5 eb5 bb5 c5 eb5 bb5 c5 eb5 bb5 f5, c4@31 ~]/2",
})).s("gm_fretless_bass").gain(0.29)

// bass · contrabass
const bass = note(`<
  A B C D A B C D ~@12 E F E G E F E G A B C D A B C H I ~@4 E F E G E F E G E F E G E F E G A B C D A B C H J@6 K@2 E F
  E G E F L G A B C D A B C D A B C D A B C D M
>`.pickRestart({
  A: "c3", B: "bb2", C: "f2@7 g2", D: "ab2@7 bb2", E: "c3@2 bb2@2 c3@4 ~@2 bb2@3 ~ bb2@2", F: "[c3,eb3]@3 ~",
  G: "f2@3 ~", H: "ab2", I: "bb2@13 ~@3", J: "[[g1,g2]@3 [ab1,ab2]@3 [bb1,bb2]@10]/2",
  K: "[[g1,g2]@3 [ab1,ab2]@3 [bb1,bb2]@8 c2@2]/2", L: "~@2 bb2@2 c3@4 ~@2 bb2@3 ~ bb2@2", M: "c3@7 ~@9",
})).s("gm_contrabass").gain(0.55)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@49 A B A C A D@3 E F G H@2 F G I ~@14 J@2 E F G H@2 F G H@2 F K L@2 F M N@2
>`.pickRestart({
  A: "~@4 eb4 ~ eb4 ~ eb4@2 d4 ~ d4 ~ d4 ~", B: "d4@2 eb4 ~ eb4@8 ~@4", C: "d4@2 c4 ~ c4@7 ~ c4@2 bb3@2",
  D: "[d4@2 eb4 ~ eb4@5 ~ eb4@2 g4@2 f4@16 eb4@16 ~@2]/3", E: "~@14 c4!2", F: "eb4 f4@2 c4@2 ~@3",
  G: "~@6 eb4@3 ~ eb4@4 ~@2", H: "[~@6 eb4@3 ~ eb4@3 ~ eb4@5 ~@11 c4!2]/2", I: "~@6 eb4@3 ~ eb4@6",
  J: "[~@7 eb4@8 ~]/2", K: "~@10 eb4@2 d4@3 ~", L: "[~@2 eb4@2 d4@3 ~@3 eb4@2 d4@2 eb4@7 ~@9 c4!2]/2",
  M: "~@6 eb4@2 d4@3 ~@3 eb4@2", N: "[d4@3 ~@3 eb4@2 d4@2 eb4@2 d4@2 ~@2 g4@2 ~@14, ~@7 eb4@3 ~@6]/2",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x!2 ~ x!3 ~ x]!36 [x ~ x ~@3 x ~ x ~ x ~ x!3 ~] [x!2 ~ x!3 ~ x]!60 x>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!27 [~@4 x ~@7 x ~ x!2] [~ x ~ x]!8 [~@4 x ~@7 x!3 ~] [~ x ~ x]!60 ~>")
  .gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!27 [~@2 x ~@3 x!2] [~ x ~ x]!69 ~>").gain(0.64)

// drums · china
const china = s("cr").struct("<[x!8]!97 x>").gain(0.48)

stack(
  electric_guitar_clean, electric_guitar_jazz, electric_guitar_jazz_2, fretless_bass, bass, overdriven_guitar, kick,
  snare, hihat, china
)

More by Vertical Horizon