Strudelify
I'll Never Break Your Heart cover art

1996 · Backstreet Boys

I'll Never Break Your Heart

Backstreet Boys

KeyC majorTempo165 bpm
0:00/0:00
// I'll Never Break Your Heart — Backstreet Boys
// 165 bpm, 3/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 242 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(165/3)

// 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.

// other · acoustic guitar nylon · "GITAR"
const acoustic_guitar_nylon = note(`<
  A B C@2 D E@3 F B G@2 H I J@3 ~@47 K L K M N O N P Q O N R S T U L K L K M N O N P Q O N R S T U L ~@50 K L K M N O N
  P Q O N R S T U L K L K M N O N P Q O N R S T U L V W V W X N Y O V W V W Z AA AB AC AD AE AD AF AG AH AG AI AJ AH AG
  AK AL AM AN ~ AD AE AD AF AG AH AG AI AJ AH AG AK AL AM AN ~ AD AE AD AF AG AH AG AI AJ AH AG AK AL AM AN ~
>`.pickRestart({
  A: "~@5 g4@5 ~ c5@5, c4", B: "d5@5 c5@5 ~ d5@5", C: "[~@5 g3@5 ~ c4@5 d4@5 c4@5 ~ a3@5, g5@21 ~@11]/2",
  D: "~@5 a4@5 ~ c5@5, c4@11 ~@5", E: "[d5@5 c5@5 ~@11 a3@5 ~ c4@5 d4@5 c4@5 ~ g3@5, ~@11 g5@27 ~@10]/3",
  F: "~@5 a4@5 ~ c5@5, a3", G: "[~@5 a3@5 ~ c4@5 d4@5 c4@5 ~ d4@5, g5@21 ~@11]/2", H: "g4@5 a4@5 ~ c5@5",
  I: "d5@5 c5@5 ~ a4@5", J: "[~@11 c5@5 d5@5 c5@5 ~ g5@5 ~@16, g4@37 ~@11]/3", K: "c4@5 g3@5 ~ c4@5",
  L: "d4@5 c4@5 ~ g3@5", M: "g4@5 c4@5 ~ b3@5", N: "c4@5 a3@5 ~ c4@5", O: "d4@5 c4@5 ~ a3@5", P: "g4@5 c4@5 ~ g3@5",
  Q: "a3@5 g3@5 ~ c4@5", R: "g4@5 c4@5 ~ a3@5", S: "g3@5 g3@5 ~ c4@5", T: "d4@5 c4@5 ~ d4@5", U: "g4@5 g3@5 ~ c4@5",
  V: "e3@5 g#3@5 ~ b3@5", W: "e4@5 b3@5 ~ g#3@5", X: "a3@5 e3@5 ~ a3@5", Y: "e4@5 a3@5 ~ c4@5", Z: "f3@5 a3@5 ~ c4@5",
  AA: "f4@5 c4@5 ~ a3@5", AB: "g3@5 b3@5 ~ d4@5", AC: "g4@5 d4@5 ~ b3@5", AD: "d4@5 a3@5 ~ d4@5",
  AE: "e4@5 d4@5 ~ a3@5", AF: "a4@5 d4@5 ~ c#4@5", AG: "d4@5 b3@5 ~ d4@5", AH: "e4@5 d4@5 ~ b3@5",
  AI: "a4@5 d4@5 ~ a3@5", AJ: "b3@5 a3@5 ~ d4@5", AK: "a4@5 d4@5 ~ b3@5", AL: "a3@5 a3@5 ~ d4@5",
  AM: "e4@5 d4@5 ~ e4@5", AN: "a4@5 a3@5 ~ d4@5",
})).s("gm_acoustic_guitar_nylon").gain(0.34)

// other · tinkle bell · "CELESTAW"
const tinkle_bell = note(`<
  ~@34 A B ~@30 C D ~@2 C E ~@10 C D ~@2 C E ~@24 F G ~@34 C D ~@2 C E ~@10 C D ~@2 C E ~@26 H E ~@2 H I ~@10 H E ~@2 H
  I ~@10 H E ~@2 H I ~@8
>`.pickRestart({
  A: "~@5 [c5,c6]@5 ~ [b4,b5]@5", B: "[g4,g5]@5 ~@11", C: "~@5 c6@5 ~ b5@5", D: "g5@5 ~@11", E: "a5@5 ~@11",
  F: "~@5 c7@5 ~ b6@5", G: "g6@5 ~@11", H: "~@5 d6@5 ~ c#6@5", I: "b5@5 ~@11",
})).s("gm_tinkle_bell").gain(0.27)

// chords · epiano1 · "CPMBI"
const epiano1 = note(`<
  A@3 ~ B@3 ~ C@3 ~ D@3 ~ E@4 F@4 G@4 H@4 I@4 J@4 K@4 L@4 M@2 N@2 O@2 P@2 O@2 M@2 Q@2 R@2 ~@32 E@4 F@4 G@4 H@4 I@4 J@4
  K@4 L@4 M@2 N@2 O@2 P@2 O@2 M@2 Q@2 R@2 ~@34 S@2 N@2 M@4 S@2 N@2 T@2 U@2 ~@48
>`.pickRestart({
  A: "[c3@43 ~@5]/3", B: "a2/3", C: "[~@21 [c5,f5]@5 ~ [c5,e5]@5 [a4,c5]@16, f2]/3", D: "[g3@43 ~@5]/3",
  E: "[[c4,e4]@59 [b3,d4]@5]/4", F: "[~@53 [b3,d4]@5 ~@6, [a3,c4,e4]@59 ~@5]/4", G: "[[c4,f4]@53 [c4,f4]@5 ~@6]/4",
  H: "[[d4,g4]@59 ~@5]/4", I: "[[c4,e4]@53 [c4,e4]@11]/4", J: "[~@53 b3@11, [a3,c4]@59 ~@5]/4",
  K: "[f4@53 [a3,f4]@11, c4@59 ~@5]/4", L: "[~@53 g#4@11, [d4,g4]@59 ~@5]/4", M: "[e4,a4]/2", N: "[e4,g#4]/2",
  O: "[e4,g4]/2", P: "[e4,f#4]/2", Q: "[d4,a4]/2", R: "[b3,g4]/2", S: "[d4,g4]/2", T: "[f4,a4]/2", U: "[f#4,a4]/2",
})).s("gm_epiano1").gain(0.31)

// other · synth strings 1 · "STRING"
const synth_strings_1 = note("<A@8 B@2 C D E@2 ~@228>".pickRestart({
  A: "[~@53 b4@11, c5@59 ~@5]/4", B: "a4/2", C: "f5", D: "e5", E: "d5/2",
})).s("gm_synth_strings_1").gain(0.27)

// bass · synth bass 2 · "bASS"
const bass = note(`<
  ~@8 A@3 B C@4 D E F G H I J K L M L M N K N K D E D G J I J K L M L M N K N O J P O Q N R S T U G J G V@2 W K D E D X
  J G J Y L Z U J AA AB N AC D E D R J G J AD L Z U J V@2 W AE D E F G H I J K L M L M N K N K D E D G J I J K L M L M N
  K N O J P O Q N R S T U G J G V@2 AF@2 N K D E D X J G J Y L Z U J AA AB N AC D E D R J G J AD L Z U J V@2 AF@2 U AG U
  Q J G J T U G U G AH@2 AI@2 AA AB AA AJ AK AL AK AM N AC S AK U G J I AN AB AA AJ AK AL AK AM N AC S AK U G J I AN AB
  AA AJ AK AL AK AM N AC S AK U G AO AP
>`.pickRestart({
  A: "[f2@43 ~@5]/3", B: "~@5 a2@5 ~@6", C: "[g2@53 ~@6 g2@5]/4", D: "c1", E: "~@11 c1@5", F: "c1@11 ~@5",
  G: "~@11 e1@5", H: "a1@11 ~@5", I: "~@11 a1@5", J: "a1", K: "~@11 g1@5", L: "f1", M: "~@11 f1@5", N: "g1", O: "g#1",
  P: "~@5 e1@5 ~ a1@5", Q: "~@5 e1@5 ~ g#1@5", R: "~@5 e1@5 ~ g1@5", S: "f#1", T: "~@5 c1@5 ~ d1@5", U: "e1",
  V: "[d1@11 e1@10 f1@11]/2", W: "g1@11 ~@5", X: "~@5 b1@5 ~ g1@5", Y: "~@5 g1@5 ~ e1@5", Z: "~@5 c1@5 ~ f1@5",
  AA: "d1", AB: "~@11 d1@5", AC: "~@5 d1@5 ~ g1@5", AD: "~@5 a1@5 ~ g1@5", AE: "~@11 g2@5", AF: "g1@5 g1@5 ~ g1@5",
  AG: "~@11 b1@5", AH: "[f1@11 f1@10 d1@5 ~ d1@5]/2", AI: "a1@5 a1@5 ~ a1@5", AJ: "~@5 c#2@5 ~ a1@5", AK: "b1",
  AL: "~@11 f#1@5", AM: "~@5 a1@5 ~ f#1@5", AN: "~@5 e1@5 ~@6, d1", AO: "b1@5 b1@5 ~ b1@5, a1", AP: "~@5 e1@5 ~@6",
})).s("gm_synth_bass_2").gain(0.64)

// chords · trumpet · "TROMPET"
const trumpet = note(`<
  ~@49 A ~ B ~ C ~ D ~@4 E@2 F ~@31 G H ~@33 A ~ B ~ C ~ D ~@6 G@2 I ~@34 J ~ K ~@5 J ~ K ~@2 L M ~@48
>`.pickRestart({
  A: "[c5,e5,a5]@5 ~@11", B: "[c5,e5,g#5]@5 ~@11", C: "[c5,e5,g5]@5 ~@11", D: "[c5,e5,f#5]@5 ~@11",
  E: "[[a4,d5]@11 [a4,e5]@10 [a4,f5]@11]/2", F: "[d5,g5] ~@3", G: "[b4,d5,g5]@5 [b4,d5,g5]@5 ~ [b4,d5,g5]@5",
  H: "[b4,d5,g5] ~@3", I: "g5@5 ~@11", J: "[b4,d5,g5]@5 ~@11", K: "[b4,d5,g#5]@5 ~@11",
  L: "[d5,f#5,a5]@5 [d5,f#5,a5]@5 ~ [d5,f#5,a5]@5", M: "[d5,f#5,a#5]@5 [d5,f#5,a#5]@5 ~ [d5,f#5,a#5]@5",
})).s("gm_trumpet").gain(0.32)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A
  B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~
  A B A ~ A B A ~ A B A ~ A B A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A
  B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~@3 A B A ~ A B A ~ A B A ~ A ~
>`.pickRestart({
  A: "x", B: "~@11 x ~@4",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@17 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@46 B ~ A@31 B A@130 C A@14 ~>".pickRestart({
  A: "x ~@4 x ~@5 x ~@4", B: "x", C: "~@5 x ~@5 x ~@4",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@60 [x ~@10 x ~@4] [~@5 x ~@10] x ~@31 [x ~@4 x ~@5 x ~@4] ~@147>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@176 [x ~@4 x ~@5 x ~@4] ~@65>").gain(0.4)

// drums · splash
const splash = s("cr").struct("<~@62 x ~@32 x ~@80 [x ~@4 x ~@5 x ~@4] x ~@64>").gain(0.4)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "x",
})).gain(4.66)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "x",
})).gain(2.53)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@17 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.4)

stack(
  acoustic_guitar_nylon, tinkle_bell, epiano1, synth_strings_1, bass, trumpet, kick, snare, hihat, mid_tom, high_tom,
  splash, vibraslap, agogo_bells, shaker
)

More by Backstreet Boys