Strudelify
Let's Make a Night to Remember cover art

1996 · 18 Til I Die

Let's Make a Night to Remember

Bryan Adams

KeyC majorTempo88 bpm
0:00/0:00
// Let's Make a Night to Remember — Bryan Adams
// 88 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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 · fretless bass · "Bass"
const bass = note(`<
  ~ A@2 B C A@3 C D E F G H I B J K L F M N F O P ~@2 A E A E A Q A R F E F E A S@2 T A B C A@3 C D E F J K L F M N F O
  P ~@2 A E A E A Q A R F E F E A S@2 E F H A F A F H E U E F O P ~@2 V W X W X W Y W Z AA AB AA X AC@3 AD AE@2 AF AG
>`.pickRestart({
  A: "c2!8", B: "c2!6 a1 g1", C: "g1!7 a1", D: "e1!8", E: "f1!8", F: "g1!8", G: "g1!5 a1!2 g1", H: "a1!8",
  I: "f1!5 a1!2 c2", J: "g1!5 a1!2 c2", K: "a1!6 g1!2", L: "f1!7 g1", M: "c1!8", N: "e1!6 g1!2", O: "f1@15 ~", P: "g1",
  Q: "f1!6 g1!2", R: "f1!6 a1!2", S: "[f1@5 ~@3]/2", T: "c2@2 c2 c2@3 c2@2 c2@2 c2@2 c2@2 c2@2", U: "d1!8",
  V: "~@4 d2!4", W: "d2!4 g1!4", X: "g1!4 d2!4", Y: "g1 a1!3 d2!4", Z: "g1!2 b1!2 a1!4", AA: "a1!4 g1!4",
  AB: "g1!4 a1!4", AC: "[d2!4 ~@19 d2, ~ g1@5]/3", AD: "c3 d3!3 d2!4", AE: "d2!8", AF: "d2!4 a1!4", AG: "a1!4 d1@4",
})).s("gm_fretless_bass").gain(0.48)

// other · pad warm · "Pad 2(warm)"
const pad_warm = note(`<
  ~@16 A@3 B@4 C ~@3 D C D C D C D C E C E C D F G@4 H ~@4 I@2 ~ A@3 B@4 C ~@3 D C D C D C D C E C E C D F ~ F J K L J L
  J L F M F J@2 ~@3 N@8 O@7 ~ P@5
>`.pickRestart({
  A: "[~ a4@5]/3", B: "[g4@5 g4@3]/4", C: "f4", D: "c5", E: "g4", F: "f5", G: "[~@3 c4@13]/4", H: "g3",
  I: "[a4@3 f4@3 ~@2]/2", J: "g5", K: "a5", L: "c6", M: "d5", N: "[~ d4@2 g3@2 d4@2 g3@2 d4@2 g3@2 d4@2 g3]/8",
  O: "[~ a3@2 g3@2 a3@2 g3@2 d4@2 g3@2 ~]/7", P: "[~ d4@6 a3@2 ~]/5",
})).s("gm_pad_warm").gain(0.32)

// other · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C D ~@8 E@3 F E@4 G F ~@13 H ~ H ~@3 I J K L M@3 N E@2 F ~@20 H ~ H ~@28 O P O P ~@3 Q R S T ~
>`.pickRestart({
  A: "c4@2 ~ c4 ~@2 c4@2 ~@2 c5@2 ~@2 g4@2, ~ g4 c5@2 ~@4", B: "c4@2 ~ c4 ~@2 c4@2 ~@2 g4@2 ~@2 c4@2, ~ g4 c5@2 ~@4",
  C: "c4@2 ~ c4 ~@2 c4@2 ~@2 g4@2 ~@4, ~ g4 c5@2 ~@4", D: "d4@2 ~ g3 ~@2 g3@2 ~@8, ~ g4 b4@2 ~@4",
  E: "~@3 c4 ~@2 c4 ~@9", F: "~@3 g3 ~@2 g3 ~@9", G: "~@3 b3 ~@2 b3 ~@9", H: "~@3 c4 ~@2 c4@2 ~ a3 ~@6",
  I: "c4 g4 c5@2 ~ c5 ~ g4", J: "c4 g4 c5@2 ~ g4 ~ c4", K: "c4 g4 c5@2 ~ g4 ~@2", L: "d4 g4 b4@2 ~@4",
  M: "~@3 c4 ~@3 c4 ~@8", N: "~@3 g3 ~@3 g3 ~@8", O: "~@11 d4 ~@2 d4@2", P: "~ b3 ~@14", Q: "~@5 a4 d5@2",
  R: "~ d5 ~ a4 d4 a4 d5@2", S: "~ a4 ~ d4!2 a4 d5@2", T: "~ a4 ~@2 e4 a4 c#5@2",
})).s("gm_acoustic_guitar_steel").gain(0.48)

// chords · electric guitar jazz · "Elec Guitar"
const electric_guitar_jazz = note("<~@16 A@3 B C@5 ~ D@8 E@7 ~@12 A@3 B F@5 ~ D@8 E@7 ~@17 G@7 H@8 ~@6>".pickRestart({
  A: "[~@17 [e4,a4]@11 ~@5 [c4,f4]@11 ~@4, ~@15 a2@13 ~@3 f2@13 ~@4, ~@4 [e3,a3,c4]@3 ~ [c3,f3,a3]@3 ~]/3", // A5 F5 Am F
  B: "~ [b3,d4,g4]@11 ~@4, [g2,d3,g3]@3 ~", // G G5
  C: "[~ [e4,g4]@12 ~@4 [b3,e4]@11 ~@5 [d4,g4]@11 ~@5 [c4,f4]@11 ~@5 [d4,g4]@11 ~@4, [c3,g3,c4]@12 ~@3 e2@13 ~@3 g2@13 ~@3 f2@13 ~@3 g2@13 ~@4, ~@4 [b2,e3,g3]@3 ~ [d3,g3,b3]@3 ~ [c3,f3,a3]@3 ~ [d3,g3,b3]@3 ~]/5", // Em E5 G5 F5 G5 C5 Em G …
  D: "[~@17 g4@11 ~@5 [c4,f4]@11 ~@5 g4@11 ~@5 [c4,f4]@11 ~@5 g4@11 ~@5 [c4,f4]@11 ~@5 g4@11 ~@3 f2, ~@15 c3@13 ~@3 f2@13 ~@4 [g3,c4,e4]@12 ~@4 [c3,f3,a3]@12 ~@3 c3@13 ~@3 f2@13 ~@4 [g3,c4,e4]@12 ~@4, ~@16 [g3,c4,e4]@12 ~@4 [c3,f3,a3]@12 ~@3 c3@13 ~@3 f2@13 ~@4 [g3,c4,e4]@12 ~@4 [c3,f3,a3]@12 ~@3 c3@13 ~@4]/8", // F5 C F C F C F
  E: "[~ [c4,f4]@11 ~@5 [d4,g4]@11 ~@5 [c4,f4]@11 ~@5 [d4,g4]@11 ~@5 [c4,f4]@11 ~@5 g4@11 ~@5 [c4,f4]@11 ~@4, [c3,f3,a3]@12 ~@3 g2@13 ~@3 f2@13 ~@3 g2@13 ~@3 f2@13 ~@4 [g3,c4,e4]@12 ~@4 [c3,f3,a3]@12 ~@4, ~@16 [d3,g3,b3]@12 ~@4 [c3,f3,a3]@12 ~@4 [d3,g3,b3]@12 ~@4 [c3,f3,a3]@12 ~@3 c3@13 ~@3 f2@13 ~@4]/7", // F5 G5 F5 G5 F5 F C F …
  F: "[~ [e4,g4,c5]@11 ~@5 [b3,e4]@11 ~@5 [d4,g4]@11 ~@5 [c4,f4]@11 ~@5 [d4,g4]@11 ~@4, [c3,g3,c4]@12 ~@3 e2@13 ~@3 g2@13 ~@3 f2@13 ~@3 g2@13 ~@4, ~@4 [b2,e3,g3]@3 ~ [d3,g3,b3]@3 ~ [c3,f3,a3]@3 ~ [d3,g3,b3]@3 ~]/5", // C E5 G5 F5 G5 C5 Em G …
  G: "[~@9 a4@11 ~@5 [d4,g4]@11 ~@5 a4@11 ~@5 [d4,g4]@11 ~@5 a4@11 ~@5 [d4,g4]@11 ~@5 a4@7, ~@7 d3@13 ~@3 g2@13 ~@4 [a3,d4,f#4]@12 ~@4 [d3,g3,b3]@12 ~@3 d3@13 ~@3 g2@13 ~@4 [a3,d4,f#4]@8, ~@8 [a3,d4,f#4]@12 ~@4 [d3,g3,b3]@12 ~@3 d3@13 ~@3 g2@13 ~@4 [a3,d4,f#4]@12 ~@4 [d3,g3,b3]@12 ~@3 d3@9]/7", // G5 D G D G D G
  H: "[~@9 [d4,g4]@11 ~@5 [e4,a4]@11 ~@5 [d4,g4]@11 ~@5 [e4,a4]@11 ~@5 [d4,g4]@11 ~@5 a4@11 ~@5 [d4,g4]@11 ~@12, ~@7 g2@13 ~@3 a2@13 ~@3 g2@13 ~@3 a2@13 ~@3 g2@13 ~@4 [a3,d4,f#4]@12 ~@4 [d3,g3,b3]@12 ~@12, ~@8 [d3,g3,b3]@12 ~@4 [e3,a3,c#4]@12 ~@4 [d3,g3,b3]@12 ~@4 [e3,a3,c#4]@12 ~@4 [d3,g3,b3]@12 ~@3 d3@13 ~@3 g2@13 ~@12]/8", // G5 A5 G5 A5 G5 D G A …
})).s("gm_electric_guitar_jazz").gain(0.25)

// chords · distortion guitar · "Dist. Guitar"
const distortion_guitar = note(`<
  ~@27 A ~ A ~ A ~ A ~ B ~ B ~ A ~@24 A ~ A ~ A ~ A ~ B ~ B ~ A ~@6 C D C E F G F C ~@4 H@8 I@4 H@2 ~@7
>`.pickRestart({
  A: "[c3,g3]", B: "[d3,g3]", C: "[g3,d4]", D: "[g3,c4]", E: "[e3,a3]", F: "[f3,c4]", G: "[d3,a3]",
  H: "[~ [d3,a3]@2 ~]/2", I: "[~ [e3,a3]@2 ~]/2",
})).s("gm_distortion_guitar").gain(0.3)

// other · harmonica
const harmonica = note("<~@12 A@4 ~@12 B ~@5 C ~@36 C ~@24 D@2 ~@4 E@2 ~@12>".pickRestart({
  A: "[~@10 [g3,c4]@11 ~@11]/2", B: "f4", C: "f3", D: "[~ g4@2 ~]/2", E: "[~ g3@2 ~]/2",
})).s("gm_harmonica").gain(0.45)

// other · harmonica · soft notes
const harmonica_soft = note("<~@9 A@4 ~@10 B@2 ~@22 A@4 ~@65>".pickRestart({
  A: "[g4@7 ~]/4", B: "[c5@3 ~]/2",
})).s("gm_harmonica").gain(0.26)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@16 A B ~ A C D@2 ~@11 E@4 F@2 ~@2 G@2 H I ~@7 J K ~ J L M N ~@11 E@4 F@2 ~@5 O P Q P R S T S P ~@12 U@4 V@2 ~@7
>`.pickRestart({
  A: "[d6,g6]", B: "[e6,a6]", C: "[c6,g6]", D: "[~ [g5,d6]@3]/2", E: "[~ [d5,g5]@3]/2", F: "[~@5 [c5,g5]@9 ~@2]/2",
  G: "[g5@3 ~]/2", H: "[d5,g5]", I: "[c5,g5]", J: "~ [g5,d6]@3", K: "[a5,e6]", L: "[g5,c6]", M: "~ [e5,b5]@3",
  N: "[g5,d6]", O: "~ [g5,c6]@3", P: "g5", Q: "c6", R: "a5", S: "[f5,f6]", T: "d6", U: "[[e5,a5]@3 ~]/2",
  V: "[~ [d5,a5]@9 ~@6]/2", // D5
})).s("gm_string_ensemble_1").gain(0.19)

// other · piano
const piano = note("<~@111 [~@11 a5 d5@2 a5@2]!3 [~@11 a5 c#5@2 a5@2] ~>").s("gm_piano").gain(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B D B E B D B E B D B E B D B E@2 D B E B F B D B E B D B@3 D B E B D G E B@2 H B@7 E B@2 D B E B@4 F B@3 E
  B@5 D B E B D A B D B@3 D B E B@5 E B F I B J B K B@3 I B J B K B@3 L J B K F
>`.pickRestart({
  A: "~@11 x!3 ~@2", B: "~ x ~ x", C: "~@4 x ~@4 x ~@2 x ~@2 x", D: "~@4 x ~@7 x ~@2 x", E: "~@4 x ~@4 x ~@2 x ~@3",
  F: "~ x ~@2", G: "~@12 x ~ x!2", H: "~@4 x ~@4 x ~@2 x!2 ~@2", I: "~@3 x", J: "~@4 x ~@2 x ~@4 x ~@3",
  K: "~ x ~@2 x ~@7 x ~@3", L: "x ~@2 x!2 ~@7 x ~@3",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~@21 B ~@7 A ~@6 C ~@21 D ~@7 E ~@3 F ~@2 C ~@3 G ~@11 D ~@4 H ~@3 I ~@3 H ~@3 H ~@4
>`.pickRestart({
  A: "~@7 x", B: "~ x", C: "~ x ~@2", D: "~@3 x!2 ~@3", E: "~@11 x ~@2 x!2", F: "~@15 x", G: "~@13 x!2 ~",
  H: "~@3 x ~@4", I: "~ x ~@2 x!2 ~@10",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D C E D@2 C E D@2 C E D@2 C E D@2 C@2 D C D@2 F ~@13 B F B C D C B D C D@3 C@2 B G D C D C D@3 F ~@13 B F H ~@11
  D@3 F I D@3 J D@3 I D@3 J D@2 K L D J D M
>`.pickRestart({
  A: "x!3 ~", B: "~ x!7", C: "x!7 ~", D: "x!8", E: "x!4 ~ x!3", F: "x!2 ~@6", G: "x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x",
  H: "~@7 x", I: "~@4 x!4", J: "x!3 ~ x!4", K: "x!6 ~ x", L: "~ x ~@3 x!3", M: "x!3 ~@5",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B C B D C@2 B D C@2 B D C@2 B D C@2 B@2 C B C@2 E ~@13 A E A B C B A C B C@4 B A B C B C@5 E ~@13 A E ~@12 C@3 E F
  G C@2 G C@2 B F G C@2 G C@2 H I C G C J
>`.pickRestart({
  A: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  D: "~ x ~ x ~ x ~ x ~@3 x ~ x ~ x", E: "~ x ~ x ~@12", F: "~@9 x ~ x ~ x ~ x", G: "~ x ~ x ~ x ~@3 x ~ x ~ x ~ x",
  H: "~ x ~ x ~ x ~ x ~ x ~ x ~@4", I: "~@11 x ~ x ~ x", J: "~ x ~ x ~ x ~@10",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@15 B ~@9 C ~@7 D ~@10 A ~@7 A ~@17 E ~@3 A ~@2 A ~@3 F ~@3 B ~@15 A G ~@12
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@3 x ~@4", D: "~@6 x ~@4 x ~@4", E: "~@9 x ~@6", F: "~@6 x ~@2 x ~@2 x ~@3",
  G: "~ x ~@14",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~@2 B ~@2 A B ~@2 A B ~@3 B ~@2 A@2 ~ A ~@19 A ~@4 A ~@3 A ~@2 A ~ A ~ A ~@19 C ~@16 D ~@7 D ~@8 E ~ E
>`.pickRestart({
  A: "~@7 x", B: "~ x", C: "~@15 x", D: "~@7 x ~@8", E: "~@3 x ~@4",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@16 A ~@9 B ~@36 B ~@7 C ~@22 B ~@21>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@12", C: "~ x",
})).gain(0.72)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@17 A ~@9 B C@3 B C@3 B C@3 B ~@14 A ~@9 B C@3 B C B A B C B C B ~@2 B C B C B@5 C B@2 ~@24 D
>`.pickRestart({
  A: "x!7 ~", B: "~ x!7", C: "x!8", D: "~ x",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ A@4 ~@12 A@9 B A@14 C ~@11 D A@9 B A@14 C A@15 B E A@12 F ~@7>".pickRestart({
  A: "x!16", B: "x!9 ~@7", C: "x!5 ~@11", D: "~@12 x!4", E: "~@8 x!8", F: "x!8 ~@8",
})).gain(0.81)

stack(
  bass, pad_warm, acoustic_guitar_steel, electric_guitar_jazz, distortion_guitar, harmonica, harmonica_soft,
  string_ensemble_1, piano, kick, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash, ride, cabasa
)

More by Bryan Adams