Strudelify

Mooi was die tijd

Corry Konings

KeyE majorTempo115 bpm
0:00/0:00
// Mooi was die tijd — Corry Konings
// 115 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 6/4 at bar 6, 4/4 at bar 8) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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(`<
  ~@5 A@3 B A B@2 A C@3 D B E F G H A@2 B@4 I C I@2 A J F G K B@2 C@2 I@2 G F G L B@3 M A B@2 A C@3 D B E F G H A@2 B@4
  I C I@2 A J F G K B@2 C@2 I@2 G F G L B N F@2 O A P Q C@4 G F@2 R A S F@2 T U A@2 V W@2
>`.pickRestart({
  A: "e2@5 ~ e2@2 ~@2 e2@2 b1@2 c#2@2", B: "e2@2 ~ e2 ~ e2 b1 c#2", C: "a1@5 ~ a1@2 ~@2 a1@2 e1@2 f#1@2",
  D: "a1@5 ~ a1@2 ~@2 a1@2 b1@2 c#2@2", E: "e2@2 ~@2 e2@3 ~ d#2@3 ~ c#2@3 ~", F: "b1@5 ~ b1@2 ~@2 b1@2 f#1@2 g#1@2",
  G: "b1@2 ~ b1 ~ b1 f#1 g#1", H: "b1@2 ~@2 b1@4 c#2@4 d#2@3 ~", I: "a1@2 ~ a1 ~ a1 e1 f#1", J: "e2 ~ e2@2 d#2@2 c#2@2",
  K: "b1@2 ~ b1 ~ b1 c#2 d#2", L: "b1@5 ~ b1@2 ~@2 b1@2 d#2@4", M: "e2 c#2 d2 d#2", N: "e2@4 e2@3 ~ d#2@3 ~ c#2@3 ~",
  O: "b1@5 ~ b1@6 d#2@4", P: "e1@2 ~ e1 g#1@2 b1@2, f#1 ~@15", Q: "e2@7 ~", R: "b1@5 ~ b1@3 ~ b1@2 d#2@4",
  S: "e2 ~@3 e2@3 ~ d#2@4 c#2@3 ~", T: "b1@5 ~ b1@2 d#2@4 f#2@4", U: "b1@15 ~", V: "e1@4 ~@2 e1@3 ~ e1@2 e1@2 e1@2",
  W: "[e1@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.3)

// chords · pan flute
const pan_flute = note(`<
  A B C D@5 ~ E@8 F@2 G H I@3 ~@10 J@5 K@3 L M@2 N@2 O@4 P@8 F@2 G H I@3 ~@10 Q@5 K@3 R@3 S@2 T@2 ~@20 U V W X@2
>`.pickRestart({
  A: "~@8 [b4,e5,g#5]@3 ~ [b4,e5,g#5] ~ [b4,e5,g#5]@2", // E
  B: "~@2 [b4,e5,g#5] ~ [b4,e5,g#5]@2 ~@2 [b4,e5,g#5]@2 ~@2 [b4,e5,g#5] ~ [b4,e5,g#5]@2", // E
  C: "~@2 [b4,e5,g#5] ~ [b4,e5,g#5]@2 ~@2 [d5,f#5,a5]@2 ~@2 [d5,f#5,a5]@2 ~@2", // E D
  D: "[[a4,d5,e5] ~ [a4,c#5,e5]@3 ~ [b4,e5,g#5]@64 ~@10]/5", // Asus4 A E
  E: "[~@8 [g#4,b4]@3 ~ [a4,c#5]@2 [g#4,b4]@21 ~ [c#5,e5]@3 ~ [c#5,e5]@3 ~ [c#5,e5] ~ [c#5,e5]@7 ~ [b4,d#5] ~ [b4,d#5]@3 ~ [c#5,e5]@2 [b4,d#5]@4 [a4,c#5]@33 ~ [c#5,e5]@3 ~ [c#5,e5]@3 ~ [c#5,e5]@2 [c#5,f#5]@13 ~ c#5@2 [a4,c#5]@2, ~@124 e5 ~@3]/8", // G#m A G#m C#m B C#m B A …
  F: "[~@2 [g#4,b4]@29 ~]/2", G: "~@4 [b4,d#5]@3 ~ [b4,d#5]@3 ~ [b4,d#5] ~ [b4,d#5]@2",
  H: "~@2 [a4,c#5]@7 ~ [a4,c#5]@3 [g#4,b4]@3", I: "[[a4,c#5]@4 [g#4,b4]@8 [f#4,a4]@3 [e4,g#4]@32 ~]/3",
  J: "[[d#4,a4]@11 ~ [d#4,f#4]@2 [b3,d#4]@25 ~ [c#4,e4]@4 [d#4,f#4]@3 ~ b3@7 ~ [b3,g#4]@3 ~ [b3,g#4]@2 [b3,g#4]@4 [d4,b4]@9 g#4@2 ~ f#4@2, ~@47 g#4@7 ~@23 d4@2 ~]/5", // D#dim D#m B C#m D#m E G
  K: "[e4@4 a3@19 ~ [a3,c#4]@4 [b3,d#4]@2 [c#4,e4]@9 ~ [c#4,e4]@2 [c#4,e4]@3 ~ [c#4,e4]@2, c#4@23 ~@25]/3", // A B C#m
  L: "~@2 [c#4,a4]@8 [a3,c#4]@2 ~ [a3,c#4]@2 ~", M: "[[a3,c#4]@3 [a3,b3]@20 ~ [a4,b4]@4 [a4,c#5]@2 [a4,d#5]@2]/2",
  N: "[~@2 [a4,d#5]@3 ~ d#5@2 [a4,d#5]@4 [a4,e5]@2 [b4,g#5]@7 ~ [a4,f#5]@4 [a4,f#5]@4 [g#4,e5]@2, ~@6 a4 ~@25]/2", // Adim A5 E D C#m
  O: "[~ [g#4,e5]@61 ~@2]/4", // C#m
  P: "[~@8 [g#4,b4]@3 ~ [a4,c#5]@2 [g#4,b4]@21 ~ [c#5,e5]@3 ~ [c#5,e5]@3 ~ [c#5,e5] ~ [c#5,e5]@7 ~ [b4,d#5] ~ [b4,d#5]@3 ~ [c#5,e5]@2 [b4,d#5]@4 [a4,c#5]@33 ~ [c#5,e5]@3 ~ [c#5,e5]@3 ~ [c#5,e5]@2 [d#5,f#5]@13 ~ c#5@2 [a4,c#5]@2, ~@124 e5 ~@3]/8", // G#m A G#m C#m B C#m B A …
  Q: "[[d#4,a4]@11 ~ [d#4,f#4]@2 [b3,d#4]@25 ~ [c#4,e4]@4 [d#4,f#4]@3 ~ b3@7 ~ [b3,g#4]@3 ~ [b3,g#4]@2 [b3,g#4]@4 [d4,b4]@9 g#4@2 [d4,f#4]@3, ~@47 g#4@7 ~@26]/5", // D#dim D#m B C#m D#m E G D
  R: "[~@2 [c#4,a4]@8 [a3,c#4]@2 ~ [a3,c#4]@2 ~ a3@3 [a3,b3]@20 ~ [a4,b4]@4 [a4,c#5]@2 [a4,d#5]@2, ~@15 c#4@4 ~@29]/3", // F#m A Asus2 A Adim
  S: "[~@2 [a4,d#5]@3 ~ d#5@2 [a4,d#5]@4 [a4,e5]@2 [b4,g#5]@7 [a4,f#5]@4 ~ [a4,f#5]@4 [g#4,e5]@2, ~@6 a4 ~@25]/2", // Adim A5 E D C#m
  T: "[~ [g#4,e5]@17 ~@14]/2", U: "[b4,e5,g#5]@3 ~ [b4,e5,g#5] ~ [b4,e5,g#5]@3 ~ [b4,e5,g#5] ~ [b4,e5,g#5]@2 ~@2",
  V: "[b4,e5,g#5]@2 ~@2 [b4,e5,g#5] ~ [b4,e5,g#5]@2 ~@2 [b4,e5,g#5] ~ [b4,e5,g#5]@2 ~@2", // E
  W: "[d5,f#5,a5]@2 ~@2 [d5,f#5,a5]@2 ~@2 [a4,d5,e5] ~ [a4,c#5,e5]@5 ~", X: "[[b4,e5,g#5]@3 ~]/2",
})).s("gm_pan_flute").gain(0.14).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@24 A@8 B@2 C@4 D E@4 F@4 G ~@18 H@8 B@2 C@4 I J@8 G K L@6 M@3 N@5 O P Q R@3 S@2 T U@2
>`.pickRestart({
  A: "[[b4,g#5]@8 [b4,g#5]@4 [c#5,a5]@2 [b4,g#5]@22 [e5,c#6]@4 [e5,c#6]@4 [e5,c#6]@2 [e5,c#6]@7 [d#5,b5]@2 ~ [d#5,b5]@4 [e5,c#6]@2 [d#5,b5]@4 [c#5,a5]@34 [e5,c#6]@4 [e5,c#6]@4 [e5,c#6]@2 [a5,c#6]@14 [e5,c#6]@2 [c#5,a5]@2]/8", // E F#m E C#m G#m C#m G#m F#m …
  B: "[~ [b4,g#5]@9 b4@2 e5@2 [b4,g#5]@2]/2", // E
  C: "[[d#5,a5]@12 [d#5,f#5]@2 [b4,d#5]@26 [c#5,e5]@4 [d#5,f#5]@3 ~ b4@8 [b4,g#5]@4 [b4,g#5]@2 [b4,g#5]@2, ~@47 g#5@8 ~@9]/4", // D#dim D#m B C#m D#m E
  D: "~@2 [d5,b5]@9 g#5@2 ~ f#5@2, ~@13 d5@2 ~", // G
  E: "[[c#5,e5]@4 a4@19 ~ [a4,c#5]@4 [b4,d#5]@2 [c#5,e5]@10 [c#5,e5]@2 [c#5,e5]@3 ~ [c#5,e5]@4 [c#5,a5]@8 [a4,c#5]@3 [a4,c#5]@3]/4", // C#m A B C#m F#m A
  F: "[[a4,c#5]@3 [a4,b4]@21 [a4,b4]@4 [a4,c#5]@2 [a4,d#5]@4 [a4,d#5]@4 [a4,d#5]@2 [a4,d#5]@4 [a4,e5]@2 [b4,g#5]@7 ~ [a4,f#5]@4 [a4,f#5]@4 [g#4,e5]@2]/4", // A Asus2 A Adim A5 E D C#m
  G: "~ [g#4,e5]@15", // C#m
  H: "[[b4,g#5]@8 [b4,g#5]@4 [c#5,a5]@2 [b4,g#5]@22 [e5,c#6]@4 [e5,c#6]@4 [e5,c#6]@2 [e5,c#6]@7 [d#5,b5]@2 ~ b5@4 [e5,c#6]@2 [d#5,b5]@4 [c#5,a5]@34 [e5,c#6]@4 [e5,c#6]@4 [e5,c#6]@2 [a5,c#6]@14 [e5,c#6]@2 [c#5,a5]@2, ~@55 d#5@4 ~@69]/8", // E F#m E C#m G#m C#m G#m F#m …
  I: "~@2 [d5,b5]@9 g#5@2 [d5,f#5]@2 ~", // G D
  J: "[[c#5,e5]@4 a4@19 ~ [a4,c#5]@4 [b4,d#5]@2 [c#5,e5]@10 [c#5,e5]@2 [c#5,e5]@3 ~ [c#5,e5]@4 [c#5,a5]@8 [a4,c#5]@3 [a4,c#5]@2 ~ a4@3 [a4,b4]@21 [a4,b4]@4 [a4,c#5]@2 [a4,d#5]@4 [a4,d#5]@4 [a4,d#5]@2 [a4,d#5]@4 [a4,e5]@2 [b4,g#5]@7 [a4,f#5]@4 ~ [a4,f#5]@4 [g#4,e5]@2, ~@63 c#5@3 ~@62]/8", // C#m A B C#m F#m A Asus2 A …
  K: "~ b4 e5 [b4,g#5]", // E
  L: "[[d#5,a5]@11 [d#5,f#5]@3 [b4,d#5]@25 ~ [c#5,e5]@3 ~ d#5@3 [b4,g#5]@8 ~ [b4,g#5]@3 [b4,g#5]@3 [b4,g#5]@4 [d5,b5]@20 ~@2 [d5,g#5]@4 [d5,f#5]@2 [c#5,e5]@2, ~@43 f#5@4 ~@49]/6", // D#dim D#m B C#m E G Ddim D …
  M: "[~@2 [a4,c#5]@21 ~ [a4,c#5]@3 ~ d#5@2 [c#5,e5]@9 ~ [c#5,e5]@2 [c#5,e5]@3 ~ [c#5,e5]@2, ~@27 b4@2 ~@19]/3", // A C#m
  N: "[~@2 [c#5,a5]@10 [a4,c#5]@2 [a4,c#5]@4 [a4,b4]@21 ~ [a4,b4]@4 [a4,c#5]@2 [a4,d#5]@4 [a4,d#5]@3 ~ d#5@2 [a4,d#5]@4 [a4,e5]@2 [b4,g#5]@8 [a4,f#5]@3 ~ [a4,f#5]@4 e5@2, ~@54 a4 ~@23 g#4 ~]/5", // F#m A Asus2 A Adim A5 E D
  O: "[g#4,e5]", P: "~ [g#4,e5] [f#4,d#5] [e4,c#5]", Q: "[d#4,b4]@7 ~ [d#4,b4]@3 ~ c#5@2 [f#4,d#5]@2, ~@11 e4@2 ~@3",
  R: "[~@2 [f#4,d#5]@3 ~ [f#4,d#5] ~ [f#4,d#5]@4 [g#4,e5]@2 [b4,g#5]@7 ~ [a4,f#5]@3 ~ [a4,f#5]@16 ~@2 [g#4,e5]@3 ~]/3", // D#m C#m E D C#m
  S: "[g#4,e5]/2", T: "[f#4,d5] [e4,c#5]", U: "[[g#4,e5]@3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.25)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@5 A@8 B@3 C A@2 D@2 E A@6 B@3 C A F D@2 E A G B@3 C H I H J A@8 B@3 C A@2 D@2 E A@6 B@3 C A F D@2 E A G B@3 C H I H
  J A K D@2 E A G L B@3 C H I H J A F H I H M N O P Q@2
>`.pickRestart({
  A: "[g#3,b3,e4]@2 ~ [g#3,b3,e4]@2 ~@3", B: "[a3,c#4,e4]@2 ~ [a3,c#4,e4]@2 ~@3",
  C: "[a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@5 ~@5", D: "[f#3,b3,d#4]@2 ~ [f#3,b3,d#4]@2 ~@3",
  E: "[f#3,b3,d#4]@4 ~@2 [f#3,b3,d#4]@5 ~@5", F: "[g#3,b3,e4] ~@7", G: "[g#3,d4,e4]@2 ~ [g#3,d4,e4]@2 ~@3",
  H: "[f#3,b3,d#4]@4 ~@2 [f#3,b3,d#4]@3 ~@7", I: "[f#3,b3,d#4]@5 ~ [f#3,b3,d#4]@3 ~@7",
  J: "[f#3,b3,d#4]@5 ~ [f#3,b3,d#4]@2 ~@8", K: "[g#3,b3,e4] ~@3", L: "[g#3,d4,e4] ~@15", M: "[f#3,b3,d#4] ~@7",
  N: "[g#3,b3,e4]@5 ~ [g#3,b3,e4]@6 ~@4", O: "[g#3,b3,e4]@5 ~ [g#3,b3,e4]@7 ~@3",
  P: "[f#3,a3,d4]@7 ~ [e3,a3,c#4]@6 ~@2", Q: "[[g#3,b3,e4]@3 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.4)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@5 A B@3 A B@3 C D@3 A B E F@2 A B A B@3 C D@3 A G E F@2 A B C D@3 E F@3 A B@3 A B@3 C D@3 A B E F@2 A B A B@3 C D@3
  A G E F@2 A B C D@3 E F@3 A G E F@2 A B G C D@3 E F@3 A G E F@2 H I J K L@2
>`.pickRestart({
  A: "[e2,b2,e3] ~ [e2,b2,e3] ~@3 e3!2 [e2,b2,e3] ~ [e2,b2,e3] ~@5", // E5
  B: "[e2,b2,e3] ~ [e2,b2,e3] ~@3 e3!2 [e2,b2,e3] ~ [e2,b2,e3] ~@3 e3!2", // E5
  C: "[a2,e3,a3] ~ [a2,e3,a3] ~@3 a3!2 [a2,e3,a3] ~ [a2,e3,a3] ~@5", // A5
  D: "[a2,e3,a3] ~ [a2,e3,a3] ~@3 a3!2 [a2,e3,a3] ~ [a2,e3,a3] ~@3 a3!2", // A5
  E: "[b2,f#3,b3] ~ [b2,f#3,b3] ~@3 b3!2 [b2,f#3,b3] ~ [b2,f#3,b3] ~@5", // B5
  F: "[b2,f#3,b3] ~ [b2,f#3,b3] ~@3 b3!2 [b2,f#3,b3] ~ [b2,f#3,b3] ~@3 b3!2", G: "[e2,b2,e3] ~@15",
  H: "[b2,f#3,b3] ~@15", I: "e3@2 [e2,b2,e3] ~@3 e3!2 [e2,b2,e3] ~ [e2,b2,e3] ~@3 e3!2",
  J: "[e2,b2,e3] ~ [e2,b2,e3] ~@3 e3!2 [e2,b2,e3] ~ [e2,b2,e3]@2 ~@2 e3!2", // E5
  K: "[d3,f#3,a3] ~ [d3,f#3,a3]@2 ~@2 f#3 ~ [a2,e3,a3] ~ [a2,e3,a3]@4 ~@2", L: "[[e2,b2] ~, g#3@3 ~]/2",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@5 A@28 B A@56 B A@5 C A@9 B A@3 C A@3 C ~>".pickRestart({
  A: "x!2", B: "x!4", C: "x",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@5 A@3 B A@14 C A@9 ~ A@16 B A@14 C A@24 ~ A@5 ~ A@9 ~ A@3 ~ A@3 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~@3 x!2", C: "~@2 x ~@2 x!3",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@4 [~@15 x] ~@85 [~@7 x] ~@15 [~@7 x] ~@9>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@5 A@28 ~ B@17 A@24 ~ B@14 ~ B@5 ~ B@9 ~ B@3 ~ B@3 ~@2>".pickRestart({
  A: "x ~ x ~ x!4", B: "x ~ x ~ x!3 ~",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@5 A@28 ~ A@41 ~ A@14 ~ A@5 ~ A@9 ~ A@3 ~ A@3 ~@2>".pickRestart({
  A: "~ x ~ x ~@4",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 [~@7 x] ~@85 [~@3 x] ~@15 [~@3 x] ~@9>").gain(0.4)

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

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

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@3 A ~@14 A ~@9 A ~@16 A ~@14 A ~@24 A ~@4 A ~@8 A ~ A ~@2 A@2 ~@2 A ~
>`.pickRestart({
  A: "x",
})).gain(0.25)

stack(
  bass, pan_flute, string_ensemble_1, acoustic_guitar_nylon, electric_guitar_muted, kick, snare, low_tom, hihat,
  hihat_soft, mid_tom, open_hat, high_tom, crash
)

More by Corry Konings