Strudelify

Ik hou van jou

Gordon

KeyC majorTempo83 bpm
0:00/0:00
// Ik hou van jou — Gordon
// 83 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 9 "BASSSOON" named as a bass, played on electric bass finger (its bassoon patch is not one)
// note: Full arrangement: all 64 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(83/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 · electric bass finger · "FINGERDBAS"
const bass = note("<~@27 A@2 B C D E F G A H@2 C D E I J K L M L M N O P Q R S T U V W X Y Z ~@3>".pickRestart({
  A: "c2@8 ~@4 c2 ~@3 c2@12 ~@4", B: "b1@8 ~@4 b1 ~@3 b1@12 ~@4", C: "c2@8 ~@4 c2@3 ~ b1@12 ~@4",
  D: "a1@8 ~@4 a1 ~@3 a1@12 ~@4", E: "d2@8 ~@4 d2 ~@3 d2@12 ~@4", F: "g1@8 ~@4 g1 ~@3 g1@12 ~@4",
  G: "c2@8 ~@4 c2@7 ~ g2@4 c3@8", H: "[c2@8 f4@4 e4@4 c2@12 ~@4 b1@8 ~@4 b1 ~@3 b1@12 ~@4, ~@12 c2 ~@3 f4@48]/2",
  I: "g1@8 ~@4 g1 ~@3 g1@12 g2@4", J: "f1@8 ~@4 f1 ~@3 f1@12 ~@4", K: "e1@8 ~@4 e1 ~@11 e2@7 ~, ~@4 e1@3 ~",
  L: "f1@8 ~@4 f1 ~@3 f1@8 c2@7 ~", M: "e1@8 ~@4 e1 ~@3 e1@8 ~@4 e1@3 ~", N: "f1@8 ~@4 f1 ~@3 f1@8 ~@4 f1@3 ~",
  O: "f#1@8 ~@4 f#1 ~@3 f#1@8 ~@4 f#1@3 ~", P: "g1@8 ~@4 g1 ~@3 g1@8 ~@4 g1 ~@3", Q: "g1@8 ~@4 g2 ~@3 g2@7 ~ f2@7 ~",
  R: "d#2@11 ~ d#2@3 ~ d#2@11 ~ d#2 ~ d#2@2", S: "d#2@8 ~@4 d#2 ~@3 d#2@8 ~@4 d#2 ~@3",
  T: "d2@8 ~@4 d2 ~@3 d2@12 d2 ~ a#1@2", U: "d#2@8 ~@4 d#2@3 ~ d2@8 ~@4 d2@3 ~", V: "c2@8 ~@4 c2 ~@3 c2@12 d#2 ~ c2@2",
  W: "f2@8 ~@4 f2 ~@3 f2@13 ~@3", X: "a#1@13 ~@3 a#1@13 ~@3", Y: "d#2@31 ~", Z: "~@8 g#3@4 d#3@5 c4@15, d#2@31 ~",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · orchestral harp · "HARP"
const orchestral_harp = note("<A B C D E F@3 G H I D E J@3 K L M N O P Q@2 R S T ~@23 U V ~@12>".pickRestart({
  A: "~@3 g4 ~@3 g4, c3@12 ~@4 c3@13 ~@3, ~@4 g3@13 ~@3 g3@12, ~@8 c4@9 ~@7 c4@8",
  B: "~@3 g4 ~@3 g4, c3@13 ~@3 c3@13 ~@3, ~ g3@3 ~ g3@3, ~@8 c4@9 ~@7 c4@8",
  C: "~@3 g4 ~@3 g4, c3@13 ~@3 c3@13 ~@3, ~@4 g3@12 ~@4 g3@9 ~@3, ~@8 c4@9 ~@7 c4@8",
  D: "~@3 a4 ~@3 a4, c3@14 ~@2 c3@13 ~@3, ~@4 a3@13 ~@3 a3@12, ~@8 d4@9 ~@7 d4@8",
  E: "~@3 g4 ~@3 g4, b2@12 ~@4 b2@13 ~@3, ~ g3@3 ~ g3@3, ~@8 d4@9 ~@7 d4@8",
  F: "[~@12 g4@4 ~@12 g4@3 ~@16 e4@4 a4@3 ~@5 e4@4 ~@5 d4@4 f4@4 c#4@4 f4@4 c#4@4 a4@4 a3@4, c3@13 ~@3 b2@15 a2@24 a4@9 ~@32, ~@4 g3@13 ~@3 g3@12 ~@3 e3@28 d3@33, ~@8 c4@9 ~@6 b3@9 ~@7 a3@24 ~@33, ~@43 c4@22 ~@31]/3",
  G: "~@3 g4 a4 g4 b4 g4, g3, ~ c4@7, ~ d4@3",
  H: "~@4 e4@4 ~@16 c5@7 ~, [c3,c5]@17 ~@3 g4@11 ~, ~@4 g4@4 e4@7 ~, ~@6 c4@9 ~", // C
  I: "~@3 g4 ~@3 g4, c3@14 ~@2 c3@13 ~@3, ~@4 g3@12 ~@4 g3@9 ~@3, ~@8 c4@9 ~@7 c4@8",
  J: "[~@12 g4@4 ~@12 g4@3 ~@16 e4@4 a4@3 ~@5 e4@4 ~@13 c#4@4 f4@4 c#4@4 a4@4 f4@4, c3@13 ~@3 b2@15 a2@24 a4@9 ~@32, ~@4 g3@13 ~@3 g3@12 ~@3 e3@28 d3@29 ~@4, ~@8 c4@9 ~@6 b3@9 ~@7 a3@24 ~@5 f3@20 ~@8, ~@43 c4@22 ~@7 a3@16 ~@8]/3",
  K: "g4 ~ g4 c5 g4 d4 b3 g3, g3@7 ~, ~ [c4,e4]@4 ~@3", L: "~@16 a3@8 b3@7 ~, c4 ~, ~ b3@2 ~",
  M: "~@12 g4@4 c5@2 ~@6 [e4,e5] ~@3 g2@4, c3@14 ~@2 c4 ~@3 e3@9 ~@3, ~@4 g3@12 g3@13 ~@3, ~@8 e4@9 ~@7 c3@8", // E
  N: "[e4,e5] ~@7 [d4,d5] ~@7 [c#4,c#5] ~@7 [d4,d5] ~@7, a3", // E D C# D
  O: "~@12 e4@4 ~@8 [e4,e5] ~@3 g2@4, c3@3 ~@2 e3@3, ~@4 g3@12 g4@13 ~@3, ~@8 c4@9 ~@7 c3@8", // E
  P: "[a4,c5] ~@7 [d4,d5] ~@7 [c#4,c#5] ~@7 [d4,d5] ~@3 f4@4, a3", // Am D C# D
  Q: "[~@15 g4@4 ~@4 [e4,e5]@2 ~@2 g2@4 ~ [a4,c5] ~@7 [d4,d5] ~@3 f4@4 [c#4,c#5] ~@3 f4@4 [d4,d5] ~@3 a4@4, c3@19 e3@12 ~@33, ~@4 g3@21 ~@6 a3@29 ~@4, ~@7 c4@17 ~@40, ~@12 e4@11 c3@9 ~@32]/2", // E Am D C# D
  R: "d4 a3 [f#4,a4] a3 d4 a3 [f#4,a4] a3 d4 a3 [f#4,a4] a3 d4 a3 [f#4,a4] a3, [f#2,f#3]@15 ~", // F#m F#
  S: "g5@2 c5@2 ~@2 g3@2 e5@2 c5 ~ g4@2 g3@2 c4@2 g4@2 ~@2 g3@2 [c4,e4]@2 c4@2 g3@2 c3@2, c4 ~@7 c4 ~@7 c5 ~@15", // C
  T: "~@5 g5@4 [d5,e5,f5] [a5,b5,c6] ~@4 d6 [e6,f6] [e6,f6,g6] [c6,d6] [g5,a5,b5] [d5,e5] [a4,b4,c5] [f4,g4] e4 ~@8, g2, g3 ~@3, ~ f4@3 ~@12, ~@3 g4 [b4,d5]@4 ~@2 d6@2 ~@20", // Dm Am Fmaj7 Em Csus2 G Dsus2 Am …
  U: "~@31 d6",
  V: "[e6,f6] [e6,f6,g6] [c6,d6] [g5,a5,b5] [d5,e5] [b4,c5] ~ [b4,c5,d5] [f5,a5,b5] ~ [f5,g5] [d5,e5] c5 ~@19", // Fmaj7 Em Csus2 G Dsus2 Cmaj7 Bm Bm7b5 …
})).s("gm_orchestral_harp").gain(0.4)

// chords · orchestral harp · "HARP" · soft notes
const orchestral_harp_soft = note("<~@9 A ~@5 B ~@3 C ~ D ~ E ~ F G ~@23 H I ~@12>".pickRestart({
  A: "~ e3@3 ~@3 g3", B: "~@7 f3", C: "~ f4 ~ f4 ~ f4 ~ f4", D: "~ f4 ~ f4 ~ f4 ~@2", E: "~ f4 ~@6",
  F: "~@2 g4 ~@7 e4 ~@5", G: "~@8 [a4,b4] [c5,g5] ~@3 g5 [a5,b5] c6 ~@4 f5 ~@2 d4 ~ b3@2 ~@5, ~@4 g4@2 ~@6 c4 ~@3",
  H: "~@29 g5 [a5,b5] c6", I: "~@4 f5 a4 [g4,a4] e5 g5 a5 ~@2 b4 a4 g4 [e4,f4] d4 ~@3 c4 b3 ~@10",
})).s("gm_orchestral_harp").gain(0.24)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~ A@2 B C D E@2 F@3 G H I@5 J@2 K L@4 M@2 N O@2 P@2 Q@7 R@4 S@5 T@4 U@8 V@4
>`.pickRestart({
  A: "[~@3 c7@5]/2", B: "~ a6@3", C: "g6@15 ~", D: "e6@3 g6", E: "[a6@31 d6@25 f6@8]/2", F: "[g6@2 [g3,c4,e4]]/3",
  G: "f4@3 e4, [f3,a3]", H: "~ d5 b4 g4, [g3,b3,d4]",
  I: "[g3@7 c4@8 ~ b3@8 c4@8 a4@15 b4@8 [e3,c5]@8 [d3,e5]@8 ~@9 c#5@8 d5@8 [c4,g4,c5]@16 b4@16 g4@31 ~, e4@63 f4@33 ~@64, e3@54 ~@17 d5@9 ~@80, g4@32 a3@65 ~@15 [b3,d4]@48, ~@9 f3@3 g3@8]/5", // C Dsus2 C5 Bm
  J: "[~@8 g4@8 c5@8 e5@7 ~ e5@8 d5@8 c#5@8 d5@8, g3, e4 [a3,f4,a4]]/2", K: "c5@8 g4@8 c5@8 e5@7 ~, [g3,e4]",
  L: "[e5@8 d5@8 c#5@7 ~ d5@7 ~ e5@15 g5@15 ~ [f4,a4]@33 [f#4,a4]@31 ~, [a3,f4,a4]@31 g3@31 a3@66, ~@32 [e4,g4]@31 a5@65]/4", // F F#m Dm Em
  M: "[c6@23 e6@9 [d4,g4,b4,g6]@32, g3, [e4,g4,c5]@33 ~@31]/2", N: "[g3,c4,e4]",
  O: "[~@8 f5@4 e5@4 f5@8 a4@7 ~@13 g3@4 d4@11 g3@5, [f3,f4], a3@31 b3@13 ~@20, ~ b4]/2", // F
  P: "[c5@2 e5 d5 e5@2 [b3,d5]@2 c5@4 a4@2 [c4,c5]@2, [e3,e4], c4@3 ~ a3@3 ~]/2", // Bm C E
  Q: "[[e4,e5]@8 d4@8 c#4@8 d4@7 ~ c4@8 b3@8 a3@8 b3@8 [e3,e4]@15 ~ e4@4 g4@4 c5@4 e5@4 ~@24 g5@7 ~ f3@23 ~ f3@4 e3@3 ~ [f3,d4]@31 ~ d4@8 c4@15 ~ g4@8, f4@64 ~@15 e3@6 ~@3 b3@8 c4@32 ~@31 b3@32 ~@24 b3@9, a3@31 g5@65 e5@24 ~@7 f4@25 ~@8 g5@64, ~@8 f5@24 g3@32 g3@64 [a3,a5]@32 ~@32 e3@31 ~, ~@97 e4@31 ~@24 e4@8 ~@31 e4@24 ~@9]/7", // E Dm A
  R: "[~@7 e4@8 ~@8 c5@8 ~@9 f5@23 ~ c4@15 b3@16 ~@9 b3@8 a3@8 b3@8, a3 g5, c3@31 e5@8 ~@24 e4@16 d4@48 ~, a4@16 a4@16 [d3,f4]@32 g3@31 c4@9 ~@24, ~@96 f3@31 ~]/4", // Dm
  S: "[~@8 g5@7 c6@8 ~ e6@7 ~@8 d6@8 c#6@8 ~@17 g5@8 c6@8 e6@7 ~ e6@7 d6@8 c#6@8 ~@16 g5@8 ~ c6@7 e6@8 ~, [e3,g3,e4,g4]@31 a4@33 [e3,g3,e4,g4]@32 f4@31 g4@32 ~, ~@31 e6@8 ~@17 d6@11 ~@53 d6@13 ~@27, ~@32 [f3,a3,f4]@33 ~@30 [f3,a3,a4]@33 [e3,g3,e4]@32]/5", // Em F Em
  T: "[e6@8 d6@8 c#6@8 d6@7 ~ e6@8 d6@8 c#6@8 d6@7 ~ [c4,e6]@32 [b4,d5]@15 [b4,d5]@4 ~ [g4,b4]@4 [g4,b4]@4 [d4,g4]@4, [a3,a4]@63 c5@33 b3@32, [f3,f4] [f#3,f#4] g3@2, ~@16 g4@13 ~@3]/4", // C Bm G G5 A F F#
  U: "[d#5@7 a#5@8 d#6@12 ~ a#5@4 g#5@23 a#5@3 g#5@2 g5@2 ~@18 f6@11 g#5@5 g#5@7 ~ g5@7 ~ g5@7 f5@8 ~@9 g4@7 ~ c5@8 d#5@8 g5@8 g#5@8 e5@8 f5@8 [f3,a#5]@32 ~@8 a#5@8 d#6@8 a#5@8, [g3,d#4]@62 g#5@9 a#5@8 ~@17 d#4@15 d4@16 d#5@8 ~@25 g#3@32 a#3@64, a#3@32 c4@40 a#3@55 c4@64 ~@33 g4@32, ~@32 g#3@32 [f3,d4]@32 g3@65 ~@64 g3@31, ~@128 d#4@32 f4@65 ~@31]/8", // A#5 Cm Dm
  V: "[~ g#5@23 f5@4 d#5@5 [b3,b4]@29 ~@2 [a#3,g4]@53 ~@11, [g#3,g#4]@63 a#4@53 ~@12, c4@33 ~@29 g3@53 ~@13]/4", // B D# G#
})).s("gm_string_ensemble_2").gain(0.48)

// other · flute
const flute = note(`<
  ~@10 A B C@2 ~@2 D E ~ F G H I@3 J@3 F K L@2 M N G O F C@2 P M Q R@2 M S M S T U V W X Y Z AA AB AC AD@2 AE AF AG@2
>`.pickRestart({
  A: "~@3 [e4,g4]", B: "[f4,a4]", C: "g4/2", D: "~@28 g4 ~@3", E: "g4@31 ~", F: "a4", G: "g4", H: "a4@31 ~",
  I: "[g4@31 a4@64 ~]/3", J: "[g4@37 ~ g4@2 c5@6 g4@2]/3", K: "~@3 g4 d5@3 g4", L: "[e4@35 ~@5 e4@8 a4@8 c5@8]/2",
  M: "e5 d5 c#5 d5", N: "c5 b4 a4 b4", O: "~@3 g4 c5@3 g4", P: "~ e4 a4 c5", Q: "c5 b4",
  R: "[g4@40 g4@8 c5@8 e5@7 ~]/2", S: "~@8 g4@8 c5@8 e5@7 ~", T: "e5@8 d5@8 c#5@8 d5@7 ~",
  U: "e5@7 ~ d5@8 c#5@8 d5@7 ~", V: "c5@31 ~", W: "d5", X: "~@4 a#4@3 ~ a#4@8", Y: "c5",
  Z: "a#4@5 ~@3 a#4@7 ~ a#4@14 ~@2", AA: "a#4", AB: "c5 d#4 g4 c5", AC: "c5@8 g#4@8 g4@7 ~ g#4@7 ~",
  AD: "[a#4@19 ~@13]/2", AE: "~@8 c5@4 g4@4 ~ g#4@15", AF: "~ [g#4,b4]@31", AG: "[~ [g4,a#4]@49 ~@14]/2",
})).s("gm_flute").gain(0.29).pan(0.4)

// other · oboe
const oboe = note(`<
  ~@9 A B C D@3 ~@4 C E C F@2 G H I@2 C J K L M N E O C P@2 Q M R S@2 M T M T U V W X ~@7 Y Z@2 AA@2
>`.pickRestart({
  A: "~@2 c5 b4", B: "g4@31 ~", C: "a4", D: "[g4@65 ~@31]/3", E: "g4",
  F: "[~@7 g4@8 ~ c5@7 e5@7 ~ e5@9 d5@8 c#5@8 d5@8]/2", G: "e5@8 d5@8 c#5@8 d5@7 ~", H: "e5",
  I: "[g4@21 ~ g4@2 c5@6 g4@2]/2", J: "~@3 g4 d5@3 g4", K: "e4", L: "~ e4 a4 c5", M: "e5 d5 c#5 d5", N: "c5 b4 a4 b4",
  O: "~@3 g4 c5@3 g4", P: "g4/2", Q: "~@8 e4@8 a4@7 ~ c5@8", R: "c5 b4", S: "[g4@39 ~ g4@8 c5@8 e5@7 ~]/2",
  T: "~@8 g4@8 c5@8 e5@7 ~", U: "e5@7 ~ d5@8 c#5@8 d5@6 ~@2", V: "e5@7 ~ d5@8 c#5@7 ~ d5@6 ~@2", W: "c5@15 ~", X: "d5",
  Y: "~ a#4 d#5 a#4", Z: "g#4/2", AA: "[~ g4@50 ~@13]/2",
})).s("gm_oboe").gain(0.29).pan(0.6)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<A B C D E F G@3 H@2 D I F J@4 ~@46>".pickRestart({
  A: "~@4 e4@11 ~, g4@15 ~, d4 ~@3, ~ g3@30 ~", B: "d4@8 e4@23 ~, [g3,g4]@31 ~", C: "[g3,c4,e4,g4]", D: "[a3,d4,f4]",
  E: "~@16 g3@15 ~, [b3,d4,g4]", F: "~ c4@13 ~@2 [b3,d4]@15 ~, [e4,g4]@15 ~",
  G: "[[a3,c4,e4,g4]@31 ~@17 c#4@8 d4@8 ~ c4@7 [b3,g4]@24, ~@31 a3@34 ~@31, ~@31 d4@17 ~@17 d4@31, ~@40 f4@25 ~@31]/3", // Am7 Em
  H: "[~@33 e4@31, ~ [g3,c4,g4]@63, ~ d4@3]/2", I: "[b3,d4,g4]",
  J: "[[a3,c4,e4,g4]@31 ~@17 c#4@8 d4@8 ~ c4@15 ~ b3@15 c4@8 b3@8 a3@8 b3@8, ~@31 a3@34 ~@16 g3@47, ~@31 d4@17 ~@17 d4@32 ~@31, ~@40 f4@25 ~@15 g4@48]/4", // Am7
})).s("gm_pad_warm").gain(0.4)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@59 A@2 B C@2>".pickRestart({
  A: "[~@8 [g3,d#4,a#4]@4 ~@4 [a#3,g4,d#5]@4 a#2@4 [g3,d#4,a#4]@4 d#2@3 ~ d#3@8 [g#3,d#4,c5]@3 ~ g3@4 [g#3,c4,g#4]@14 ~@2, d#2@12 d#2@12 ~@7 d#2@2 ~@31, ~@4 a#2@8 ~@19 g#2@29 ~@4]/2", // D# G#
  B: "~ b4@28 ~@3, [g#2,d#3,d#4]@7 ~", // G#5
  C: "[~@33 d#5@16 ~@15, d#2@16 d#4@33 ~@15, ~@4 a#2@13 ~@3 f4@4 g4@4 a#4@20 ~@16, ~@8 g3@41 ~@15, ~@12 a#3@37 ~@15]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.29).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@27 [x ~@2 x!2 ~@3]!28 [x ~@2 x!2 ~@2 x] [x ~@2 x!2 ~@3]!2 [x!2] x!2 ~@3>").gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@27 [~ x ~@2]!24 ~@13>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@51 [~ x ~@2] [~ x ~ x]!6 ~ x!2 ~@3>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@27 [x!8]!23 [~ x!7] x [~ x!7] [x!8]!5 [~ x] ~@5>").gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@51 [~@3 x] ~@5 [~@7 x] [~@3 x] ~@5>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 [~@5 x ~@2] ~@3 [~@5 x ~@2] ~ [~@5 x ~@2] ~@6>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@51 [~@9 x ~@6] ~@6 [~ x ~@2] ~@5>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@50 x ~ x ~@3 x!5 ~@3>").gain(0.64)

stack(
  bass, orchestral_harp, orchestral_harp_soft, string_ensemble_2, flute, oboe, pad_warm, acoustic_guitar_nylon, kick,
  rim, snare, hihat, low_tom, mid_tom, high_tom, crash
)

More by Gordon