Strudelify

6th Avenue Heartache

The Wallflowers

KeyF majorTempo80 bpm
0:00/0:00
// 6th Avenue Heartache — The Wallflowers
// 80 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 7 "Bass Double" named as a bass, played on acoustic bass (its electric guitar muted patch is not one)
// note: duplicate parts dropped: ch 7 "Bass Double" acoustic bass (copy of ch 5 "Bass" acoustic bass)
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 3.
setcpm(80/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 · acoustic guitar steel · "Guitar 1"
const acoustic_guitar_steel = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C ~
>`.pickRestart({
  A: "[f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!3 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2", // F
  B: "[c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]!2 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4] [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]!3 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]!2", // C
  C: "[g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]!2 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4] [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]!3 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]!2", // Gm
  D: "[f2,d3,f3,bb3,d4,f4]@2 [f2,d3,f3,bb3,d4,f4]!2 [f2,d3,f3,bb3,d4,f4]@2 [f2,d3,f3,bb3,d4,f4] [f2,d3,f3,bb3,d4,f4]@2 [f2,d3,f3,bb3,d4,f4]!3 [f2,d3,f3,bb3,d4,f4]@2 [f2,d3,f3,bb3,d4,f4]!2", // Bb
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(1)

// chords · acoustic guitar steel · "Guitar 2"
const acoustic_guitar_steel_2 = note(`<
  ~ A@8 ~@8 B C D E A@8 F@4 B C D E B C D E G@8 F@4 B C D E B C D E H@6 I@3 ~@3 J@4 K@4 B C D E B C D E L@5 C D E M@8
>`.pickRestart({
  A: "[~@63 bb3, f3 f4 g4 f4 c3 d4 g4 d4 g2 f4 g4 f4 bb2 f4 g4 f4 f3 f4 g4 f4 c3 d4 g4 d4 g2 f4 g4 f4 bb2 f4 g4 f4, ~ c4@2 c4@2 c4@2 f3@2 g3@2 c4@2 c4@2 g3@2 g3@2 bb3@2 d4@2 bb3@2 f3@2 bb3@2 bb3@2 bb3@2 c4@2 c4@2 c4@2 f3@2 g3@2 c4@2 c4@2 g3@2 g3@2 bb3@2 d4@2 bb3@2 f3@2 bb3@2 bb3@2 ~]/8",
  B: "[c3,f3,c4,f4,a4]@4 [c3,f3,c4,f4,a4]@3 [c3,f3,c4,f4,a4] [c3,f3,c4,f4,a4]@4 [c3,f3,c4,f4,a4]@4", // F
  C: "[c3,g3,c4,e4,g4]@4 [c3,g3,c4,e4,g4]@3 [c3,g3,c4,e4,g4] [c3,g3,c4,e4,g4]@4 [c3,g3,c4,e4,g4]@4", // C
  D: "[g2,d3,g3,bb3,d4,g4]@3 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]", // Gm
  E: "[bb2,d3,f3,bb3,d4,f4]@4 [bb2,d3,f3,bb3,d4,f4]@3 [bb2,d3,f3,bb3,d4,f4] [bb2,d3,f3,bb3,d4,f4]@4 [bb2,d3,f3,bb3,d4,f4]@4", // Bb
  F: "[~@31 bb3, f3 f4 g4 f4 c3 d4 g4 d4 g2 f4 g4 f4 bb2 f4 g4 f4, ~ c4@2 c4@2 c4@2 f3@2 g3@2 c4@2 c4@2 g3@2 g3@2 bb3@2 d4@2 bb3@2 f3@2 bb3@2 bb3@2 ~]/4",
  G: "[~@8 g4@2 g4!2 ~@2 g4 ~@3 g4@2 ~@3 g4 ~@12 g4@2 g4!2 ~@2 g4@2 g4@2 ~@8 f4@2 ~@2 f4@2 ~@52 bb2@4 [f3,bb3]@4 c3 d3 f3 f4@5, ~@4 f4@4 ~@4 g4@2 ~ g4@2 ~@3 f4@2 c4@2 ~@2 f4@4 f4@2 g4@4 ~@4 g4@2 ~@4 g4@4 ~@2 g4@4 ~ g4@2 ~@3 g4@4 c4@4 c4@4 c4@4 f3@4 g3@4 c4@4 c4@4 g3@4 g3@4 bb3@4 d4@4 bb3@4 ~@14, ~@6 c4@4 ~@3 a4@2 ~ c4@4 ~ g4@2 ~ g4@4 g4@3 a4@2 ~ a4@4 ~@3 a4@2 ~@5 f4@6 ~@2 f4@2 ~@2 f4@4 f3@4 f4@4 g4@4 f4@4 c3@4 d4@4 g4@4 d4@4 g2@4 f4@4 g4@4 f4@4 ~@16]/8", // Bb5
  H: "[~@8 g4@2 g4!2 ~@2 g4 ~@3 g4@2 ~@3 g4 ~@12 g4@2 g4!2 ~@2 g4@2 g4@2 ~@8 f4@2 ~@2 f4@2 ~@2 g4@4 ~@6 g4@2 g4!2 ~@2 g4 ~@3 g4@2 ~@3 g4 ~@7 a4, ~@4 f4@4 ~@4 g4@2 ~ g4@2 ~@3 f4@2 c4@2 ~@2 f4@4 f4@2 g4@4 ~@4 g4@2 ~@4 g4@4 ~@2 g4@4 ~ g4@2 ~@11 c4@4 ~@3 a4@2 ~ c4@4 ~ g4@2 ~ g4@4 g4@4, ~@6 c4@4 ~@3 a4@2 ~ c4@4 ~ g4@2 ~ g4@4 g4@3 a4@2 ~ a4@4 ~@3 a4@2 ~@5 f4@6 ~@2 f4@2 ~@2 f4@4 ~@4 f4@4 ~@4 g4@2 ~ g4@2 ~@3 f4@2 c4@2 ~@2 f4@4 f4@2]/6",
  I: "[~@4 g4@2 g4!2 ~@2 g4@2 g4@2 ~@8 f4@2 ~@2 f4@2 ~@2 g4@4 ~@14, g4@4 ~@4 g4@2 ~@4 g4@4 ~@2 g4@4 ~ g4@2 ~@21, ~@2 a4@4 ~@3 a4@2 ~@5 f4@6 ~@2 f4@2 ~@2 f4@4 ~@16]/3",
  J: "[~@4 f4@2 ~@46 [bb3,f4]@2 ~ f4@9, f3@7 f4@13 f4@5 ~@7 bb3@6 bb3@2 ~@6 bb3@4 f3@4 bb3@2 ~@8, c4@6 c4@2 ~@8 c3@4 ~@3 g4@16 g4@12 ~@13, ~@9 c4@2 c4 ~@4 [g2,d3,g3]@4 ~@4 bb2@2 ~@6, ~@36 f4@4 ~@5 f4@2 ~@17]/4", // Bb5 G5
  K: "[[c4,c5]@8 ~@15 f4@9, [f3,f4]@16 ~@3 g4 ~@2 f4 ~@9, ~ [c3,g3,c4,e4,c5]@2 ~, ~@39 a4@10 ~@15, ~@45 g4@2 ~@17]/4", // C F C
  L: "[~@8 g4@2 g4!2 ~@2 g4 ~@3 g4@2 ~@3 g4 ~@12 g4@2 g4!2 ~@2 g4@2 g4@2 ~@8 f4@2 ~@2 f4@2 ~@4 [c3,f3,c4,f4,a4]@4 [c3,f3,c4,f4,a4]@3 [c3,f3,c4,f4,a4] [c3,f3,c4,f4,a4]@4 [c3,f3,c4,f4,a4]@4, ~@4 f4@4 ~@4 g4@2 ~ g4@2 ~@3 f4@2 c4@2 ~@2 f4@4 f4@2 g4@4 ~@4 g4@2 ~@4 g4@4 ~@2 g4@4 ~ g4@2 ~@3 g4@4 ~@14, ~@6 c4@4 ~@3 a4@2 ~ c4@4 ~ g4@2 ~ g4@4 g4@3 a4@2 ~ a4@4 ~@3 a4@2 ~@5 f4@6 ~@2 f4@2 ~@2 f4@4 ~@16]/5", // F
  M: "[~@8 g4@2 g4!2 ~@2 g4 ~@3 g4@2 ~@3 g4 ~@12 g4@2 g4!2 ~@2 g4@2 g4@2 ~@8 f4@2 ~@2 f4@2 ~@2 g4@4 ~@6 g4@2 g4!2 ~@2 g4 ~@3 g4@2 ~@3 g4 ~@12 g4@2 g4!2 ~@2 g4@2 g4@2 g4@4 ~@14, ~@4 f4@4 ~@4 g4@2 ~ g4@2 ~@3 f4@2 c4@2 ~@2 f4@4 f4@2 g4@4 ~@4 g4@2 ~@4 g4@4 ~@2 g4@4 ~ g4@2 ~@11 c4@4 ~@3 a4@2 ~ c4@4 ~ g4@2 ~ g4@4 g4@3 a4@2 ~ a4@4 ~@3 a4@2 ~@21, ~@6 c4@4 ~@3 a4@2 ~ c4@4 ~ g4@2 ~ g4@4 g4@3 a4@2 ~ a4@4 ~@3 a4@2 ~@5 f4@6 ~@2 f4@2 ~@2 f4@4 ~@4 f4@4 ~@4 g4@2 ~ g4@2 ~@3 f4@2 c4@2 ~@2 f4@4 f4@2 g4@4 ~@4 g4@2 ~@22]/8",
})).s("gm_acoustic_guitar_steel").gain(0.29).pan(0)

// chords · acoustic guitar steel · "Guitar 3"
const acoustic_guitar_steel_3 = note("<~@8 A ~@3 A ~@11 A ~@19 A ~@27 B ~@7 A ~@11 A ~@7 A ~@4>".pickRestart({
  A: "~@8 c3 ~@7", B: "~@8 c3 ~@4 bb3 ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A B C D A B C D E F G H E F G D A B C D A B C D E F G H E F G D A B C D A B C I J B C K E F G H E F G D A B C D A B
  C L M B C N O F C P Q R S T U V W H X Y Z AA AB F C D A AC C L AD B C AE AB F C D AF F C D AG AH AI ~
>`.pickRestart({
  A: "f1@7 f1 ~ f1 f1@4 g1@2", B: "c2@7 c2 ~ c2 c2@4 bb1 a1", C: "g1@7 g1 ~ g1 g1@4 f1 g1",
  D: "bb1@7 bb1 ~ bb1 bb1@3 a1 g1@2", E: "f1@7 f1 ~ f1 f1@6", F: "c2@7 c2 ~ c2 c2@6", G: "g1@7 g1 ~ g1 g1@6",
  H: "bb1@7 bb1 ~ bb1 bb1@6", I: "bb1@7 f1 bb1!2 bb1@2 bb1 a1 g1@2", J: "f1@7 f1 ~ f1 f1@2 g1@2 c2 d2",
  K: "bb1@7 f1 bb1@3 bb1 a1@2 g1@2", L: "bb1@5 f1 g1 bb1@2 bb1 c2 bb1 d2!2 c2@2",
  M: "f2@3 f2!2 d2 c2 f2 ~@2 f2@4 e2 d2", N: "bb1@8 bb2!4 d2 f2 d2 c2", O: "f2@7 f2 ~ f2 f2@4 e2 d2",
  P: "bb1@6 f1 bb1@3 bb1@2 c2@2 d2@2", Q: "f2", R: "c2", S: "g2", T: "bb2@8 ~@2 bb2@3 ~@3", U: "f2@7 f2 ~ f2 f2@3 ~@3",
  V: "c2@7 c2 ~ c2 c2@5 ~", W: "g2@7 g2 ~ g2 g2@6", X: "f2@7 f2 ~ f2 f2@6", Y: "c2@7 c2 ~ c2 c2@4 d2 f2",
  Z: "g2@7 c2 g2@2 g2@2 a2@3 d2, ~@8 d2 ~@7", AA: "bb2@7 f2 g2 bb2@3 a2!2 g2!2", AB: "f2@5 c2 d2 f2 ~ f2 f2@4 e2 d2",
  AC: "c2@7 ~ c2!2 c2@6", AD: "f2@3 f2 d2 c2 a1 f1 ~ f1 f1@4 a1@2", AE: "bb1@7 bb1 ~ bb1 bb1@2 d2 f2 d2 c2",
  AF: "f1@2 f1@2 f1 c2 d2 f2 ~ f2 f2@4 e2 d2", AG: "~@2 d2@2 c2 a1 g1 f1@3 f1!2 g1 a1 c2 d2",
  AH: "c2@7 c2 ~ c2 c2@3 ~ bb1 a1", AI: "g1!2",
})).s("gm_acoustic_bass").gain(0.25).pan(0.6)

// other · overdriven guitar · "Lead Guitar"
const overdriven_guitar = note("<~@61 A@2 B C D E F G@2 ~@35>".pickRestart({
  A: "[bb4@4 ~@6 g4@2 g4@2 f4 g4@5 ~@2 a4 g4!2 f4@3 ~@4]/2", B: "g4@2 g4@2 f4 d4 d4@2 f4 g4 f4@6",
  C: "g4@2 g4@2 c4 d4 d4@2 c4 d4 f4 f4@3 g4 f4", D: "~@3 g4!2 f4 ~@2", E: "~@2 c5!2 c5@2 c5@2 d5 a4 c5!2 ~@4",
  F: "f4!3 ~ g4 ~@3", G: "[a4@2 a4@2 a4@2 a4@2 a4@2 a4@2 g4@2 f4 f4@9 ~@8]/2",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.7)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  A B C D E B C D F@2 ~@6 A B C D E B C D G@2 H I J K H I L B C D E B C D G@2 M N J K M N J O P Q R O P Q R O P Q R S T
  U V S T W X ~@4 S T D X O P Q R O P Q R Y Z AA AB O P Q R O P Q R O P Q R O P Q ~
>`.pickRestart({
  A: "~@14 [e4,f4,g4] [a4,b4,c5,d5,e5,f5]", B: "[f4,c5,c6], [gb5,g5,a5] ~@15", C: "[e4,c5,c6]",
  D: "c6 bb5 a5 g5, [d4,g4,bb4]", E: "d5@2 f5@12 [e4,f4,g4] [a4,b4,c5,d5,e5,f5], [bb3,bb4], d4@13 ~@3",
  F: "[d5 f5@11 ~@4, [bb3,d4,bb4] ~]/2", G: "[d5 ~@7 [f4,a4,c5]@8, [bb3,d4,bb4] ~, ~ f5@11 ~@4]/2", H: "[e4,g4,c5]",
  I: "[bb3,d4,g4]", J: "[bb3,d4,f4]", K: "[f4,a4,c5]", L: "[d4,f4]@14 [e4,g4] [a4,b4,c5,d5,e5,f5], bb3, ~@7 f4",
  M: "c5@8 ~ d5 ~ bb4 a4 ~ f4 g4, e4, g4@13 g4@2 ~, ~@4 c5 c5@3", N: "g4@12 ~ a4 ~ f4, [bb3,d4], ~@6 g4!2",
  O: "[a3,c4,f4]", P: "[g3,c4,e4]", Q: "[g3,bb3,d4]", R: "[f3,bb3,d4]", S: "[f4,a4,c5,c6]", T: "[e4,g4,c5,c6]",
  U: "[d4,g4,bb4,c6]", V: "[d4,f4,bb4,c6]", W: "~ bb5 a5 g5, [d4,g4,bb4,c6]", X: "d5 f5@3 ~@4, [d4,f4,bb4]",
  Y: "~ d4, [a3,c4,f4]", Z: "~ f4 ~@2, [g3,c4,e4]", AA: "c5 bb4 a4 g4, [g3,bb3,d4]", AB: "[f3,bb3,d4,f4]",
})).s("gm_drawbar_organ").gain(0.36).pan(0.4)

// chords · drawbar organ · "Organ" · soft notes
const drawbar_organ_soft = note("<A B ~@2 C B ~@10 A B ~@2 C B ~@10 C B ~@2 C B ~@67>".pickRestart({
  A: "~@13 [b3,c4,d4] ~@2", B: "b5 ~@15", C: "~@13 [b3,c4] ~@2, ~@13 d4@3",
})).s("gm_drawbar_organ").gain(0.16).pan(0.4)

// drums · kick
const kick = s("bd").struct("<[~@14 x!2] [x ~@6 x ~ x!2 ~@3 x ~]!68 x ~@3 [x ~@6 x ~ x!2 ~@3 x ~]!31 ~>").gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  A B C@2 D C@3 E C@3 F C@3 G H I J K C@3 L C@2 I L C@3 L C@3 F C@3 G C@3 F C@3 F C@3 G C@3 F C@3 F I M N O C P Q R S
  ~@2 T B C@6 E B C@6 E U@7 V B C@2 W C@3 ~
>`.pickRestart({
  A: "~@12 x!4", B: "x!2 ~ x", C: "~ x ~ x", D: "~@4 x ~@7 x!2 ~ x", E: "~@4 x ~@6 x!4 ~", F: "~@4 x ~@7 x ~ x!2",
  G: "~@4 x ~@3 x!3 ~ x!3 ~", H: "~@4 x ~@4 x!2 ~ x ~@3", I: "~@2 x ~@3 x!2", J: "~@4 x ~ x ~@2 x!2 ~ x ~@3",
  K: "~@4 x ~@3 x!2 ~ x!2 ~@3", L: "~@4 x ~@7 x!3 ~", M: "~@4 x ~@7 x ~@2 x", N: "x ~@3 x ~@7 x ~@2 x",
  O: "x ~@3 x ~@6 x!5", P: "~@4 x ~@6 x!2 ~@3", Q: "~@4 x ~@6 x!2 ~ x ~", R: "x ~@3 x ~@2 x!3 ~ x!5", S: "x",
  T: "~@12 x!3 ~", U: "x!4", V: "x ~@3 x ~@3 x ~@2 x!4 ~", W: "~@4 x ~@3 x!8",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  A B ~@11 B ~@2 C B ~@19 B ~@2 C ~@3 D B ~@2 D B ~@2 C ~@3 D ~@11 E B ~@3 B ~@2 D ~@4 B ~@7 B ~@3 B ~@3 B ~@7
>`.pickRestart({
  A: "~@14 x!2", B: "x", C: "~@9 x!2 ~@3 x!2", D: "~@12 x!2 ~ x", E: "~@15 x",
})).gain(0.4)

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

// drums · open hat
const open_hat = s("oh").struct("<~@78 [~@7 x] ~@26>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A
  ~@7
>`.pickRestart({
  A: "x",
})).gain(0.4)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, acoustic_guitar_steel_3, bass, overdriven_guitar, drawbar_organ,
  drawbar_organ_soft, kick, snare, low_tom, hihat, open_hat, crash
)

More by The Wallflowers