Strudelify

Crazy for You

Hasselhoff David

KeyC majorTempo120 bpm
0:00/0:00
// Crazy for You — Hasselhoff David
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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(`<
  ~ A ~ B ~ C D E F G F H I@2 J@2 F G F H I@2 J@2 K L@2 M@2 N L O P L@2 M@2 N L P L F G F H I@2 J@2 F G F H I@2 J@2 K
  L@2 M@2 N L O P L@2 M@2 N L P Q I R I S T@2 U@2 I R I S T@2 U@2 V O@2 W@2 P O X Y O@2 W@2 P O Y Z AA@3 ~ O@2 W@2 P O X
  Y O@2 W@2 P O Y O AB
>`.pickRestart({
  A: "f1", B: "d2", C: "a#1@3 ~", D: "f1@3 ~", E: "c2@6 d2@5 ~ e2@4", F: "f1@2 f2!2 f1@2 f2!2 f1@2 f2!2 f1@2 f2!2",
  G: "d1@2 d2!2 d1@2 d2!2 d1@2 d2!2 d1@2 d2!2", H: "a#1@2 a#2!2 a#1@2 a#2!2 a#1@2 a#2!2 a1@2 a2!2",
  I: "g1@2 g2!2 g1@2 g2!2 g1@2 g2!2 g1@2 g2!2", J: "c2@2 c3!2 c2@2 c3!2 c2@2 c3!2 c2@2 c3!2", K: "c2!4",
  L: "f1 f2 f1 f2 f1 f2 f1 f2", M: "d1 d2 d1 d2 d1 d2 d1 d2", N: "a#1 a#2 a#1 a#2 a#1 a#2 a#1 a#2",
  O: "g1 g2 g1 g2 g1 g2 g1 g2", P: "c2 c3 c2 c3 c2 c3 c2 c3", Q: "f1 f2 f1 f2 d2 d3 d2 d3",
  R: "e1@2 e2!2 e1@2 e2!2 e1@2 e2!2 e1@2 e2!2", S: "c2@2 c3!2 c2@2 c3!2 c2@2 c3!2 b1@2 b2!2",
  T: "a1@2 a2!2 a1@2 a2!2 a1@2 a2!2 a1@2 a2!2", U: "d2@2 d3!2 d2@2 d3!2 d2@2 d3!2 d2@2 d3!2", V: "d2!4",
  W: "e1 e2 e1 e2 e1 e2 e1 e2", X: "a1 a2 a1 a2 a1 a2 a1 a2", Y: "d2 d3 d2 d3 d2 d3 d2 d3", Z: "g1 g2 g1 g2 g1 g2 g1 ~",
  AA: "[[g1,g2]@47 ~]/3", AB: "g1",
})).s("gm_electric_bass_finger").gain(0.35)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~ A ~ B ~ C D E ~@3 F G ~ H I J K L F M ~ N O P ~ Q R Q S T U V ~ Q W Q S T X Y ~@3 F G ~ H I J K L F M ~ N O P ~ Q R
  Q S T U V ~ Q W Q S T X Y ~@3 Z AA ~ AB AC AD AE AF Z AG ~ AH AI AJ ~ AK AL AK AM AN AO AP ~ AK AQ AK AM AN AR AS AT@3
  AU ~ AK AL AK AM AN AO AP ~ AK AQ AK AM AN AR AV AW
>`.pickRestart({
  A: "[f4,f5]@7 ~ [d4,d5]@4 [c4,c5]@2 [f4,f5]@2", B: "[f4,f5]@4 [d4,d5]@2 [c4,c5] [a3,a4]",
  C: "[a#3,a#4]@6 [d4,d5]@5 [a#4,a#5] [f4,f5]@3 ~", D: "[f4,f5]@6 [c4,c5]@7 ~@3",
  E: "[a4,a5]@5 ~ [a4,a5]@6 [g4,g5]@2 [f4,f5]@2", F: "~@10 [a#5,a#6] ~ [a5,a6]@2 [g5,g6]@2", G: "[a#5,a#6]@3 ~@13",
  H: "[c5,c6] [e5,e6]", I: "[g5,g6]@6 [c6,c7]@3 ~ [g5,g6] ~ [a5,a6] [a#5,a#6] [g5,g6] ~", J: "[c6,c7] ~@15",
  K: "~@10 [a5,a6] ~ [g5,g6]@2 [f5,f6]@2", L: "[a5,a6] ~@7", M: "[a#5,a#6] ~@7", N: "[c5,c6]@8 [e5,e6]@7 ~",
  O: "[g5,g6]@8 [c6,c7]@7 ~", P: "[e5,e6] ~ [e5,e6] ~ [e5,e6] ~ [e5,e6] ~",
  Q: "~@2 [a5,a6] ~ [a5,a6]@2 [g5,g6] ~ [g5,g6]@2 [f5,f6] ~ [f5,f6]@2 [e5,e6] ~", R: "[d5,d6]@11 ~@5", S: "[a#4,a#5]",
  T: "[a4,a5]", U: "[g4,g5]@5 ~ [b4,b5]@5 ~ [g4,g5]@3 ~", V: "[e4,e5]@3 ~", W: "[d5,d6]@5 ~@3",
  X: "[c5,c6]@6 [e5,e6]@5 ~ [c5,c6]@4", Y: "[f5,f6] ~@7", Z: "~@10 [c6,c7] ~ [b5,b6]@2 [a5,a6]@2", AA: "[c6,c7]@3 ~@13",
  AB: "[d5,d6] [f#5,f#6]", AC: "[a5,a6]@6 [d6,d7]@3 ~ [a5,a6] ~ [b5,b6] [c6,c7] [a5,a6] ~", AD: "[d6,d7] ~@15",
  AE: "~@10 [b5,b6] ~ [a5,a6]@2 [g5,g6]@2", AF: "[b5,b6] ~@7", AG: "[c6,c7] ~@7", AH: "[d5,d6]@8 [f#5,f#6]@7 ~",
  AI: "[a5,a6]@8 [d6,d7]@7 ~", AJ: "[f#5,f#6] ~ [f#5,f#6] ~ [f#5,f#6] ~ [f#5,f#6] ~",
  AK: "~@2 [b5,b6] ~ [b5,b6]@2 [a5,a6] ~ [a5,a6]@2 [g5,g6] ~ [g5,g6]@2 [f#5,f#6] ~", AL: "[e5,e6]@11 ~@5",
  AM: "[c5,c6]", AN: "[b4,b5]", AO: "[a4,a5]@5 ~ [c#5,c#6]@3 ~@3 [a4,a5]@3 ~", AP: "[f#4,f#5]@3 ~", AQ: "[e5,e6]@5 ~@3",
  AR: "[d5,d6]@6 [f#5,f#6]@5 ~ [d5,d6]@4", AS: "[g5,g6] ~@7", AT: "[[g1,g2]@11 ~]/3",
  AU: "~ [d4,d5] ~@2 [e4,e5] ~@2 [f#4,f#5] ~ [g4,g5] ~@2 [a4,a5] ~@3", AV: "[g5,g6] ~@3", AW: "[g4,g5]",
})).s("gm_brass_section").gain(0.4).pan(0.2)

// other · lead 2 sawtooth · "EFFECTEN"
const lead_2_sawtooth = note(`<
  ~@8 A B C D E F G H I J K L M N O P ~ Q ~ R ~ S T U V W@2 X@2 Y Z AA AB A B C D E F G H I J K L M N O P ~ Q ~ R ~ S T
  U V W@2 X@2 Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR ~ AS ~ AT ~ AU AV AW AX AY@2 AZ@2 BA BB BC BD
  ~@21
>`.pickRestart({
  A: "c5@4 ~@2 c5@3 ~ c5@2 a4@2 c5@2", B: "d5@4 a4 ~ a4@4 g4@2 f4@4", C: "c5@5 ~ c5@3 ~ c5@2 a4 ~ c5@2",
  D: "d5@3 ~ a#4 ~ a#4@3 ~ a4@2 g4@4", E: "d5@5 ~ d5@3 ~ d5@2 c#5 ~ d5@2", F: "a#4@3 ~ a#4@2 a#4@4 a4 ~ g4@4",
  G: "g4@3 ~ a4@3 ~ a#4@3 ~ c5@4", H: "d5@2 c5 ~ a#4@2 d5@4 c5@5 ~", I: "c5@4 ~@2 c5@3 ~ c5@2 a4 ~ c5@2",
  J: "d5@3 ~ a4 ~ a4@4 g4@2 f4@3 ~", K: "c5@5 ~ c5@3 ~ c5@2 a4@2 c5@2", L: "d5@4 a#4 ~ a#4@3 ~ a4@2 g4@4",
  M: "d5@5 ~ d5@3 ~ d5@2 c#5@2 d5@2", N: "a#4@4 a#4 ~ a#4@4 a4@2 g4@4", O: "g4@3 ~ a4@3 ~ a#4@4 c5@3 ~",
  P: "d5 c5 a#4 d5@2 c5@3", Q: "f5@7 ~ d5@4 c5@2 f5@2", R: "f5@4 d5@2 c5 a4", S: "a#4@6 d5@5 ~ d5@4",
  T: "d5@2 c5 a4@2 g4 f4@2", U: "g4@3 e5@3 d5@2", V: "c5@5 ~@11", W: "[f5@4 d5@2 c5 f5@2 ~@7]/2",
  X: "[f5@4 d5@2 c5 a4@2 ~@7]/2", Y: "a#4@6 d5@6 f5@3 ~", Z: "f5@3 c5@3 ~@2", AA: "a4@3 a4@3 g4@2", AB: "f4 ~@3",
  AC: "d5@4 ~@2 d5@3 ~ d5@2 b4@2 d5@2", AD: "e5@4 b4 ~ b4@4 a4@2 g4@4", AE: "d5@5 ~ d5@3 ~ d5@2 b4 ~ d5@2",
  AF: "e5@3 ~ c5 ~ c5@3 ~ b4@2 a4@4", AG: "e5@5 ~ e5@3 ~ e5@2 d#5 ~ e5@2", AH: "c5@3 ~ c5@2 c5@4 b4 ~ a4@4",
  AI: "a4@3 ~ b4@3 ~ c5@3 ~ d5@4", AJ: "e5@2 d5 ~ c5@2 e5@4 d5@5 ~", AK: "d5@4 ~@2 d5@3 ~ d5@2 b4 ~ d5@2",
  AL: "e5@3 ~ b4 ~ b4@4 a4@2 g4@3 ~", AM: "d5@5 ~ d5@3 ~ d5@2 b4@2 d5@2", AN: "e5@4 c5 ~ c5@3 ~ b4@2 a4@4",
  AO: "e5@5 ~ e5@3 ~ e5@2 d#5@2 e5@2", AP: "c5@4 c5 ~ c5@4 b4@2 a4@4", AQ: "a4@3 ~ b4@3 ~ c5@4 d5@3 ~",
  AR: "e5 d5 c5 e5@2 d5@3", AS: "g5@7 ~ e5@4 d5@2 g5@2", AT: "g5@4 e5@2 d5 b4", AU: "c5@6 e5@5 ~ e5@4",
  AV: "e5@2 d5 b4@2 a4 g4@2", AW: "a4@3 f#5@3 e5@2", AX: "d5@5 ~@11", AY: "[g5@4 e5@2 d5 g5@2 ~@7]/2",
  AZ: "[g5@4 e5@2 d5 b4@2 ~@7]/2", BA: "c5@6 e5@6 g5@3 ~", BB: "g5@3 d5@3 ~@2", BC: "b4@3 b4@3 a4@2", BD: "g4 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.4).pan(0.9)

// other · french horn · "EFFECTEN"
const french_horn = note("<~@107 A@3 ~@18>".pickRestart({
  A: "[g3@47 ~]/3",
})).s("gm_french_horn").gain(0.4).pan(0.9)

// other · reed organ · "EFFECTEN"
const reed_organ = note("<~@111 A ~ B ~ C D E F G@2 H@2 I J K L@2>".pickRestart({
  A: "g5@7 ~ e5@4 d5@2 g5@2", B: "g5@4 e5@2 d5 b4", C: "c5@6 e5@5 ~ e5@4", D: "e5@2 d5 b4@2 a4 g4@2",
  E: "a4@3 f#5@3 e5@2", F: "d5@5 ~@11", G: "[g5@4 e5@2 d5 g5@2 ~@7]/2", H: "[g5@4 e5@2 d5 b4@2 ~@7]/2",
  I: "c5@6 e5@6 g5@3 ~", J: "g5@3 d5@3 ~@2", K: "b4@3 b4@3 a4@2", L: "[g4@31 ~]/2",
})).s("gm_reed_organ").gain(0.4).pan(0.9)

// other · lead 1 square · "EFFECTEN"
const lead_1_square = note("<~@42 A ~ B ~ C ~@3 D ~@3 C ~@20 E ~ F ~ G ~@3 H ~@3 G ~@40>".pickRestart({
  A: "~@10 d5 f5 a5 f5 d5 a5", B: "~@10 a#5 d6 f6 d6 a#5 d6", C: "~@10 g5 a#5 d6 a#5 g5 d6",
  D: "~@10 f5 a5 c6 a5 f5 c6", E: "~@10 e5 g5 b5 g5 e5 b5", F: "~@10 c6 e6 g6 e6 c6 e6", G: "~@10 a5 c6 e6 c6 a5 e6",
  H: "~@10 g5 b5 d6 b5 g5 d6",
})).s("gm_lead_1_square").gain(0.3).pan(0.2)

// other · string ensemble 2 · "EFFECTEN"
const string_ensemble_2 = note("<~@111 A@2 B@2 C A D E A@2 B@2 C A F A G>".pickRestart({
  A: "g4 b4 d5 b4 g5 d5 b4 d5 g4 b4 d5 b4 g5 d5 b4 d5", B: "e4 g4 b4 g4 e5 b4 g4 b4 e4 g4 b4 g4 e5 b4 g4 b4",
  C: "c5 e5 g5 e5 c6 g5 e5 g5 c5 e5 g5 e5 c6 g5 e5 g5", D: "a4 c#5 e5 c#5 a5 e5 c#5 e5 a4 c#5 e5 c#5 a5 e5 c#5 e5",
  E: "a4 d5 f#5 d5 a5 f#5 d5 f#5 a4 d5 f#5 d5 a5 f#5 d5 f#5", F: "f#4 a4 d5 a4 f#5 d5 a4 d5 f#4 a4 d5 a4 f#5 d5 a4 d5",
  G: "g4 ~",
})).s("gm_string_ensemble_2").gain(0.25).pan(0.2)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A@2 B@2 C D E F G F H I@2 J@2 F G F H I@2 K@3 L@5 M N O P@4 Q@5 G F H I@2 J@2 F G F H I@2 K@3 L@5 M N R P@4 S@4 T U
  V W X@2 Y@2 V U V W X@2 Z@3 AA@5 AB AC AD AE@4 AF@5 AG@2 AH AA@5 AB AC AD AE@4 AI@5
>`.pickRestart({
  A: "[c4,f4,a4]/2", B: "[[d4,f4,a4]@31 ~]/2", C: "[a#3,d4,f4]", D: "[c4,f4,a4]@15 ~", E: "[c4,e4,g4]@15 ~",
  F: "[f4,f5]", G: "[d4,d5]", H: "[a#3,a#4]@3 [a3,a4]", I: "[g3,g4]/2", J: "[c4,c5]/2", K: "[[c4,c5]@17 ~@7]/3",
  L: "[c4@31 ~@33 a#4@16, a4@63 ~@17, f4@21 ~@11 d4@47 ~]/5", M: "[c4,a4]@15 ~", N: "[d4,g4,b4]@15 ~",
  O: "[c4,e4,a#4], b3 ~@15", P: "[[c4,f4] [d4,f4], a4@63 ~]/4",
  Q: "[[d4,a#4]@15 ~ a4@15 ~ [e4,a#4]@15 ~ f4@16 [f4,f5]@16, f4@31 ~@17 a4@20 ~@12, ~@4 c4@13 ~@3]/5", R: "[c4,e4,a#4]",
  S: "[[d4,a#4]@15 ~ a4@14 ~@2 [e4,a#4]@13 ~@3 [f4,a4]@6 ~@2 [d4,f#4,a4]@6 ~@2, f4@31 ~@33, ~ c4@3]/4", T: "g5, g4 ~@3",
  U: "[e4,e5]", V: "[g4,g5]", W: "[c4,c5]@3 [b3,b4]", X: "[a3,a4]/2", Y: "[d4,d5]/2", Z: "[[d4,d5]@17 ~@7]/3",
  AA: "[d4@31 ~@33 c5@16, b4@63 ~@17, g4@21 ~@11 e4@47 ~]/5", AB: "[d4,b4]@15 ~", AC: "[e4,a4,c#5]@15 ~",
  AD: "[d4,f#4,c5]", AE: "[[d4,g4] [e4,g4], b4@63 ~]/4",
  AF: "[[e4,c5]@15 ~ b4@15 ~ [f#4,c5]@15 ~ [g4,b4]@12 ~@4 [g3,g4] ~ [g3,g4] ~@2 [d3,d4] [e3,e4] [g3,g4] ~ [a3,a4] ~ [b3,b4] ~@4, g4@31 ~@49, ~@4 d4@13 ~@3]/5", // C F#dim G D E G A B
  AG: "[g3,g4] ~ [g3,g4] ~@2 [d3,d4] [e3,e4] [g3,g4] ~ [a3,a4] ~ [b3,b4] ~@4", // G D E G A B
  AH: "~ [d3,d4] ~@2 [e3,e4] ~@2 [f#3,f#4] ~ [g3,g4] ~@2 [a3,a4] ~@3", // D E F# G A
  AI: "[[e4,c5]@15 ~ b4@15 ~ [f#4,c5]@15 ~ [g3,g4,b4]@24 ~@8, g4@31 ~@49, ~@4 d4@13 ~@3]/5", // C F#dim G
})).s("gm_string_ensemble_1").gain(0.35).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[x!4] ~@7 [x!4]!99 [x!2]!3 [~ x ~@2 x ~@2 x ~ x ~@2 x ~@3] [x!4]!16 ~>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!102 ~ [~ x ~ x]!15 [~ x ~@2] ~>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~ B C D ~ E F ~@7 C ~@7 C G ~@7 A ~@7 G ~@7 C ~@7 C G ~@7 A ~@7 G ~@7 C ~@7 C G ~@7 A ~@7 G ~@3 H ~@17
>`.pickRestart({
  A: "~@12 x!4", B: "~@5 x ~@8 x!2", C: "~@7 x", D: "~@12 x!2 ~ x", E: "~@6 x ~@3 x ~ x ~ x!2", F: "~@10 x ~ x!2 ~ x",
  G: "~@12 x ~ x!2", H: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@3",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@16 ~ B@16 A@16 ~ B@16 A@16 ~ B@16 ~@21>".pickRestart({
  A: "x!8", B: "x!16",
})).gain(0.25)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A@4 ~@7 A ~ A ~ A ~@20 A ~@7 A ~ A ~ A ~@20 A ~@7 A ~ A ~ A ~@19 A ~@21
>`.pickRestart({
  A: "x",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct(`<
  A ~ B ~ A ~ C D ~@7 A ~@7 A@2 ~@7 A ~@7 A ~@7 A ~@7 A@2 ~@7 A ~@7 A ~@7 A ~@7 A@2 ~@7 A ~@7 A ~@3 E ~@17
>`.pickRestart({
  A: "~ x", B: "~@7 x!4 ~@2 x ~@2", C: "~@8 x!2 ~@6", D: "x!2 ~@6 x ~@7", E: "~ x ~@14",
})).gain(0.3)

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

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@107 [x ~ x ~@5 x!2 ~ x ~@4] [x!2 ~ x ~@4 x!2 ~ x ~@4]!2 x ~@17>").gain(0.65)

// drums · congas
const congas = s("conga:18").struct("<~@107 [~@2 x!2 ~@2 x!2]!3 ~@18>").gain(0.79)

stack(
  bass, brass_section, lead_2_sawtooth, french_horn, reed_organ, lead_1_square, string_ensemble_2, string_ensemble_1,
  kick, snare, low_tom, hihat, mid_tom, crash, high_tom, bongos, bongos_2, congas
)

More by Hasselhoff David