Strudelify

Before the Night Is Over

Bryan Adams

KeyA majorTempo133 bpm
0:00/0:00
// Before the Night Is Over — Bryan Adams
// 133 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 122 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 program 29.
setcpm(133/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 · synth strings 1
const synth_strings_1 = note(`<
  ~ A B C D E F G H I J K ~ I J K ~ L M N O@2 P Q R S P Q R S A B C D T U V@2 T U W@2 L M N O@2 P Q R S P Q R S X Y Z AA
  X AB AC S A B C AD AE AF AG AH AI AF AJ AH AK AL AM AN AO AL AM AP ~@4 P Q R S X Y Z AQ X Y Z AR X Y Z AR X Y Z AR X Y
  Z AQ X Y Z AR X Y Z AR ~@3
>`.pickRestart({
  A: "[d4,d5]", B: "[e4,e5]", C: "[f#4,f#5]", D: "[g4,g5] [a4,a5]", E: "[d4,d5,a5]", F: "[e4,e5,b5]",
  G: "[f#4,f#5,c#6]", H: "[g4,g5,d6] [a4,e6], ~@8 a5@3 ~@5", I: "b3", J: "f#3", K: "g#3", L: "[b3,d#4,f#4]",
  M: "[a#3,c#4,f#4]", N: "[b3,e4,g#4]", O: "[a#3,c#4,f#4]/2", P: "[d5,f#5,a5]", Q: "[c#5,e5,a5]", R: "[d5,f#5]",
  S: "[b4,d5,g5] [c#5,e5,a5]", T: "[b3,d#5]", U: "[f#3,c#5]", V: "[b4, g#3 ~]/2", W: "[b4@15 ~, g#3 ~]/2",
  X: "[d5,f#5,a5,d6]", Y: "d6 e6, [e5,a5]", Z: "[d5,f#5,f#6]", AA: "[d5,g5,b5] [e5,a5,c#6]", AB: "[c#5,e5,a5,c#6]",
  AC: "[d5,f#5,d6]", AD: "[g4,g5] [a4,e5,a5]", AE: "[b4,d#5,f#5]", AF: "[f#3,a#4,c#5,f#5]", AG: "[b4,d#5,g#5]",
  AH: "[b4,e5,g#5]", AI: "[b3,b4,d#5,f#5]", AJ: "[g#3,b4,d#5,g#5]", AK: "[b3,b4,d#5,f#5,b5]",
  AL: "[f#3,a#4,c#5,f#5,c#6]", AM: "[g#3,b4,d#5,g#5,d#6]", AN: "[b4,e5,g#5,e6]", AO: "[b3,b4,d#5,f#5,d#6]",
  AP: "[b4,e5,g#5,b5]", AQ: "[d5,g5] [e5,a5,c#6]", AR: "[d5,g5,e6] [e5,a5,c#6]",
})).s("gm_synth_strings_1").gain(0.19)

// chords · synth strings 1 · soft notes
const synth_strings_1_soft = note(`<
  ~@12 A ~@3 A ~@7 B ~@3 B ~@8 A ~@3 C ~@7 B ~@3 B ~@3 B ~@3 B ~@5 D ~ E A ~@3 A ~@3 A ~@3 A ~@6 B ~@3 B ~@3 B ~@3 B ~@3
  B ~@3 B ~@3 B ~@3 B ~@4
>`.pickRestart({
  A: "e3 f#3", B: "b4", C: "e3@8 f#3@3 ~@5", D: "b3", E: "g#3",
})).s("gm_synth_strings_1").gain(0.11)

// chords · clavinet
const clavinet = note("<~ A@3 B A@3 B ~@8 C@5 A@3 D@7 E F@8 ~ C@5 G@16 H@3 F@8 ~@13 G@32 ~@3>".pickRestart({
  A: "[d4 ~@15 d4@2 ~@14 d4 ~@9 b4@6, ~ d4@3 ~@5 d4@3 ~@5 d4@3 ~@4, ~@4 f#4@6 b4@11 ~ b4@8 ~@8 a4@8 ~@2, ~@3 a4@4 ~@3 f#4@3 a4@4 ~ f#4@3 ~@3]/3",
  B: "d4 ~@5 a4@10, ~ d4@3 ~@4, ~@2 f#4@3 ~@3",
  C: "[~@58 d#5@13 ~@9, d#4 ~ f#4 ~ e4 ~ c#4 ~@3, ~@4 b4@6 d#5@8 ~@2 b4@6 d#5@9 ~ b4@6 d#5@8 ~@2 b4@6 ~@22, ~@6 e5@10 ~@6 e5@10 ~@6 e5@11 ~@5 e5@11 ~@15]/5",
  D: "[d4 ~@15 d4 ~@15 d4@2 ~@14 d4 ~@9 b4@6 d4 ~@15 d4 ~@15 d4@2 ~@8 a4@6, ~ d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@4, ~@2 f#4@3 ~@5 f#4@3 b4@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@3, ~@3 a4@8 a4@10 a4@6 a4@8 a4@8 a4@10 ~@3, ~@38 b4@8 ~@44 b4@11 ~ b4@8 ~@2]/7",
  E: "d4 ~@9 b4@6, ~ d4@3 ~@4, ~@2 f#4@3 ~@3, ~@3 a4@5", F: "[d4 ~@5 a4@122, ~ d4@3 ~@60, ~@2 f#4@3 ~@59]/8",
  G: "[d4 ~@15 d4@2 ~@14 d4 ~@9 b4@6 d4 ~@15 d4 ~@15 d4@2 ~@14 d4 ~@9 b4@6 d4 ~@5 a4@10, ~ d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@4, ~@2 f#4@3 b4@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@5 f#4@3 ~@3, ~@3 a4@10 a4@6 a4@8 a4@8 a4@10 a4@6 a4@8 ~@5, ~@22 b4@8 ~@44 b4@11 ~ b4@8 ~@34]/8",
  H: "[d4 ~@15 d4@2 ~@14 d4 ~@9 b4@6, ~ d4@3 ~@5 d4@3 ~@5 d4@3 ~@4, ~@2 f#4@3 b4@5 f#4@3 ~@5 f#4@3 ~@3, ~@3 a4@10 a4@6 a4@5, ~@11 b4@4 ~@9]/3",
})).s("gm_clavinet").gain(0.08)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~ A@8 B ~@2 C@2 ~@3 D@2 E F@8 G@2 H@5 ~@2 C@2 ~@3 D@2 E F@8 I@8 G@2 H@5 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2 J@5 K@8 L@24 ~@3
>`.pickRestart({
  A: "[[d3,a3]@2 [d3,a3]@3 ~@9 [e3,a3]@4 [e3,a3]@2 ~@10 [b2,f#3]@4 [b2,f#3]@2 ~@10 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 [e3,a3]@2 ~@2 [d3,a3]@4 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@2 ~@10 [b2,f#3]@4 [b2,f#3]@2 ~@10 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 [e3,a3]@2 ~@2 [f#3,b3]@2]/8", // D5 A5 B5 G5 A5 D5 A5 B5 …
  B: "~ [f#3,b3] ~@6", C: "[~@7 [f#3,b3]@2 [f#3,b3] ~@6]/2", D: "[b2 a#2, f#3]/2", E: "[g#2,e3]",
  F: "[~@30 [d3,a3]@4 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@4 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 a3@4 [d3,a3]@4 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@2, [a#2,f#3]@16 ~@29 e3@3 ~@16]/8", // D5 A5 B5 G5 A5 D5 A5 B5 …
  G: "[~@2 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 [e3,a3]@6]/2", // B5 G5 A5
  H: "[[d3,a3]@2 [d3,a3]@3 ~@9 [e3,a3]@4 [e3,a3]@2 ~@10 [b2,f#3]@4 [b2,f#3]@2 ~@10 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 [e3,a3]@2 ~@2 [f#3,b3]@4 [f#3,b3]@2 ~@12]/5", // D5 A5 B5 G5 A5 B5
  I: "[~@2 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 a3@4 [d3,a3]@4 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@4 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 a3@4 [d3,a3]@4 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@2, ~@13 e3@3 ~@29 e3@3 ~@16]/8", // B5 G5 A5 D5 A5 B5 G5 A5 …
  J: "[~@14 [d3,a3]@4 [d3,a3]@3 ~@9 [e3,a3]@4 [e3,a3]@2 ~@10 [b2,f#3]@4 [b2,f#3]@2 ~@10 [d3,g3]@4 ~@14]/5", // D5 A5 B5 G5
  K: "[[d3,a3]@12 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@4 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 a3@4 [d3,a3]@4 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@4 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 a3@4 [d3,a3]@2, ~@29 e3@3 ~@29 e3@3]/8", // D5 A5 B5 G5 A5 D5 A5 B5 …
  L: "[~@2 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@4 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 a3@4 [d3,a3]@4 [d3,a3]@10 ~@2 [e3,a3]@4 [e3,a3]@10 ~@2 [b2,f#3]@4 [b2,f#3]@10 ~@2 [d3,g3]@4 [d3,g3]@3 ~ [e3,a3]@4 a3@4 [d3,a3]@2, ~@29 e3@3 ~@29 e3@3]/8", // D5 A5 B5 G5 A5 D5 A5 B5 …
})).s("gm_overdriven_guitar").gain(0.11).pan(0)

// other · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@4 A B@2 C@2 ~@57 D E@6 F G H I J K L@2 M@2 ~@12 N O P Q B@2 C@2 ~@4 R S T U V@4 W ~@6
>`.pickRestart({
  A: "~@3 d4", B: "[g4@3 a4]/2", C: "[f#4@7 f4@9]/2", D: "~@2 f#4 ~ b4 ~ f#4 ~ c#5 ~ f#4 ~ b4 ~ f#4 ~",
  E: "[d5@2 d#5 d#5@3 c#5 c#5@3 b4 b4@2 g#4 b4 g#4]/2",
  F: "c#5 ~ [g#4,b4] ~ d#4@2 c#5 ~ [g#4,b4]@2 d#4@2 c#5@2 [g#4,b4]@2", G: "e4@7 ~", H: "b3@3 b3@5", I: "f#4@3 f#4@5",
  J: "b4@3 b4@5", K: "e5@3 e5@4 e5", L: "[e5@2 d#5 d#5@3 c#5 c#5@3 b4 b4@3 c#5 b4]/2",
  M: "[e5@2 d#5 d#5@3 c#5 c#5@3 b4 b4@3 ~@2]/2", N: "c4", O: "d4", P: "e4", Q: "g4@3 d4", R: "d5 ~@15",
  S: "e5@2 ~@2 e5 ~@3 e5 ~@7", T: "~@5 f#5 ~@2", U: "~@5 d5 e5 d5", V: "[f5@2 f#5 f#5@3 e5 e5@3 d5 d5@3 e5 d5]/2",
  W: "d5",
})).s("gm_overdriven_guitar").gain(0.32)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@103 A B C D E F G H ~@11>".pickRestart({
  A: "e4@2 d4 ~ d4 ~ e4@2 d4@2 d4 ~ e4@2 d4 ~", B: "e4@2 d4 ~ d4 ~ e4@2 d4 ~ d4 ~ e4 ~ d4 ~",
  C: "e4@2 d4 ~ d4@2 e4@2 d4 ~ d4 ~ e4@2 d4 ~", D: "e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4@2",
  E: "~@2 d5 ~ d5@2 d5@2 d5@2 d5@2 d5@2 d5 ~", F: "~@2 e5@2 ~@2 e5 ~@3 e5 ~ e5 ~ e5@2",
  G: "f#5@2 f#5@2 f#5@2 f#5@2 f#5@2 ~@2 f#5@2 f#5 ~", H: "g5!3 g5@5",
})).s("gm_overdriven_guitar").gain(0.21)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P Q R Q S T U F G V U F G V A B C W I J K L M N O P Q R Q S T U F G V U F G X U F G V
  U F G V A B C W I J K L M N O P I J K Y M N O P ~@3 Z U F G X U F G V U F G V U F G V U F G V U F G V U F G V U F G V
  A ~@2
>`.pickRestart({
  A: "d2", B: "e2", C: "f#2", D: "g2@8 ~@4 d4@2 [b3,c4] [f3,g3,a3], ~@8 a2@7 ~",
  E: "[d3,e3] ~@3 d2@2 d2@2 d2@2 d2@2 d2@2 d2@2, d2 ~@3", F: "e2@2 e2!6", G: "f#2!8", H: "g1@2 g1!2 a1!4",
  I: "b1@2 b1 ~ b1 ~ b1 ~ b1@2 b1 ~ b1 ~ b1@2", J: "f#1@2 f#1 ~ f#1@2 f#1 ~ f#1@3 ~ f#1 ~ f#1@2",
  K: "g#1@3 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1@2", L: "e1@3 ~ e1@2 e1@2 e1@2 e1@2 e1 ~ e1@2",
  M: "b1 ~ b1 ~ b1@3 ~ b1 ~ b1 ~ b1 ~ b1@2", N: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1@2",
  O: "g#1@4 g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1@2", P: "e1@3 ~ e1@4 e1 ~ e1 ~ e1 ~ e1@2",
  Q: "b1@3 ~ b1 ~ b1@3 ~ b1 ~ b1 ~ b1 ~", R: "a#1@3 ~ a#1 ~ a#1@3 ~ a#1 ~ a#1 ~ a#1 ~",
  S: "c#2@2 c#2 ~ c#2 ~ c#2@3 ~ c#2 ~ c#2 ~ c#2 ~", T: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  U: "d2@2 d2!6", V: "g1!4 a1!4", W: "g2@8 a2@7 ~", X: "g1@2 g1@2 g1@2 g1@2 a1@2 a1@2 a1@2 c#2 ~",
  Y: "e1@3 ~ e1@2 e1@2 e1@2 e1@2 e1 ~ e1@2, g#1 ~@15", Z: "~@3 c#2",
})).s("gm_electric_bass_finger").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~ A@17 B A@3 B@8 A@13 B A@3 B@16 A@23 ~ B@32 C ~@2>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@121>").gain(0.15)

// drums · snare
const snare = s("sd").struct("<~ A@20 B A@24 B A@27 C A@11 D A@32 E ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!6", C: "~@2 x ~ x!4", D: "x ~@2 x", E: "x",
})).gain(0.18)

// drums · clap
const clap = s("cp").struct("<~ A@4 ~@25 A@4 ~@29 A@4 ~@16 A@3 ~@36>".pickRestart({
  A: "~ x ~ x",
})).gain(0.2)

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

// drums · low tom
const low_tom = s("lt").struct("<~@29 A ~@24 A ~@7 A ~@3 A ~@19 B ~@3 A ~@31>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.18)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A@20 B A@11 C A@12 B A@19 D A@7 E A@11 F A@32 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!6", C: "~@2 x ~@3 x!2", D: "~@2 x!2 ~ x!2 ~", E: "~@2 x ~@2 x!3", F: "x",
})).gain(0.23)

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

// drums · high tom
const high_tom = s("ht").struct("<~@29 A ~@3 B ~@20 A ~@7 A ~@3 C ~@7 B ~@11 D ~@3 A ~@20 E ~@10>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~ x ~@6", D: "~@3 x", E: "~ x ~@2",
})).gain(0.18)

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

// drums · ride
const ride = s("rd").struct("<~@5 A@4 B ~@12 A@8 ~@17 A@16 B ~@11 A@8 ~@4 A@32 B ~@2>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.18)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@11 A ~@24 A ~@32 A ~@7 A ~@44>".pickRestart({
  A: "x",
})).gain(1.76)

stack(
  synth_strings_1, synth_strings_1_soft, clavinet, overdriven_guitar, overdriven_guitar_2, overdriven_guitar_soft, bass,
  kick, rim, snare, clap, hihat, low_tom, mid_tom, open_hat, high_tom, crash, ride, vibraslap
)

More by Bryan Adams