Strudelify
I Finally Found Someone cover art

1996 · 18 Til I Die

I Finally Found Someone

Bryan Adams

KeyB majorTempo69 bpm
0:00/0:00
// I Finally Found Someone — Bryan Adams
// 69 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 51, 4/4 at bar 52) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 12 "Strings" synth strings 1 (copy of ch 5 "Melody 1" tuba); ch 13 "Strings" cello (copy of ch 6 "Melody 2" piano)
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(69/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 B C D A E F G A B H I E J K L E J M K N@2 O P O J Q R S T U V W X T Y U J S Y U J H@2 Z AA AB AA O AC@4 AD@7 AE@2
>`.pickRestart({
  A: "b1@13 ~ b1@2", B: "g#2@13 ~ g#2 ~", C: "e2@13 ~ e2 ~", D: "f#2@5 b2 f#3 b2", E: "g#2@13 ~ g#2@2",
  F: "e2@13 ~ e2@2", G: "e2@5 b2 e3 b2", H: "f#2@13 ~ f#2 ~", I: "f#2@14 g#1 ~", J: "f2@13 ~ f2@2", K: "c#2@13 ~ c#2@2",
  L: "c#2@5 g#2 c#3 g#2", M: "c#2@13 ~ c#2 ~", N: "f2", O: "a#1@5 ~ a#1@2 a#1@8", P: "f2@5 c3 f3 c3", Q: "a1!2",
  R: "d2@8 c#2@5 ~ c#2@2", S: "c2@13 ~ c2 ~", T: "c2@13 ~ c2@2", U: "f2@13 ~ f2 ~", V: "d2@13 ~ d2@2",
  W: "a#1@13 ~ a#1@2", X: "g2@13 ~ g2@2", Y: "a1@5 e2 a2 e2", Z: "b1@5 ~ b1@2 b1@5 ~ b1@2", AA: "f#2@13 ~ f#2@2",
  AB: "b1!2", AC: "[d#2@8 d2@13 ~ d2 ~ c#2@13 ~ c#2@2 c#2@13 ~ c#2@2 d#2@5 ~ d#2@2]/4",
  AD: "[d#2@8 g#2@13 ~ g#2 ~ a#1@13 ~ a#1 ~ c#2@14 c#2 ~ c#2@13 ~ c#2 ~ f#2@13 ~ f#2 ~ b1@13 ~ b1@2 f#2@8]/7",
  AE: "[~@3 f#2 f#2@10 ~@2]/2",
})).s("gm_fretless_bass").gain(0.31)

// chords · piano
const piano = note(`<
  A B C D E F G H A I J@2 K L M N K O M P Q@2 R S T U V W X Y Z AA AB AC AD AE S L AF AG U L AH@2 AI AJ AK AJ AL AM@4
  AN@4 AO@5
>`.pickRestart({
  A: "d#4@6 c#4@9 ~, [b2,b3,f#4]@15 ~", B: "b3@6 a#3@9 ~, [g#2,g#3,d#4]@15 ~", C: "[g#3,b3,e4]@6 [f#3,b3,e4]@9 ~, e2",
  D: "g#4@6 f#4@9 ~, [f#3,e4,b4]@15 ~", E: "c#4@5 ~ d#4@9 ~, [b2,b3,f#4]", F: "[b3,d#4,g#4]@6 [a#3,d#4,g#4]@9 ~, g#2",
  G: "g#4@6 f#4@9 ~, [e3,e4,b4]@15 ~", H: "[g3,b3,e4]@6 [f#3,b3,e4]@9 ~, e2", I: "a#3@5 ~ b3@9 ~, [g#2,g#3,d#4]",
  J: "[g#3 ~@13 g#3@7 ~ g#3@2 [c#4,d#4,g#4]@2 ~@2 [c#4,d#4,g#4]@2 ~@2, f#3@31 ~, ~@6 [c#4,d#4,g#4]@17 ~@3 g#3@5 ~]/2", // C#sus2
  K: "[c4,d#4,g#4]@6 [a#3,d#4,g#4]@9 ~, g#2", L: "g4@5 ~ g#4@9 ~, [f3,f4,c5]", M: "d#4@5 ~ f4@9 ~, [c#3,c#4,g#4]",
  N: "d#4@5 ~ e4@9 ~, [c#3,c#4,g#4]", O: "[g#3,c4,f4]@6 [g3,c4,f4]@9 ~, f2", P: "e4@6 d#4@9 ~, [c#3,c#4,g#4]@15 ~",
  Q: "[~@6 [f4,g4,c5] ~ g4@5 ~ a4@8 ~@4 g4@2 f4@2 c4@2, f3, ~@8 c5@23 ~, ~@8 f4@14 c4@7 ~@3]/2", // Fsus2
  R: "[d4,f4,a4,c5]@6 a#2 ~ [c#4,f4,g4,a#4]@5 ~ [c#4,f4,g4,a#4] ~, a#2@5 ~@11", S: "[a3,c4,f4]@6 [g3,c4,f4]@9 ~, f2",
  T: "[d4,f4,a4,c5]@8 [c#4,f4,g4,a#4]@5 ~ [c#4,f4,g4,a#4] ~", U: "g4@5 ~ a4@9 ~, [f3,f4,c5]",
  V: "[d4,e4,g4,b4]@8 [c#4,e4,g4,a4]@6 a2 ~, ~@8 a2@5 ~@3", // Em7 A7
  W: "[a3,d4,f4]@5 ~ [a3,d4,f4] ~ [g#3,c#4,f4]@6 c#3 ~, ~@8 c#3@5 ~@3", X: "[a3,c4,f4]@6 [g3,c4,f4]@9 ~, c2",
  Y: "[d4,f4,a#4]@6 [c4,f4,a#4]@9 ~, c3", Z: "a4@6 g4@9 ~, [f3,f4,c5]@15 ~", AA: "e4@5 ~ f4@9 ~, [d3,d4,a4]",
  AB: "c4@5 ~ d4@9 ~, [a#2,a#3,f4]", AC: "[a3,c4,f4]@6 [g3,c4,f4]@9 ~, g2", AD: "d4@5 ~ e4@9 ~, [c3,c4,g4]",
  AE: "b3@5 ~ c4@9 ~, [a2,a3,e4]", AF: "e4@6 d4@9 ~, [c3,c4,g4]@15 ~", AG: "c4@6 b3@9 ~, [a2,a3,e4]@15 ~",
  AH: "[~@6 [f#3,g#3,c#4] ~ g#3@5 ~ a#3@8 ~@4 g#3@2 f#3@2 c#3@2, f#2, ~@8 c#4@23 ~, ~@8 f#3@14 c#3@7 ~@3]/2", // F#sus2
  AI: "[d#4,f#4,a#4,c#5]@8 [g#3,b3,d4,f#4]@6 b2 ~, ~@8 b2@5 ~@3", AJ: "g#3@5 ~ a#3@9 ~, [f#2,f#3,c#4]",
  AK: "[a#3,c#4,d#4,f#4]@6 b2 ~ [d4,f#4,g#4,b4]@6 b2 ~, b2@5 ~@3 b2@5 ~@3", // D#m7 G#m7b5
  AL: "[d#4,f4,g#4,c5]@6 a#2 ~ [d4,f4,g#4,a#4]@8, a#2@5 ~@11", // Fm7 A#7
  AM: "[~@2 [f#3,a#3,d#4]@3 ~ [f#3,a#3,d#4] ~ e4@5 ~ f#4@9 ~ g#3@5 ~ a#3@9 ~ a#3@5 ~ b3@9 ~ [a#3,c#4,f4,g#4]@6 d#3 ~, ~@8 [d3,d4,a4]@16 [c#2,f#3,c#4]@16 [c#2,g#3,d#4]@16 d#3@5 ~@3]/4", // D#m A#m7 D5 F#5 C#sus2
  AN: "[[a#3,c#4,d#4,g4]@5 ~ [a#3,c#4,d#4,g4] ~ [b3,d#4,g#4]@6 [a#3,d#4,g#4]@9 ~ [a#3,c#4,f#4]@6 [g#3,c#4,f#4]@9 ~ d#3 ~@13 d#3@7 ~ d#3@2, ~ g#2@2 a#1@2 c#2@3, ~@46 [g#3,a#3,d#4]@17 ~]/4", // D#7 G#m D#sus4 F# C#sus4 G#sus2
  AO: "[[g#3,a#3,d#4]@2 ~@2 [g#3,a#3,d#4]@2 ~@2 g#3@5 ~ a#3@9 ~ c#4@5 ~ d#4@9 ~ a#3@6 g#3@9 ~ [a#3,c#4,f#4]@6 [g#3,c#4,f#4]@9 ~@9, ~@2 d#3@5 ~ [f#2,f#3,c#4]@16 [b2,b3,f#4]@16 [f#2,f#3,c#4]@15 ~ f#2@16 ~@8]/5", // G#sus2 F# C#sus4 F#5 B5 F#5
})).s("gm_piano").gain(0.18).pan(0.3)

// chords · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  A B C D E F C G H I J@2 K L M N O P Q R S@2 T U V U W X Y Z AA AB AC AD AE AF AA P AG AH U P AI@2 AJ AK AJ AL AM AN@4
  AO@4 AP@5
>`.pickRestart({
  A: "c#4 ~@5 f#4@2, b2, ~@2 f#4@7 ~ f#3@6, ~ b3@3, ~@3 c#4@3 ~@2",
  B: "~@6 g#3 ~, g#2@7 ~, b3@4 g#3@7 ~@5, ~ d#3@3 ~ d#3@2 ~, ~@6 b3@9 ~",
  C: "~@4 e4@2 f#4@9 ~, e3@15 ~, f#4 ~@3, ~@2 b3@7 ~@7", D: "~@6 f#4@3 ~ g#4@5 ~, f#3@15 ~, g#4@4 e4@11 ~, ~@2 b3@13 ~",
  E: "~@6 c#4@3 ~ d#4@5 ~, b2@15 ~, d#4@4 b3@11 ~, ~@2 f#3@13 ~",
  F: "a#3 ~@5 d#4@2, g#2, ~@2 d#4@7 ~ d#3@6, ~ g#3@3, ~@3 a#3@3 ~@2",
  G: "f#4 ~@5 b4@2, e3, ~@2 b4@7 ~ b3@6, ~ e4@3, ~@3 f#4@3 ~@2",
  H: "~@3 c#4 d#4 c#4 b3 f#3, ~ b2@7, ~@3 f#3@10 ~@3, ~@4 b3@7 ~@5",
  I: "~@3 a#3 b3 a#3 g#3 d#3, ~ g#2@7, ~@3 d#3@10 ~@3, ~@4 g#3@7 ~@5",
  J: "[~@12 c#4@2 ~@8 d#4@4 e4@2 d#4@2 c#4 ~, e4@4 c#4@5 ~@11 c#4@7 ~@5, ~@2 f#3@12 ~@2 f#3@15 ~, ~@3 g#3@6 ~ g#3@7 ~ g#3@6 ~@8, ~@3 d#4@3 ~ d#4@3 ~@6]/2",
  K: "~@3 a#3 c4 a#3 g#3 d#3, ~ g#2@7, ~@3 d#3@10 ~@3, ~@4 g#3@7 ~@5",
  L: "~@4 f4@2 g4@9 ~, f3@15 ~, g4 ~@3, ~@2 c4@7 ~@7", M: "~@6 d#4@3 ~ f4@5 ~, c#3@15 ~, f4@4 c#4@11 ~, ~@2 g#3@13 ~",
  N: "~@3 d#4 e4 d#4 c#4 g#3, ~ c#3@7, ~@3 g#3@10 ~@3, ~@4 c#4@7 ~@5",
  O: "~@6 g#3 ~, g#2@7 ~, c4@4 g#3@7 ~@5, ~ d#3@3 ~ d#3@2 ~, ~@6 c4@9 ~",
  P: "~@6 g4@3 ~ g#4@5 ~, f3@15 ~, g#4@4 f4@11 ~, ~@2 c4@13 ~",
  Q: "~@6 c#4 ~, c#3@7 ~, f4@4 c#4@7 ~@5, ~ g#3@3 ~ g#3@2 ~, ~@6 f4@9 ~",
  R: "d#4 ~@5 g#4@2, c#3, ~@2 g#4@7 ~ g#3@6, ~ c#4@3, ~@3 d#4@3 ~@2",
  S: "[~@20 g4@2 a4@4 g4@2 c4@2 g4 ~, ~@2 f3@11 ~ f3@18, ~@4 c4@13 ~ c4@9 ~@5, ~@3 g4@6 ~@7]/2",
  T: "~@6 d4@2 ~@2 f3@4 a#3 ~, a#2 [a#2,c#4], d4@3 ~@5, ~ f3@3 ~@4, ~ a#3 ~@2", // A#m
  U: "g4 ~@5 c5@2, f3, ~@2 c5@7 ~ c4@6, ~ f4@3, ~@3 g4@3 ~@2",
  V: "~@2 f3@4 a#3 ~@7 c#4@2, [a#2,d4] a#2, ~@4 c#4@3 ~, ~@5 f3@3, ~@3 a#3", // A#
  W: "~@3 d4 ~@3 c#4, a2!2, d4@3 ~ c#4@3 ~, ~ e3@3 ~ e3@3, ~ a3 ~ a3",
  X: "~@2 a3@4 d4 ~@7 f4@2, [d3,f4] c#3, ~@4 f4@3 ~, ~@5 g#3@3, ~@3 c#4", // Dm
  Y: "~@4 f4@2 g4@9 ~, c3@15 ~, g4 ~@3, ~@2 c4@7 ~@7", Z: "~@6 c4@3 ~ d4@5 ~, c3@15 ~, d4@4 a#3@11 ~, ~@2 f3@13 ~",
  AA: "~@3 g4 a4 g4 f4 c4, ~ f3@7, ~@3 c4@10 ~@3, ~@4 f4@7 ~@5",
  AB: "e4 ~@5 a4@2, d3, ~@2 a4@7 ~ a3@6, ~ d4@3, ~@3 e4@3 ~@2",
  AC: "~@3 c4 d4 c4 a#3 f3, ~ a#2@7, ~@3 f3@10 ~@3, ~@4 a#3@7 ~@5",
  AD: "~@4 f4@2 g4@9 ~, g2@15 ~, g4 ~@3, ~@2 c4@7 ~@7", AE: "d4 ~@5 g4@2, c3, ~@2 g4@7 ~ g3@6, ~ c4@3, ~@3 d4@3 ~@2",
  AF: "~@4 a3@2 b3@9 ~, a2@15 ~, b3 ~@3, ~@2 e3@7 ~@7",
  AG: "~@6 c4 ~, c3@7 ~, e4@4 c4@7 ~@5, ~ g3@3 ~ g3@2 ~, ~@6 e4@9 ~",
  AH: "~@6 a3 ~, a2@7 ~, c4@4 a3@7 ~@5, ~ e3@3 ~ e3@2 ~, ~@6 c4@9 ~",
  AI: "[f#2 ~@12 f#2 ~ g#3, g#3@3 a#3@4 g#3@4 a#3@4 ~, ~@2 c#3@9 ~ c#3@7 ~ c#3@7 ~ c#3@4, ~@4 f#2@5 ~ f#2@8 f#2@7 ~@7]/2",
  AJ: "~@6 d#4@2 ~@2 f#3@4 b3 ~, b2 [b2,d4], d#4@3 ~@5, ~ f#3@3 ~@4, ~ b3 ~@2", // Bm
  AK: "g#3 ~@5 c#4@2, f#2, ~@2 c#4@7 ~ c#3@6, ~ f#3@3, ~@3 g#3@3 ~@2",
  AL: "~@4 f#3@2 g#3@9 ~, f#2@15 ~, g#3 ~@3, ~@2 c#3@7 ~@7",
  AM: "~@2 f3@4 a#3 ~@7 d4@2, [a#2,d#4] a#2, ~@2 d4 a#3, ~@5 f3@3", // D#5
  AN: "[~@2 a#3@4 d#4 ~@7 e4@2 f#4@2 e4@2 d4@2 a3@2 ~@6 g#3@2 a#3@2 g#3@2 f#3@2 c#3@2 ~@4 g#3@2 a#3@9 ~@3 a#3@4 d#4 ~, [d#3,f#4]@8 ~@2 d3@14 ~@2 c#2@14 c#2@15 ~@9, ~@11 a3@10 ~@6 c#3@10 ~@5 d#3@7 ~@7 [d#3,g#4]@8, ~@12 d4@7 ~@9 f#3@7 ~@5 a#3@4 ~@20]/4", // D#m G#5
  AO: "[~@6 g4@2 a#3@2 ~@10 d#4@4 ~@4 f#3@2 g#3@9 ~@21 a#3@2 b3@2, d#3@8 g#2@16 a#1@15 ~@3 c#2@11 ~ c#2@10, g4@3 ~@4 a#3@3 ~@13 a#3@6 ~@3, ~ a#3@3 ~@2 g#3@6 g#3@2 ~@18, ~@4 d#4@4 ~@2 d#4@7 ~ d#3@6 ~@2 c#3@7 ~@11 d#3@13 ~ d#3@6]/4",
  AP: "[~@2 a#3@2 d#3@2 a#3 ~@5 f#3@2 g#3@9 ~@7 c#4@3 ~ d#4@5 ~@5 f#3@2 g#3@9 ~@5 f#3@2 g#3@9 ~@9, ~@8 f#2@15 ~@3 f#3@13 ~ g#3@4 ~@12 g#3@4 ~@20, ~@8 g#3@4 ~@12 d#4@4 b3@11 ~@3 c#3@7 ~@9 c#3@7 ~@15, ~@10 c#3@7 ~@7 b2@15 ~ f#2@15 ~ f#2@15 ~@9]/5",
})).s("gm_acoustic_guitar_nylon").gain(0.22).pan(0.6)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  A B C D E F G H I J K L M N O P M Q O R S T U V U V W X Y@2 Z AA AB AC AD AE AF AG AD AE AF AH AI AJ AK AL AK AM AN AO
  X AP AQ AR AS AT@4 AU@3
>`.pickRestart({
  A: "c#4@4 b3@2 c#4 b3", B: "a#3@4 b3@2 c#4 b3", C: "f#3@4 g#3@2 c#4 b3", D: "e3@4 b3@2 c#4 f#3",
  E: "b2@8 b3@2 f#3@2 b2@3 a#2", F: "g#2@3 d#3 [g#3,b3]@2 g#2 f#2", G: "e2@7 b2", H: "e3@5 b2 e2@2", I: "b2@4 b2@3 a#2",
  J: "g#2@4 [g#2,f#3]@3 g#2", K: "[f#2,e3]@7 c#3", L: "[f#2,e3]@3 [f#2,e3]", M: "g#2@7 g2", N: "f2@11 d#2 f2@2 c2@2",
  O: "c#2@7 g#2", P: "c#3@11 d#3 e3 d#3 c#3@2", Q: "f2 [f3,g#3]", R: "c#2@7 d#2", S: "f2", T: "f2@7 f2", U: "a#2!2",
  V: "f2@3 f2 f2@4", W: "[a2,g3] a2", X: "d2 c#2", Y: "c2", Z: "g3 a3", AA: "e3 f3", AB: "a3 g3", AC: "f3@2 c4 ~",
  AD: "c2@4 c3@3 b2", AE: "a2@3 a2 a2@3 g2", AF: "f2@3 f2 f2@3 c2", AG: "f2@6 f2@2 f2@3 g2 g#2 g2 f2@2",
  AH: "f2@6 f2@2 f2@5 e2 f2@2", AI: "f#2", AJ: "f#2@11 c#2 f#2 d#2 c#2@2", AK: "b1 b2", AL: "f#2@3 f#2 f#2@4",
  AM: "f#2@3 f#2 f#2@3 g#2", AN: "[a#2,g#3] a#2", AO: "d#2@3 d#2 d2@3 d2", AP: "c#2@4 c#2@3 c#2", AQ: "c#2@4 d#2@3 d#2",
  AR: "d#2@4 g#2@3 g#2", AS: "[g#2,f#3]@4 a#2@3 a#2", AT: "[[a#2,f#3]@3 b2 [c#3,f#3]@8 c#2@8 ~ c#3 g#3 a#3@5 f#3@4]/4",
  AU: "[d#4@4 b3 a#3 f#3 c#3 ~@2 c#3@2 g#3@2 a#3@30 ~@4]/3",
})).s("gm_electric_bass_finger").gain(0.31).pan(0.7)

// bass · electric bass finger · "Bass"
const bass_3 = note("<A B C D ~@26 E F G H ~@23 I@5>".pickRestart({
  A: "b2", B: "g#2", C: "e2", D: "f#2", E: "f2@7 e2", F: "d2@7 c3", G: "a#2@7 a2", H: "g2@15 g2",
  I: "[~ f#2@2 b2@2 f#2@4 ~]/5",
})).s("gm_electric_bass_finger").gain(0.31).pan(0.2)

// drums · kick
const kick = s("bd").struct("<[x!2]!31 [x ~@4 x ~@2] [x!2]!9 [x ~@4 x ~@2] [x!2]!19 ~>").gain(0.31).pan(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  A B ~ B ~ B ~ B ~ B ~ B@3 ~ B ~ B ~ B@3 ~ B ~ B ~ B ~ B ~ C B@4 ~ B ~ B ~ C B@2 ~ B ~ B ~@3 C ~ C ~ C ~ C ~ C ~@2
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "~@7 x", C: "~@3 x ~@4",
})).gain(0.13).pan(0.4)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!31 ~ [~ x ~ x]!9 ~ [~ x ~ x]!18 [~ x ~@2] ~>").gain(0.31).pan(0.4)

// drums · snare
const snare = s("sd").struct("<~@31 [~@8 x!2 ~@2 x ~ x!2] ~@9 [~@8 x!2 ~@2 x ~ x!2] ~@20>").gain(0.31).pan(0.4)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!61 ~>").gain(0.13).pan(0.4)

// drums · hihat
const hihat = s("hh").struct("<A@5 B A@4 C A@2 B A@10 D A@6 E A@6 D A@2 E A@5 B A@9 B A C F ~>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!3 ~ x!4", D: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", E: "x ~ x!2 ~@12",
  F: "x ~ x ~ x ~ x!3 ~ x!2 ~@4",
})).gain(0.31).pan(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@5 A ~@4 B ~@2 A ~@17 C ~@9 C ~@5 A ~@9 A ~ B D ~>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@2 x!2 ~@4", D: "~@3 x",
})).gain(0.27).pan(0.4)

// drums · crash
const crash = s("cr").struct("<A ~@11 A ~@7 A ~@11 A ~ A ~@7 A ~@19>".pickRestart({
  A: "x",
})).gain(0.31).pan(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@31 [~@4 x!2 ~@2] ~@9 [~@4 x!2 ~@2] ~@20>").gain(0.31).pan(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!8]!60 [x!7 ~] ~>").gain(1.36).pan(0.4)

stack(
  bass, piano, acoustic_guitar_nylon, bass_2, bass_3, kick, kick_soft, rim, snare, clap, hihat, open_hat, crash,
  tambourine, cabasa
)

More by Bryan Adams