Strudelify

Kaplaarzen

Dingetje

KeyD minorTempo120 bpm
0:00/0:00
// Kaplaarzen — Dingetje
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 124 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.

// other · piano · "A.PIANO 1"
const piano = note(`<
  A B C D@2 E A B C F@2 E G H I@2 ~@33 J K L M ~@4 N@8 ~@25 O@2 ~@19 P Q R S T U V W X Y T U Z
>`.pickRestart({
  A: "gb6 e6 d6 db6 d6 e6 a5@2", B: "~@2 gb6 d6 b5@2 ~@2", C: "g6@2 e6@2 db6@4 d6@2 e6@2 gb6@3 ~",
  D: "[gb6@2 e6@2 d6@2 e6@3 ~ gb6@2 b4@6 ~@6 a6@2 a6@2 a6@2 a6@2, a4@7 ~@5 g6@2 ~@8 a4@5 ~@5]/2", E: "~ a6 a5!4 ~ a5",
  F: "[gb6@2 e6@2 d6@2 e6@3 ~ gb6@2 b4@7 ~@3 a4@2 a6@2 a6@2 a6@2 a6@2, a4@5 ~@7 g6@2 ~@18]/2",
  G: "~@2 [d6,gb6]@2 a5@2 [d6,gb6]@3 ~ a5@3 ~ [db6,e6]@2", H: "a5@2 [db6,e6]@3 ~ a5@2 g5@2 a5@2 b5@2 db6@2",
  I: "[~ d6 b5 db6 d6 e6 gb6 g6@2 ~@7]/2", J: "~@4 [d7,gb7] [a6,d7] [gb6,a6] [a6,d7]",
  K: "~ a6 [e7,g7] [db7,e7] [a6,db7] e7 ~ a6", L: "[e7,g7] [a6,db7] [b6,d7] [db7,e7] d7 db7 b6 [a6,db7]",
  M: "[b6,d7] [db7,e7] [d7,gb7] [e7,g7] [d7,gb7] [db7,e7] [b6,d7] [db7,e7]", N: "~@2 [a5,d6] ~",
  O: "[~@8 gb7@2 e7@2 d7@2 db7 d7@2 d7 db7@2 b6@2 a6@2 ~@8]/2", P: "~@2 gb6 e6 d6 db6 d6 e6",
  Q: "a5@5 ~@3 gb6@2 d6@2 b5@4", R: "~@2 g6 e6 db6@2 d6 e6", S: "gb6@3 ~ gb6@2 e6@2 d6@2 e6@3 ~ gb6@2, ~@4 a4@5 ~@7",
  T: "b4@7 ~@3 a4@2 a6@2 a6@2, g6 ~@7", U: "a6!2 ~ a6 a5!4", V: "~@2 a5@3 ~ [d6,gb6]@2 a5@2 [d6,gb6]@3 ~ a5@2",
  W: "~@2 [db6,e6]@2 a5@2 [db6,e6]@3 ~ a5@2 g5@2 a5@2", X: "b5@2 db6@3 ~ d6@2 b5@2 db6@2 d6@2 e6@2",
  Y: "gb6@2 ~@2 gb6@2 e6@2 d6@2 e6@3 ~ gb6@2, ~ g6@2 ~@5, ~@4 a4@5 ~@7", Z: "~@2 a5@3 ~@11",
})).s("gm_piano").gain(0.32).pan(0.4)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@15 A@11 B C D A@8 E F G H I@3 J K I@3 J ~@3 K I@15 J K I@15 J ~@4 K I@7 L M N ~ K I@7 O ~@12
>`.pickRestart({
  A: "d2 ~@2 d2 ~@2 f2 ~@2 f2 ~@2 eb2 ~ f2 ~", B: "d2 ~@2 d2 ~@2 f2 ~@2 f2 ~@2 bb1 ~ d2 ~",
  C: "f2 ~ f2!3 ~ g2 ~ f2 ~ d2 ~ bb1 ~ bb1 ~", D: "c2@3 ~ c2 ~ c2 ~ d2@3 ~@5", E: "d2 ~@2 e2 gb2 ~@2 g2 a2 ~@3 a2 ~@3",
  F: "b2 ~@3 b2 ~@3 a2 ~@7", G: "g2 ~@2 g2!2 ~@2 g2 gb2 ~@2 gb2!2 ~@3", H: "e2 ~@3 e2 ~@3 d2 ~@2 d2 ~@2 f2 ~",
  I: "~ f2 ~@2 eb2 ~ f2 ~ d2 ~@2 d2 ~@2 f2 ~", J: "~ f2 ~@2 eb2 ~ f2 ~@9", K: "~@8 d2 ~@2 d2 ~@2 f2 ~",
  L: "~ f2 ~@2 bb1 ~ d2 ~ f2 ~ f2!3 ~ g2 ~", M: "f2 ~ d2 ~ bb1 ~ bb1 ~ c2@3 ~ c2 ~ c2 ~", N: "d2@3 ~@13",
  O: "~ f2 ~@14",
})).s("gm_synth_bass_1").gain(0.44)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@23 A@3 B C D A@8 E F G H I@3 J K I@3 J ~@3 K I@11 J ~@4 K I@7 J ~@12 K I@7 L M N ~ K I@7 O ~@12
>`.pickRestart({
  A: "[d4,gb4]@2 ~ [d4,gb4]@2 ~ [f4,a4]@2 ~ [f4,a4]@2 ~ [eb4,g4]@2 [f4,a4]@2", // D F Eb F
  B: "[d4,gb4]@2 ~ [d4,gb4]@2 ~ [f4,a4]@2 ~ [f4,a4]@2 ~ bb3@2 d4@2", C: "f4 ~ f4!3 ~ g4 ~ f4 ~ d4 ~ bb3 ~ bb3 ~",
  D: "c4@3 ~ c4 ~ c4 ~ d4@3 ~@5", E: "d4 ~@2 e4 gb4 ~@2 g4 a4 ~@3 a4 ~@3", F: "b4 ~@3 b4 ~@3 a4 ~@7",
  G: "g4 ~@2 g4!2 ~@2 g4 gb4 ~@2 gb4!2 ~@3", H: "e4 ~@3 e4 ~@3 [d4,gb4]@2 ~ [d4,gb4]@2 ~ [f4,a4]@2",
  I: "~ [f4,a4]@2 ~ [eb4,g4]@2 [f4,a4]@2 [d4,gb4]@2 ~ [d4,gb4]@2 ~ [f4,a4]@2", // F Eb F D F
  J: "~ [f4,a4]@2 ~ [eb4,g4]@2 [f4,a4]@2 ~@8", K: "~@8 [d4,gb4]@2 ~ [d4,gb4]@2 ~ [f4,a4]@2",
  L: "~ [f4,a4]@2 ~ bb3@2 d4@2 f4 ~ f4!3 ~ g4 ~", M: "f4 ~ d4 ~ bb3 ~ bb3 ~ c4@3 ~ c4 ~ c4 ~", N: "d4@3 ~@13",
  O: "~ [f4,a4]@2 ~@13", // F
})).s("gm_lead_2_sawtooth").gain(0.35)

// other · trumpet
const trumpet = note("<~@28 A ~@9 B ~@5 C ~@8 D ~@36 E F ~@9 G ~ E H ~@19>".pickRestart({
  A: "~@12 db4 ~@3", B: "~@5 e3@3", C: "~@8 f2!8", D: "~@4 gb2!3 ~@9", E: "~@8 eb2!5 ~ eb2!2",
  F: "~ eb2!2 ~ db4@2 ~@10", G: "~ db4@2 ~@13", H: "~ eb2!2 ~ eb2!4 ~@8",
})).s("gm_trumpet").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@15 A@4 B C B@3 C B D E F B C B D B C B D G H I C J C J K L J C J M N@3 O J C J P J C J P J C J F O Q O J@3 C J P J C
  J P J C J P J C J P J C J K R J C J P J C J S T O J C J C J P C J C A ~@12
>`.pickRestart({
  A: "x", B: "x ~@3 x ~@3 x ~@3 x ~@2 x", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~",
  F: "x ~ x!3 ~@3", G: "x ~@2 x!2 ~@2 x!2 ~@3 x ~@3", H: "x!3 ~", I: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3",
  J: "x ~@3 x ~@2 x!2 ~@3 x ~@3", K: "x ~ x!2 ~@4", L: "x!5 ~ x ~", M: "x ~@3 x ~ x ~ x ~@6 x", N: "x ~@7 x ~@6 x",
  O: "x ~ x!2", P: "x ~ x!3 ~ x ~", Q: "x ~@3 x ~@2 x!2 ~@7", R: "~@2 x!2", S: "x ~@3 x ~ x ~ x ~ x!3 ~ x ~",
  T: "x!5 ~ x!2",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@15 A@12 ~@2 B@7 C ~@3 D E@3 F D E@3 G H I H D E@11 F D J D K@2 E@8 K@4 E@7 L M E@4 N@3 O ~ D N P M E@6 J ~@12
>`.pickRestart({
  A: "~@2 x ~@3 x!2", B: "~@4 x ~@4 x ~@2 x ~ x ~", C: "~@4 x ~@5 x!2 ~ x!2 ~", D: "~@3 x",
  E: "~ x ~@2 x ~ x ~@5 x ~@3", F: "~ x ~@2 x ~ x ~@9", G: "~ x ~@2 x ~ x ~@5 x ~ x ~", H: "~@3 x ~@2 x ~@5 x ~ x ~",
  I: "~@3 x!4 ~@5 x ~ x ~", J: "~ x ~@2", K: "~ x ~ x", L: "~ x ~@2 x ~ x ~ x ~@2 x ~@2 x ~",
  M: "~ x!2 ~ x ~ x ~@5 x ~@3", N: "~@2 x!2 ~@2 x ~", O: "~@2 x!2 ~@4", P: "~@4 x ~ x ~ x ~@2 x!2 ~ x ~",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@15 A@12 ~@2 A@8 B@3 C D@3 E F D@3 G@4 D@12 E H E H E H D@7 I J@7 K D@3 E H D@7 E ~@3 H D@3 I J@3 L ~@12
>`.pickRestart({
  A: "~@7 x ~@2 x ~@5", B: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", C: "x!2 ~ x!3 ~@9 x", D: "~@2 x ~@12 x", E: "~ x ~@6",
  F: "~ x ~ x ~ x ~ x ~@7 x", G: "~@2 x ~@5 x!3 ~@3 x ~", H: "~@15 x", I: "~ x ~@2 x!4", J: "x!8",
  K: "x ~ x ~ x ~ x ~@8 x", L: "x!2 ~@6",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@45 [x!4 ~@4] ~@78>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@40 [~@7 x ~@8] ~@8 [~@12 x ~@2 x] [~ x ~@2 x ~ x ~@5 x ~@2 x]!3 [~ x ~@14] ~@70>")
  .gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@15 A@13 B A@8 C@3 D A@3 E F A@3 E ~@3 F A@15 E F A@7 E ~@7 F A@3 E F A@9 G A@9 H ~@12
>`.pickRestart({
  A: "x!16", B: "x!9 ~@7", C: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", D: "x!2 ~ x!3 ~ x!9", E: "x!8 ~@8", F: "~@8 x!8",
  G: "x ~@7 x!8", H: "x!5 ~@11",
})).gain(0.4)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@69
  [~@8 x ~@2 x ~@2 x!2]
  [~ x!2 ~@5]
  ~@38
  [~@8 x ~@2 x ~ x ~@2]
  [x ~ x ~@2 x ~@10]
  ~@13
>`).gain(2.56)

// drums · congas
const congas_2 = s("conga:18").struct("<~@69 [~@9 x ~@3 x ~@2] [x ~@4 x ~@10] ~@38 [~@9 x ~@4 x ~] [~@3 x ~@12] ~@13>")
  .gain(2.56)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@69
  [~@5 x!2 ~]
  [~ x ~ x ~@2 x ~@9]
  ~@38
  [~@10 x ~ x ~@2 x]
  [~ x ~@2 x ~ x ~@9]
  ~@13
>`).gain(2.56)

stack(
  piano, bass, lead_2_sawtooth, trumpet, kick, snare, hihat, low_tom, open_hat, tambourine, congas, congas_2, congas_3
)