Strudelify
More Than That cover art

Black & Blue

More Than That

Backstreet Boys

KeyG majorTempo80 bpm
0:00/0:00
// More Than That — Backstreet Boys
// 80 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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"
const acoustic_guitar_steel = note(`<
  ~ A B@2 C D E@2 F G H G I G H J K J F L M N M N M O P Q G H G I G H J K J F L M N M N M O P R S R T U L M N V L M N M
  N M O P L M N M N M O P W
>`.pickRestart({
  A: "~@4 [e3,c4] [f#3,d4]@2 [g3,e4]@2 [f#3,d4]@2 c4@2 b3@3, ~@11 e3@5", // C D C D
  B: "[[d3,g3]@2 ~ g3@4 [d3,f#3,a3]@2 d3@2 f#3@2 d3@6 ~ [e3,c4] [f#3,d4]@2 [g3,e4]@2 [f#3,d4]@2 [e3,c4]@2 [e3,d4]@3, b3@7 ~@4 d4@6 ~@15, ~@2 d3@5 ~@25]/2", // G5 D C D C D C E7
  C: "g3 ~@2 f#4@2 ~@2 g4@2 ~ g4 ~@4 a3, [d3,f#3,d4]@6 ~@3 [d3,f#4]@2 d4@5, ~ a3@4 a3@4 ~ e4@4 a2@2, ~@11 f#3@2 d3@2 ~, ~@12 a3@3 ~", // D
  D: "a2@4 [e3,c4] [f#3,d4]@2 [g3,e4]@2 [f#3,d4]@2 c4@2 b3@3, ~@11 e3@5", // C D C D
  E: "[[d3,g3]@2 ~ g3@4 [d3,f#3,a3]@2 d3@2 f#3@2 ~@3 [e3,g3]@8 ~@2 d3 d4@4 ~, b3@7 ~@4 d4@6 ~@15, ~@2 d3@5 ~@6 d3@6 ~@13]/2", // G5 D Em
  F: "~ [g3,d4]@15, [c3,e3]", // G5 C
  G: "[a2,e3,a3,c4,e4]@3 [a2,e3,a3,c4,e4]@4 [a2,e3,g3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@3 [a2,e3,a3,c4,e4]@2", // Am Am7 Am
  H: "[g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]@4 [d3,a3,d4,e4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@3 [d3,a3,d4,e4]@2", // G Dsus2 D Dsus2
  I: "[d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@3 g4 g4@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,e4]@2 ~@2 e4, ~@13 e4@2 ~, ~@7 [d3,a3,d4]", // D Dsus2 D5
  J: "[e3,g3,b3,e4] [d3,f#3,a3,d4]", K: "[c3,e3,g3,c4]",
  L: "[e3,e4,g4]@4 [e3,e4,g4]@3 [c3,c4,e4,g4]@2 c4 [c3,e4]@2 [c3,c4,e4,g4]@2 [c3,c4,g4] [b2,b3,f#4], [e2,b2]@8 ~ g4@3 ~@4", // Em C C5 B5 E5
  M: "e4@4 [e4,g4]@3 [f#2,d3,d4,f#4]@2 [d3,d4] [d3,d4]@2 [f#2,d3,d4,f#4]@2 [f#2,d3,d4,e4] [d3,d4,f#4], [a2,e3,a3,c4]@7 ~@2 [f#2,f#4]@3 ~@4, ~@4 g3@7 ~@5", // Em D Am F#
  N: "[e2,b2,e3,b3,e4]@4 [b2,e3,e4,g4]@3 [c3,c4,e4,g4]@2 ~ [c3,e4]@2 [c3,c4,e4,g4]@2 [c3,c4,g4] [b2,b3], ~@9 [c4,g4]@3 ~@4", // E5 Em C C5 B C5
  O: "[c3,e3,g3,c4,e4]@3 [c3,e3,g3,c4]@2 [c3,e3,g3,b3]@2 [g2,c3,e3,g3,c4]@5 [g2,c3,e3,g3,c4]@2 [g2,c3,e3,g3,c4] [c3,e3,g3,b3], g2@7 ~@9, ~@3 e4@9 e4@4", // C Cmaj7 C Cmaj7
  P: "[a2,e3,a3,c4,e4] [d3,f#3,a3,d4,f#4]", Q: "[e2,b2,g3,e4] ~, e3", R: "[d3,a3,d4,f4]!4", S: "[a2,c3,a3,c4,e4]!4",
  T: "[f2,c3,f3,a3,c4,f4]!4", U: "[d3,a3,d4,g4] [d3,a3,d4,f#4]",
  V: "[a3,e4,g4]@4 [e4,g4]@2 [a2,e4,g4] [a2,e4] [d3,d4,f#4]@4 [b2,d4,f#4]@2 [d3,d4,f#4] d4, a2@3 ~@5", // A7 Em A7 A5 D Bm D
  W: "[e2,b2,e3,g3], e4 ~", // Em
})).s("gm_acoustic_guitar_steel").gain(0.36)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A ~ A ~ A ~@3 B C B D B E F G F H I J I K I J L M ~ N C B D B E F G F H I J I K I J L O P Q P R S ~@4 I J I K I J L
  O I J I K I J L O T
>`.pickRestart({
  A: "a1 ~@3", B: "a1@2 ~ a1 ~ a1 g1 a1 g1 a1!2 ~@5", C: "g1@2 ~ g1 ~ d1@2 d1@2 d1@2 ~ d2 a1 b1 g1",
  D: "d1@2 ~ d1 ~ d1@2 d2@2 b1@2 c2@2 a1 g1 a1", E: "g1@2 ~ g1 ~ d1@2 d1@2 d1@2 ~@3 d1 e1", F: "e1@3 e1 f#1@4",
  G: "c2@3 c2@2 g1@2 c2@2 c2@7", H: "c2", I: "e2@3 c2 c2@4", J: "a1@3 a1 d2@4", K: "a1@6 a1@2 d2@4 e2 b1 c2 a1",
  L: "c2@3 c2@2 b1@2 c2@2 c2@6 ~", M: "a1 ~", N: "~@3 a1 ~ a1 g1 a1 g1 a1!2 ~@5", O: "a1 d2", P: "d2@3 d2 d2@4",
  Q: "a1@5 a1 g1 a1 a1@4 a1 g1 a1 g1", R: "f2@3 f2 f2@4", S: "d2", T: "e1@7 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · synth strings 1 · "Strings (Chords)"
const synth_strings_1 = note("<A@2 ~@70>".pickRestart({
  A: "[[a3,e4]@3 ~]/2", // A5
})).s("gm_synth_strings_1").gain(0.06)

// chords · string ensemble 1 · "Strings (Chords)"
const string_ensemble_1 = note(`<
  ~@6 A B C@2 D E F E G B H B I J K J K J K L ~@2 E G E F E G B H B I M K M K M K L N O P Q R S T ~@3 J K J K J K L U J
  K J K J K L ~ V
>`.pickRestart({
  A: "g3@7 f#3@9", B: "[e3,g3,e4] [f#3,a3,f#4]", C: "[d3,g3,d4]/2", D: "[g3,b3,d4,g4] [d3,f#3,a3,d4]",
  E: "[e3,a3,c4,e4]", F: "[d3,f#3,a3,d4]", G: "[d3,g3,d4,g4] [f#3,d4,f#4,a4]", H: "[e3,g3,d4,e4]",
  I: "[e3,g3,d4,e4,g4]@3 ~", J: "[e3,g3,b3,e4]@3 [c3,e3,g3,c4]@5", K: "[a2,e3,a3,c4,e4,g4] [d3,f#3,a3,d4]",
  L: "[c3,e3,g3,c4,e4,g4]", M: "[e3,g3,b3,e4] [c3,e3,g3,c4]", N: "[a2,c3,e3,a3,c4,e4,a4] [d3,f#3,a3,d4,f#4,a4]",
  O: "[d3,f3,a3,d4,f4,a4]", P: "[a2,c3,e3,a3,c4,e4,a4]", Q: "[d3,f3,a3,d4,f4,a4,d5]", R: "[f3,a3,c4,f4,a4,c5,f5]",
  S: "g4 f#4, [d4,a4,d5]", T: "[e4,g4,b4,e5] ~@3", U: "[a3,c4,e4,a4] [d3,f#3,a3,d4]", V: "[e2,g3,e4]",
})).s("gm_string_ensemble_1").gain(0.12)

// other · string ensemble 2 · "Strings (Notes)" · G5
const string_ensemble_2 = note("<~@8 e3 ~@6 [g3 a3] [[g3,d4]@3 ~] ~@14 [f#3 g3 a3 d4] ~@40>")
  .s("gm_string_ensemble_2").gain(0.24)

// other · string ensemble 1 · "Strings (Notes)"
const string_ensemble_1_2 = note(`<
  ~@16 A B@2 C@2 D@2 E@3 F G H ~@3 I@2 J K@3 C@2 L@2 M@3 N ~@2 O P Q ~@3 R C@2 L@2 S@4 T@2 L@2 E@3 F ~
>`.pickRestart({
  A: "~@6 e4 f#4", B: "[e4@4 d4@10 e5 f#5]/2",
  C: "[g6@2 b5 c6@3 g6 g6@3 f#6 [f#5,f#6]@3 [e5,e6] [f#5,f#6], g5@11 ~@5]/2", // F# E F#
  D: "[g6@4 b5@2 c6@6 [b4,g6]@2 [b4,g6]@6 [d5,a6]@2 [d5,a6]@8 b5 c6, g5@5 ~@3]/2", // Em D5
  E: "[d6@8 g5@14 f#5@4 e5@2 d5@6 ~@10 g5 [e5,f#5] [b4,d5] ~]/3", F: "~@3 e4", G: "~@3 e3", H: "[a3,a4] ~@15",
  I: "[~@4 c6@6 b5@4 g5@10 ~@3 f#5@2 d5@3]/2", J: "b4 a4",
  K: "[g4@12 b4 [c5,d5] [e5,f#5] g5@25 g5 [e5,f#5] [c5,d5] b4 e5@2 f#5@2]/3", // Csus2 Esus2 Csus2
  L: "[g6@4 b5@2 c6@6 [b4,g6]@2 [b4,g6]@6 [d5,a6]@2 [d5,a6]@8 b5 c6, g5 ~]/2", M: "[d6@4 g5@7 f#5@2 e5 d5@3 ~@7]/3",
  N: "[c4,a4]@3 [d4,b4]@3 [e4,c5]@2 [g4,d5]@8", O: "~ a4 d5@2 e5@2 f5@2",
  P: "a4@2 c5@2 f5@2 a5@2 b5 d5 g5 b5 c6 f5 a5 c6", Q: "d6@3 ~", R: "~@6 e5 f#5",
  S: "[d6@8 g5@14 f#5@4 e5@2 ~@20 c5@4 b4@2 c5@2 d5 [e5,f#5] [e5,g5] [f#5,g5] [g5,a5] [a5,b5] [a5,c6] [b5,c6], ~@14 d5@3 ~@15, ~@8 d6@5 ~@3]/4", // Esus2 Em Gmaj7 Gsus2 Asus2 Am Cmaj7
  T: "[[d6,g6]@2 b5 c6@3 g6 g6@3 f#6 [f#5,f#6]@3 [e5,e6] [f#5,f#6], g5@11 ~@5]/2", // G5 F# E F#
})).s("gm_string_ensemble_1").gain(0.18)

// other · cello · "Strings (Cello)" · C A
const cello = note("<~@8 [[c2,c3]] [[a1,a2]] ~@62>").s("gm_cello").gain(0.12)

// other · woodblock · "Drum 2 (Woodblock)"
const woodblock = note("<~ A@7 ~ A@9 ~ A@7 ~@2 A@9 ~ A@12 ~@4 B A@15 ~@2>".pickRestart({
  A: "~@2 f#6 ~@2 f#6 ~@2 f#6 ~@2 f#6 ~@2 f#6 ~", B: "~@14 f#6 ~",
})).s("gm_woodblock").gain(0.19)

// drums · kick
const kick = s("bd").struct("<~ A ~ A ~@5 B@9 A B@7 ~@2 B@9 A B@12 ~@5 B@15 ~@2>".pickRestart({
  A: "x", B: "x ~@2 x!2 ~@3",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@8 A ~@9 A ~@3 A ~@14 A ~@3 A ~@12 A ~@3 A ~@3 A ~@3 A ~@5>".pickRestart({
  A: "~@12 x ~ x!2",
})).gain(0.48)

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@7 ~ A@9 ~ A@7 ~@2 A@9 ~ A@12 ~@5 A@15 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.16)

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

// drums · tambourine
const tambourine = s("tb").struct("<~ A@7 ~ A@9 ~ A@7 ~@2 A@9 ~ A@12 ~@5 A@15 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.32)

// drums · bongos
const bongos = s("bongo:4").struct("<~ A@7 ~ A@9 ~ A@7 ~@2 A@9 ~ A@12 ~@5 A@15 ~@2>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
})).gain(1.05)

// drums · ht
const ht = s("ht").struct("<~@9 A@9 ~ A@7 ~@2 A@9 ~ A@12 ~@5 A@15 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.8)

stack(
  acoustic_guitar_steel, bass, synth_strings_1, string_ensemble_1, string_ensemble_2, string_ensemble_1_2, cello,
  woodblock, kick, rim, snare, hihat, hihat_soft, crash, tambourine, bongos, ht
)

More by Backstreet Boys