Strudelify

Smoorverliefd

Doe Maar

KeyA minorTempo166 bpm
0:00/0:00
// Smoorverliefd — Doe Maar
// 166 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 "#60's EP" epiano1 (copy of ch 3 "Clean Gtr" electric guitar clean)
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(166/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger · "Fing.Bass"
const bass = note(`<
  A B@7 C D@2 E F G B H D@2 E F G B C I J K L I J K F M N O P O P B@3 C D@2 E F G B H D@2 E F G B C I J K L I J K F M N
  O P O P B@2 Q R B@2 Q R B@2 Q R I J K L I J K F M N O P O P B@2 Q R B@2 Q R B@2 Q R B@2 Q R ~@16 B@2 Q R B@2 Q S
>`.pickRestart({
  A: "~@14 a1 ~", B: "e2 ~ a1 ~ a1@3 ~ a1@3 ~ e1 ~ a1 ~", C: "e2 ~ a1 ~ a1@3 ~ a1@3 ~@5",
  D: "~@2 c2 ~ a#1@3 ~ f1@4 ~@2 c2 ~", E: "~@2 c2 ~ a#1@3 ~ f1@4 ~@4", F: "e2 ~ g#2@3 ~ b2 ~ e3@3 ~ d3@3 ~",
  G: "~@2 f2 ~ f2 ~ f2 ~ g2@3 ~ g2@3 ~", H: "e2 ~ a1 ~ a1@3 ~ a1@3 ~ a#1 ~ c2 ~", I: "~@2 c2 ~ c2 ~ c2 ~ c2@3 ~ c2@3 ~",
  J: "g1@3 ~ g1@3 ~ g1@4 ~@4", K: "~@2 a#2 ~ a#2 ~ a#2 ~ f2@3 ~ f2@3 ~", L: "c2 ~ c2 ~ g1@8 ~@4",
  M: "~@2 f2 ~ f2 ~ f2 ~ c3@3 ~ c3@3 ~", N: "~@2 g2 ~ g2 ~ g2 ~ d3@3 ~ d3@3 ~", O: "c2 ~ c2 ~ c2 ~ c2 ~ g2@3 ~ g2@3 ~",
  P: "c2@3 ~ c2@3 ~ c2@4 ~@4", Q: "e2 ~ e1 ~ e1@3 ~ e1@3 ~ e1 ~ a1 ~", R: "e2 ~ a1 ~ a1@3 ~ e2 ~ a1 ~ a1@3 ~",
  S: "e2 ~ a1 ~ a1@3 ~ e2 ~ a1 ~ a1 ~@3",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · electric guitar clean · "Clean Gtr"
const electric_guitar_clean = note(`<
  ~@5 A@4 B@3 C D A@2 B@3 C D A@2 E F G H E F G C I J K@3 L A@4 B@3 C D A@2 B@3 C D A@2 E F G H E F G C I J K@3 L K F C
  M K F C M K F C M E F G H E F G C I J K@3 L K F C M K F C M K F C M K F C M ~@16 K F C M K F C N
>`.pickRestart({
  A: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Am
  B: "~@2 [e4,g4,c5] ~@3 [d4,f4,a#4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // C A# F
  C: "~@2 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~", // E
  D: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // F G
  E: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", // C
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  G: "~@2 [d4,f4,a#4] ~@3 [d4,f4,a#4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // A# F
  H: "~@2 [e4,g4,c5] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // C G
  I: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // F
  J: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [g4,b4,d5] ~@3 [g4,b4,d5] ~", // G
  K: "~@2 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~", // Am
  L: "~@2 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~@5", // Am
  M: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // Am G
  N: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [d4,g4,b4] ~@5", // Am G
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.3)

// bass · lead 2 sawtooth · "Saw Wave"
const bass_2 = note(`<
  ~@33 A B A B ~@28 A B A B ~@22 A B A B C D E F C D E F C D E F C D E F G ~@15 H D E F C D E I
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~ g2@2 ~@2 g2@3 ~", B: "c2@3 ~ c2@2 ~@2 c2@4 ~@4", C: "e2 ~ a1 ~ a1@2 ~@2 a1@2 ~@2 e1 ~ a1 ~",
  D: "e2 ~ a1 ~ a1@2 ~@2 a1@4 ~@2 a1 ~", E: "e2 ~ e1 ~ e1@2 ~@2 e1@2 ~@2 e1 ~ a1 ~",
  F: "e2 ~ a1 ~ a1@2 ~@2 e2 ~ a1 ~ a1@2 ~@2", G: "e2 ~@15", H: "~@2 a1 ~ a1@2 ~@2 a1@2 ~@2 e1 ~ a1 ~",
  I: "e2 ~ a1 ~ a1@2 ~@2 e2 ~ a1 ~ a1 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.25)

// other · distortion guitar · "Dist.Gtr."
const distortion_guitar = note("<~@69 A B C D A B C E A B C F ~@54>".pickRestart({
  A: "e4 a3 a3@2 a3@2 g3 a3", B: "c4@2 a3@2 a3@4 a3@7 ~", C: "e4 g#3 g#3@2 g#3@2 f#3 g#3",
  D: "a3@2 b3@2 ~@2 c4@2 ~ c4@2 b3 a3@4, ~@4 b3 ~@3",
  E: "[a3,c4] [b3,d4] [c4,e4] [d4,f4] [e4,a4] [g4,b4] [a4,c5] [g4,b4]", // Am Bm C Dm A5 G Am G
  F: "[c4,f4] [a3,c4] [a3,c4]@2 [d4,g4] [b3,d4] [b3,d4]@2", // F5 Am G5 Bm
})).s("gm_distortion_guitar").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@5 [x!4]!130>").gain(0.48)

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

// drums · snare
const snare = s("sd").struct("<~@4 A B ~@30 C ~@31 D ~@25 E ~@40>".pickRestart({
  A: "~@14 x!2", B: "x!2 ~@6", C: "~@3 x", D: "x ~ x!7 ~ x ~ x ~@3", E: "~@12 x!3 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B@18 C B@3 C B@7 D B@3 C B@15 C B@3 C B@7 E B@13 C B@3 C B@7 D B@15 F G B@14 D G B@6 D
>`.pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!7 ~", D: "x!4 ~@4", E: "x", F: "x!6 ~@2", G: "~ x!7",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A ~@13 B ~@3 A ~@9 C ~@3 D ~@6 A ~@6 A ~@9 B ~@7 B ~@7 B ~@9 B ~@11 A ~@5 A ~@26
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@8 x!3 ~@5", D: "~@14 x!2",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@111 x ~@14 [~@7 x] ~@7 [~@3 x]>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A ~@3 A ~@27 A ~@3 A ~@21 A ~@3 A ~@48>".pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@110 [~@12 x!3 ~] ~@15 [~@8 x!5 ~@3] ~@7 [~@4 x!2 ~@2]>").gain(0.4)

// drums · splash
const splash = s("cr").struct("<~@36 A ~@31 A ~@25 B ~@32 C ~@7>".pickRestart({
  A: "~@3 x", B: "~ x", C: "x",
})).gain(0.72)

stack(
  bass, electric_guitar_clean, bass_2, distortion_guitar, kick, rim, snare, hihat, low_tom, mid_tom, open_hat, high_tom,
  splash
)