Strudelify

My Next Broken Heart

Brooks & Dunn

KeyG majorTempo144 bpm
0:00/0:00
// My Next Broken Heart — Brooks & Dunn
// 144 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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.

// bass · electric bass finger
const bass = note(`<
  ~@2 A B C D A E C F A B C D A G B H A B C D A E C F A B C D A G B H A B C D A E C I J K L M J K N O G P G D G E Q R A
  B C D A G B H A B C D A E C I J K L M J K N O G P G D G E S T G E S T G E U V@3 ~
>`.pickRestart({
  A: "g1@4 b1@4 d2@3 ~ g2@3 ~", B: "d2 f#2 a2 f#2", C: "g1@4 b1@4 d2@3 ~ g2@4", D: "c2@4 e2@4 g2@4 e2@3 ~",
  E: "d2@4 f#2@4 a2@4 f#2@3 ~", F: "d2 ~@2 d2!2 ~@2 d2 d2@3 a1 d2@3 a1", G: "g1@4 b1@4 d2@4 b1@3 ~",
  H: "d2@2 c2@2 b1@2 a1 ~", I: "g1@4 a1@4 a#1@4 b1@3 ~", J: "c2@3 ~ e2@3 ~ g2@3 ~ e2@3 ~",
  K: "f2@3 ~ f2@3 ~ c2@3 ~ c2@3 ~", L: "g1@3 ~ b1@4 d2@4 b1@4", M: "g1@4 a1@4 a#1@3 ~ b1@3 ~",
  N: "d2@2 ~@2 d2@2 ~@2 d2@3 d1 d2@2 ~ d1", O: "d#1@4 e1@4 f1@4 f#1@3 ~", P: "c2 e2 g2 e2", Q: "g1 b1 d2 g1",
  R: "~@3 d2!2 ~@2 d2!2 ~@2 d2!2 ~@2 d2", S: "g1 b1 d2 b1", T: "c2@2 e2@2 g2@2 e2 ~", U: "g1@4 b1@4 d2@4 g2@3 ~",
  V: "[g2@3 d2 b1@3 ~ g1@39 ~]/3",
})).s("gm_electric_bass_finger").gain(0.51).pan(0.6)

// chords · piano
const piano = note(`<
  ~@2 A B C D E F G H A B C D E@2 I J A B C D E F G H A B C D E@2 I J A B C D E F G K L M N@2 L M O P Q R G R C S G T A
  B C D E@2 I J A B C D E F G K L M N@2 L M O P Q R G R C S Q U C S Q U C S V W@4
>`.pickRestart({
  A: "[g2,d3]@4 [g3,b3,d4] ~@7 [g3,b3,d4] ~@3", B: "~@4 [d3,f#3,a3,d4] ~@7 [f#3,a3,d4] ~@3",
  C: "~@4 [g2,g3,b3,d4] ~@7 [g3,b3,d4] ~@3", D: "~@4 [c3,g3,c4,e4] ~@7 [c4,e4,g4] ~@3",
  E: "~@4 [g3,b3,d4] ~@7 [g3,b3,d4] ~@3", F: "~@4 [a3,d4,f#4] ~@7 [a3,d4,f#4] ~@3",
  G: "~@4 [g2,g3,b3,d4] ~@7 [g2,g3,b3,d4] ~@3", // G
  H: "~@3 [d3,a3,d4,f#4]!2 ~@2 [d3,a3,d4,f#4]!2 ~@2 [d3,a3,d4,f#4]!2 ~@2 [d3,a3,d4,f#4]", // D
  I: "~@4 [f#3,a3,d4] ~@7 [f#3,a3,d4] ~@3", J: "d3@4 c3@4 b2@4 a2 ~@3",
  K: "[g2,g3]@4 [a2,a3]@3 ~ [a#2,a#3]@3 ~ [b2,b3]@2 ~@2", // G A A# B
  L: "[c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3", // C
  M: "[f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [g3,c4,e4]@2 ~@2 [c3,g3,c4,e4] ~@3, ~@8 c3 ~@7", // F C
  N: "[[g3,b3,d4]@3 g2 [g3,b3,d4]@3 ~ g3@3 ~ [g3,c4,e4]@3 ~@5 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,a3,d4] ~@3, ~@7 g2@4 g2@5 g2@7 g2@2 ~@2 g2@2 ~@3, ~@8 [b3,d4]@7 [g3,b3,d4]@5 ~@12]/2", // G C G Gsus2 Bm G
  O: "[f#3,a3,d4] ~ [f#3,a3,d4] ~ [f#3,a3,d4] ~ [f#3,a3,d4]@2, d3 ~@3 d3 ~@3 d3 ~@7", P: "d#2@4 e2@4 f2@4 f#2@3 ~",
  Q: "g2@4 [g3,b3,d4] ~@7 [g3,b3,d4] ~@3", R: "~@4 [c3,g3,c4,e4] ~@7 [c3,g3,c4,e4] ~@3",
  S: "~@4 [d3,f#3,a3,d4] ~@7 [d3,f#3,a3,d4] ~@3", // D
  T: "~@3 [a3,d4,f#4]!2 ~@2 [a3,d4,f#4]!2 ~@2 [a3,d4,f#4]!2 ~@2 [a3,d4,f#4]", U: "~@4 [c3,g3,c4,e4] ~@7 [g3,c4,e4] ~@3",
  V: "~@4 [c4,e4]@4 [b3,d4]@3 g3 [a3,d4]@4, ~@3 g3@5 g3 ~@7", // C Bm D5
  W: "[~@4 d3@4 [g2,g3,b3,d4]@41 ~@15, [b3,d4] ~@7, ~@3 g3@5 ~@56]/4", // G Bm
})).s("gm_piano").gain(0.51).pan(0.8)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@2 A@2 B C D E F G A@2 B C D H I@2 A@2 B C D E F G A@2 B C D H I@2 A@2 B C D E F J K L M@2 K L N O P Q R@2 S T U@2
  A@2 B C D H I@2 A@2 B C D E F J K L M@2 K L N O P Q R@2 S T V W S T V W S T X@3 ~@2
>`.pickRestart({
  A: "[[g3,b3,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@3 ~ [f#3,a3,d4]@4 [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 [f#3,a3,d4], g2@7 g2@8 g2@2 ~@15, ~@16 d3@7 d3@4 d3@5]/2", // G D
  B: "g2@3 [g3,b3,d4] [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 [c4,e4], ~@7 g2@4 g2@5", // G C
  C: "[g3,c4,e4]@3 ~ [g3,c4,e4]@3 ~ [g3,c4,e4]@3 ~ c3@3 [g3,c4,e4], ~@3 c3@4 c3@4 [g3,c4,e4]@4 ~", // C
  D: "[g3,b3,d4]@3 ~ [g3,b3,d4]@3 g2 [g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@4, ~@3 g2@4 ~@9", // G
  E: "[f#3,a3,d4]@4 [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4]@4, d3@7 d3@4 d3@5", // D
  F: "[g3,b3,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ g2@3 [g3,b3,d4], g2@7 g2@4 [g3,b3,d4]@4 ~", // G
  G: "~@3 [d3,f#3,a3,d4]!2 ~@2 [d3,f#3,a3,d4]!2 ~@2 [d3,f#3,a3,d4]!2 ~@2 [d3,f#3,a3,d4]", // D
  H: "[g3,b3,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@4, g2@7 g2@9", // G
  I: "[[f#3,a3,d4]@4 [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~@4 [f#3,a3,d4] [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4]@2 ~@2, d3@7 d3@4 [f#3,a3,d4]@4 ~@17, ~@12 d3@7 d3@4 d3@4 d3@4 ~]/2", // D
  J: "[g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@2 ~@2, g2@7 g2@4 g2@3 ~@2", // G
  K: "[c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3", // C
  L: "[f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [c3,g3,c4,e4]@2 ~@2 [c3,g3,c4,e4] ~@3", // F C
  M: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~@4 [g3,b3,d4] [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@2 ~@2, g2@7 g2@4 g2@4 [g3,b3,d4]@4 ~@13, ~@16 g2@7 g2@4 g2@4 ~]/2", // G
  N: "[f#3,a3,d4]@4 [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 d3, d3@7 d3@4 d3@4 ~", // D
  O: "d#3@4 e3@3 ~ f3@3 ~ f#3@3 ~",
  P: "~@3 [g3,b3,d4] [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 [g3,b3], g2@7 g2@4 g2@5", // G
  Q: "~@3 g3 g3@3 ~@5 [c4,e4]@3 g3, c3@7 c3@4 c3@5, ~ [c4,e4]@2 ~, ~@8 g3@7 ~", // C
  R: "[~@12 [b3,d4]@3 ~@13 [c4,e4]@3 g3, g2@11 g2@6 ~@3 [c4,e4]@8 ~@4, ~@3 g3@4 g3@8 g3@2 ~@2 g3@5 g3@7 ~, ~@4 [b3,d4]@8 ~@4 c3@7 c3@4 c3@5]/2", // Bm C Bm
  S: "~@3 [b3,d4], g2!2, ~@3 g3@4 g3@4 g3@5, ~ [b3,d4]@2 ~", // Bm
  T: "~@3 f#3 [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4]@4, d3@7 d3@4 d3@5", // D
  U: "[~@4 [g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@3 ~ [g3,b3,d4]@3 [g3,b3,d4]@4 [d3,f#3,a3,d4]!2 ~@2 [d3,f#3,a3,d4]!2 ~@2 [d3,f#3,a3,d4]!2 ~@2 [d3,f#3,a3,d4], g2@11 g2@8 ~@13]/2", // G D
  V: "[g3,b3,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 g3, g2@7 g2@4 g2@5", // G
  W: "~@3 g3 [g3,c4,e4]@3 ~@4 [g3,c4,e4] [g3,c4,e4]@2 ~@2, c3@7 [g3,c4,e4]@4 ~@5, ~@4 c3@3 ~", // C
  X: "[[g3,b3,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@4 [g2,g3,b3,d4]@21 ~@3, d3 ~, g2@7 g2@4 g2@4 g2@4 g2@5 ~@24]/3", // G
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.3)

// chords · percussive organ
const percussive_organ = note("<~@5 A B C D E ~@30 F@2 ~@7 G ~@5 H I ~@8 J K@2 L M N O P Q ~@22 R S ~@3>".pickRestart({
  A: "~@11 [a5,d6] [b5,d6]@2 ~@2, ~@11 g6@3 ~@2", B: "[b5,d6,g6]@3 ~ b5@4 d6@3 b5 a5@2 ~ g5, ~@4 g6@7 ~ b5 ~@3",
  C: "[g5,b5,d6] ~@2 [g5,b5,d6] ~@3 [f#5,a5,d6]@6 ~@3", D: "~@3 b4, d5!2, ~ g5@3",
  E: "~@3 [d5,g5,b5] [d5,f#5,a5] ~@3 [d5,f#5,a5]@5 ~@3", // G D
  F: "[~@10 a#5@2 a5@2 g5 ~, ~@15 b5@2 ~@2 b5@5 ~@8, ~@2 d6 ~]/2", G: "d6@3 a5 f#6@3 ~ d6@3 ~ d6@2 ~ a5",
  H: "~@8 d6@7 ~, ~@4 f#6@11 ~", I: "~@4 g5@4 ~@3 g5 d6@3 ~", J: "~@12 e5 f5 ~ g5, ~@11 d5@2 ~@3",
  K: "[[d6,f6]@4 b5@3 d6 b5@3 ~ g5@2 ~ a5@4 ~@4 b5@4 a5 g5@2 ~@2, ~@11 a5@2 ~@6 b5@3 ~@10, ~@10 d6@5 ~]/2", // Dm
  L: "b4@3 ~@4 g5@4 ~ e5@4, ~@3 d5@2 ~@6 f5@2 ~@3, ~ b4@2 ~",
  M: "c5@3 ~@9 e6@2 ~@2, ~@3 e5@11 ~@2, ~@2 g5@5 ~, ~@4 c6@3 ~", N: "~ e5 ~ d5 b5 g5 ~ d5 b5@3 c6 b5@3 ~, g5 ~@7",
  O: "b5 ~@3 a5@2 ~ a5@3 ~ g5 e5 ~@3", P: "b5@3 ~ b5@3 g6@4 ~ f#6@4, ~@3 d6@3 ~@5 b5@2 ~@3", Q: "f6@4 d6@4 c6@4 b5 ~@3",
  R: "~@11 b5@2 ~@3", S: "g5 e5 ~@2",
})).s("gm_percussive_organ").gain(0.46).pan(1)

// chords · percussive organ · soft notes
const percussive_organ_soft = note("<~@48 A B ~@5 C D ~@39 E F@3 ~>".pickRestart({
  A: "~@15 a5", B: "~@7 a5 ~@3 a5@2 ~@3", C: "~@12 a5@3 ~", D: "~@2 b5 ~", E: "~@3 a5", F: "[~@4 d5@19 ~]/3",
})).s("gm_percussive_organ").gain(0.31).pan(1)

// chords · vibraphone
const vibraphone = note(`<
  ~@9 A B@2 C D E F@2 G H I J@2 K@3 ~ L@2 C D M N@2 G O P J@2 K@3 ~ Q@3 ~ R@4 S@2 T@2 U@3 ~@17 Q@3 ~ R@4 S@2 T@2 U@3 ~
  V@2 W X V@2 ~@5
>`.pickRestart({
  A: "~@15 b4", B: "[b4@2 ~ d5 ~@3 d5@7 ~@2 c5@2 ~ b4 ~@3 a4@9, ~@15 d5@2 ~@15]/2",
  C: "~@3 b4 d5 ~@2 d5@3 ~ d5@2 ~@2 d5", D: "e5@2 ~ d5@2 ~@2 c5@6 ~@3", E: "~@3 b4 ~@3 b4 b4@5 ~@2 b4",
  F: "[c5@2 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@15 ~@2]/2", G: "~@15 a4", H: "b4@2 ~ d5@2 ~@2 d5@7 ~ d5", I: "c5@2 ~ b4 ~@3 a4@9",
  J: "[~@3 b4 d5@2 ~ d5@5 d5@2 ~ e5@3 ~ d5 c5 ~@2 c5@5 ~@4]/2",
  K: "[b4 ~@2 b4@2 ~@2 b4@4 ~ b4@2 ~ c5@9 b4@4 a4@2 ~ g4@14 ~@3]/3",
  L: "[b4@2 ~ [b4,d5] ~@3 [b4,d5]@8 ~ c5@2 ~ [g4,b4] ~@3 a4@9, ~@15 d5@2 ~@15, ~@16 a4 ~@6 f#4@6 ~@3]/2", // Bm G
  M: "~@3 [g4,b4] ~@3 [g4,b4] b4@4 g4 ~@2 b4, ~@8 g4@3 ~@5", // G
  N: "[c5@2 ~ b4@3 ~ a4@3 ~ e4@4 ~ d4@12 ~@4, a4 ~@2 g4 ~@3 f#4 ~@3 g4@3 ~ a4@15 ~@2]/2",
  O: "b4@2 ~ d5@2 ~@2 [b4,d5]@8 d5, ~@3 a4 ~@12", P: "c5@2 ~ [g4,b4] ~@3 a4@9, a4 ~@6 f#4@6 ~@3",
  Q: "[[c5,e5] ~@2 [c5,e5] ~@3 [c5,e5]@4 [a4,d5] [g4,c5]@2 ~ [c5,f5]@5 [c5,f5] ~@2 g5@5 e5 ~@2 e5@2 ~@2 d5@13]/3", // C D5 C5 F5
  R: "[[c5,e5] ~@2 [c5,e5] ~@3 [c5,e5]@4 [a4,d5] [g4,c5]@2 ~ [c5,f5]@5 [c5,f5] ~@2 g5@5 e5 ~@2 e5@5 d5 ~@2 d5@13 ~@11 a4]/4", // C D5 C5 F5
  S: "[b4@2 ~ d5@3 ~ b4@4 a4 g4 ~@2 c5@3 ~ b4 a4@3 g4@5 ~@3 [b4,d5]]/2", // Bm
  T: "[[b4,d5] ~@2 [b4,d5] ~@3 [b4,d5]@4 ~ [b4,d5]@2 ~ [c5,e5]@3 ~ d5 c5@7 ~@4 [g4,b4]]/2", // Bm C G
  U: "[b4@3 [g4,b4] ~@3 [g4,b4]@5 b4@2 ~ c5@9 b4@3 ~ a4@2 ~ g4@16 ~, g4 ~@47]/3", // G
  V: "[b4@3 [g4,b4] ~@3 [g4,b4]@5 b4@2 ~ c5@9 b4@3 ~ a4@2 ~ g4, g4 ~@31]/2", W: "g4@7 ~", X: "~@6 [g4,b4] ~",
})).s("gm_vibraphone").gain(0.51).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@2 A@40 B C A@2 B C A@26 B C A@2 B C A@17 D ~@3>".pickRestart({
  A: "x ~@6 x!2 ~@2 x ~@3 x", B: "x!4", C: "x ~@3 x ~@3 x ~@2 x ~@3 x", D: "x ~@6 x!2 ~@7",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@7 C B@15 C B@7 D B@7 E B D B@3 D B C B@7 C B@7 F B@7 F B D B@3 D B C B@7 F B@3 C B@3 G ~@3
>`.pickRestart({
  A: "~@11 x ~@3 x", B: "~ x ~ x", C: "~ x!3", D: "~@4 x ~@7 x ~@2 x", E: "~@4 x ~@10 x", F: "~@4 x ~@7 x!2 ~ x",
  G: "~@3 x ~@3 x ~@8",
})).gain(0.51)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~@7 B ~@15 B ~@15 C ~@7 B ~@7 B ~@7 D ~@7 D ~@7 B ~@7 D ~@3 B ~@3 E ~@3
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@3 x ~@3 x ~@3 x", C: "~@11 x!3 ~@2", D: "~@11 x ~@4", E: "x!2 ~@2 x ~@11",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct("<A@43 B A@3 B A@27 B A@3 B A@17 C ~@3>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@2 x ~ x ~@2", C: "x!2 ~@2",
})).gain(0.51)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@3
>`.pickRestart({
  A: "~@15 x", B: "~ x",
})).gain(0.51)

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

// drums · ride
const ride = s("rd").struct("<~@2 A@7 B ~@34 A@2 ~@2 A B A@7 B A@16 ~@2 A@2 ~@2 A B A@11 B A@3 C ~@3>".pickRestart({
  A: "x!4", B: "x", C: "x!2 ~@2",
})).gain(0.51)

stack(
  bass, piano, acoustic_guitar_steel, percussive_organ, percussive_organ_soft, vibraphone, kick, snare, snare_soft,
  hihat, hihat_soft, open_hat, crash, ride
)

More by Brooks & Dunn