Strudelify

Er staat een paard in de gang

Andre van Duin

KeyB♭ majorTempo120 bpm
0:00/0:00
// Er staat een paard in de gang — Andre van Duin
// 120 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "TUBA" tuba (copy of ch 2 "ACOU BASS" acoustic bass)
// note: Full arrangement: all 86 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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L E F G H I M N O P Q R S C D E F G H I J K L E F G H I M N O P Q R S C D E F G H I J K L E F G
  H I M N O P Q R S C D E F G H I J K L E F G H I T U V
>`.pickRestart({
  A: "bb1 ~@7 bb1 ~@7", B: "f2 ~@3 c2 ~@3 f2 ~@7", C: "bb1@7 ~ c2@7 ~", D: "d2@3 ~ eb2 ~ bb1 ~",
  E: "eb2 ~ bb1 ~ eb2 ~ bb1 ~", F: "f2 ~ c2 ~ bb1 ~ f2 ~", G: "bb1 ~ f2 ~ bb1 ~ f2 ~", H: "eb2 ~ d2 ~ c2 ~ f2 ~",
  I: "c2 ~ f2 ~ c2 ~ f2 ~", J: "d2 ~ db2 ~ eb2 ~ bb1 ~", K: "d2 ~ f2 ~ bb2 ~ d2 ~", L: "eb2 ~ f2 ~ eb2 ~ bb1 ~",
  M: "c2 ~ f2 ~ bb1 ~ f2 ~", N: "bb2 ~ f2 ~ bb2 ~ f2 ~", O: "c3@2 ~@2 f2@2 ~@2 bb2 ~ ab2 ~ g2 ~ f2 ~",
  P: "eb2 ~@3 bb1 ~@3 eb2 ~@3 bb1 ~@3", Q: "f2 ~@3 bb1 ~@3 f2 ~@3 bb1 ~@3", R: "e2 ~@3 g2 ~@3 f2 ~@3 bb1 ~@3",
  S: "c2 ~@3 e2 ~@3 f2 ~@7", T: "c2@2 ~@2 f2@2 ~@2 bb1 ~@3 f2 ~@3", U: "eb2 ~@3 g2 ~@3 bb1 ~@3 f2 ~@3",
  V: "bb2 ~@3 bb1 ~@11",
})).s("gm_acoustic_bass").gain(0.24)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B C D@2 E@2 F@2 G H I@2 E@2 J@4 K ~@4 C D@2 E@2 F@2 G H I@2 E@2 J@4 K ~@4 C D@2 E@2 F@2 G H I@2 E@2 J@4 K ~@4 C D@2
  E@2 F@2 G H I@2 E@2 L@3 M@2
>`.pickRestart({
  A: "[bb3,d4,f4]", B: "[a3,c4,f4]@7 ~", C: "[bb3,d4] [c4,eb4]", D: "[[d4,f4] [bb3,eb4,g4]@3]/2",
  E: "[[a3,c4,f4] [bb3,d4,f4]@3]/2", F: "[[f3,bb3,d4]@8 ~ a3@19 [eb4,g4]@4, ~@2 [f3,c4,eb4]@5 ~]/2",
  G: "[d4,f4] [db4,e4] [bb3,eb4,g4]@2", H: "[bb3,d4,f4]@5 ~ [bb3,d4]@2", I: "[[c4,eb4] [d4,f4] [bb3,eb4,g4]@6]/2",
  J: "[[f3,bb3,d4] [f3,a3,c4,eb4]@4 [f3,bb3,d4]@2 ~]/4", K: "[a3,c4,f4] [bb3,d4,f4]",
  L: "[[f3,bb3,d4]@8 [f3,a3,c4,eb4]@32 [f3,bb3,d4]@7 ~]/3", M: "[[bb3,eb4,g4]@7 ~ [bb3,d4,f4]@13 ~@11]/2",
})).s("gm_synth_strings_1").gain(0.18).pan(0.6)

// other · trumpet
const trumpet = note(`<
  A B ~@6 C D E F G H I J K L M N ~ O P Q ~@6 C D E F G H I J K L M N ~ O P Q ~@6 C D E F G H I J K L M N ~ O P Q ~@6 C
  D E F G H I J K R S T
>`.pickRestart({
  A: "bb4 ~ bb4!3 ~ f4 ~ d5 ~ d5 ~ f5@2 ~@2", B: "f5 ~ f5!3 ~ f5 ~ f5@2 ~@6", C: "~@3 g4", D: "f4 e4 g4@2",
  E: "f4@2 ~ bb4", F: "c5 d5 eb5 ~", G: "~@2 c5!2 bb4 ~ bb4 ~ g4@7 ~", H: "a4 g4 f4@2",
  I: "~@2 bb4!2 f4 ~ bb4 ~ d4@5 ~@3", J: "g4 f4 eb4@2", K: "~@2 f4 ~ a4 ~ c5 ~ f5@3 ~ eb5@4", L: "d5@4 c5@4 bb4@5 ~@3",
  M: "bb4 ~ bb4!2 f4@3 ~ bb4 ~ bb4 ~ f4@2 ~@2", N: "c5 ~ c5!2 bb4 ~ a4 ~ bb4 ~@7", O: "~@10 bb4!3 ~@3",
  P: "~@2 g4 ~@3 g4 ~@3 bb4!3 ~ bb4 ~", Q: "~@2 c5!3 ~ c5 ~ a4 ~@7", R: "d5@4 c5@4 bb4 ~ bb4!3 ~ bb4 ~",
  S: "eb5 ~ eb5!3 ~ eb5 ~ bb5@8", T: "~@2 bb5 ~@5",
})).s("gm_trumpet").gain(0.5).pan(0.7)

// other · trombone
const trombone = note(`<
  A B ~@6 C D E F ~ G ~ H C I ~@3 J K L ~@6 C D E F ~ G ~ H C I ~@3 J K L ~@6 C D E F ~ G ~ H C I ~@3 J K L ~@6 C D E F
  ~ G ~ H C M N O
>`.pickRestart({
  A: "bb4 ~ bb4!3 ~ f4 ~ d5 ~ d5 ~ f5@2 ~@2", B: "f5 ~ f5!3 ~ f5 ~ f5@2 ~@6", C: "~@3 eb4", D: "d4 db4 eb4@2",
  E: "d4@9 ~@3 d4@4", F: "eb4 f4 g4 ~", G: "f4@4 eb4@4 d4@7 ~", H: "eb4@3 ~ d4@4 c4@8", I: "d4@4 c4@4 bb3@5 ~@3",
  J: "~@10 d4!3 ~@3", K: "e3@6 e3 ~ f3@5 ~@3", L: "e3@5 ~ g3 ~ f3 ~@7", M: "d4@4 c4@4 d4 ~ d4!3 ~ d4 ~",
  N: "g4 ~ g4!3 ~ g4 ~ f4@8", O: "~@2 f4 ~@5",
})).s("gm_trombone").gain(0.42).pan(0.2)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~ A ~@2 B ~ C ~ D E F ~ B ~ C ~ D G H I ~@6 B ~ C ~ D E F ~ B ~ C ~ D G H I ~@6 B ~ C ~ D E F ~ B ~ C ~ D G H I ~@6 B
  ~ C ~ D E F ~ B ~ C ~ D J K L
>`.pickRestart({
  A: "f3@3 c3@4 f3@3 ~@6", B: "~@2 c4!2 bb3 ~ bb3 ~ g3@4 ~@4", C: "~@2 bb3!2 f3 ~ bb3 ~ d3@4 ~@4",
  D: "~@2 f3!2 a3 ~ c4 ~ f4@2 ~@2 eb4@4", E: "d4@4 db4@4 eb4@7 ~", F: "d4@3 ~@5", G: "d4@4 c4@4 bb3@3 ~@5",
  H: "bb3@3 f3@4 bb3@4 ~@5", I: "c4@2 ~@2 f3@3 bb3@4 ~@5", J: "d4@4 c4@4 bb3 ~ bb3!3 ~ bb3 ~",
  K: "eb4 ~ eb4!3 ~ eb4 ~ d4@8", L: "~@2 d4 ~@5",
})).s("gm_synth_brass_1").gain(0.34).pan(0.4)

// chords · accordion
const accordion = note("<~@20 A B C D ~@18 A B C D ~@18 A B C D ~@15 E F G>".pickRestart({
  A: "[eb4,g4,bb4] ~ [eb4,g4]!2 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~ eb4 ~ [eb4,g4,bb4] ~", // Eb
  B: "~@2 [d4,f4]!2 [d4,f4,bb4] ~ [d4,f4] ~ d4 ~ [d4,f4,bb4] ~@3 [d4,f4,bb4] ~", // Dm Bb Dm Bb
  C: "d4 ~ [c4,e4,g4]!3 ~ [c4,e4,g4] ~@3 [d4,f4,bb4] ~ d4 ~ [d4,f4,bb4] ~", // C Bb
  D: "~@2 [c4,e4,g4]!3 ~ [c4,e4,g4] ~ [c4,f4,a4] ~@7", E: "~@8 [d4,f4] ~ [d4,f4]!3 ~ [d4,f4] ~",
  F: "[eb4,g4] ~ [eb4,g4]!3 ~ [eb4,g4] ~ [f4,bb4]@8", G: "~@2 [f4,bb4] ~@5",
})).s("gm_accordion").gain(0.25).pan(0.4)

// chords · electric guitar muted · "+FUNK GTR"
const electric_guitar_muted = note(`<
  ~@3 A B C D E F G H A B C D E F I D I J K L M ~ A B C D E F G H A B C D E F I D I J K L M ~ A B C D E F G H A B C D E
  F I D I J K L M ~ A B C D E F G H A B C D E F N ~@2
>`.pickRestart({
  A: "~@10 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", B: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~",
  C: "~@2 [a4,c5,f5] ~@3 [a4,c5,f5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // F Bb
  D: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // Bb
  E: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", // Bb F
  F: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", // F
  G: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", H: "~@2 [f4,bb4,d5] ~ f4 ~ [f4,bb4,d5]!3 ~@7",
  I: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // F Bb
  J: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [eb4,gb4,bb4] ~@3 [eb4,gb4,bb4] ~", // Eb Ebm
  K: "~@2 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~", // Bb
  L: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~", // C Bb
  M: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~ [c4,d4,f4,a4] ~@7", N: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@9",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.7)

// other · recorder
const recorder = note(`<
  ~@4 A ~ B ~ C D E ~ A ~ B ~ C F ~@8 A ~ B ~ C D E ~ A ~ B ~ C F ~@8 A ~ B ~ C D E ~ A ~ B ~ C F ~@8 A ~ B ~ C D E ~ A
  ~ B ~ C G ~@2
>`.pickRestart({
  A: "~@2 c7!2 bb6 ~ bb6 ~ g6@4 ~@4", B: "~@2 bb6!2 f6 ~ bb6 ~ d6@4 ~@4", C: "~@2 f6!2 a6 ~ c7 ~ f7@2 ~@2 eb7@4",
  D: "d7@4 db7@4 eb7@7 ~", E: "d7@3 ~@5", F: "d7@4 c7@4 bb6@7 ~", G: "d7 c7 ~@2",
})).s("gm_recorder").gain(0.37).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B C@6 D C@8 E A@3 F A B C@6 D C@8 E A@3 F A B C@6 D C@8 E A@3 F A B C@6 D C@8 G
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2", D: "x ~ x!2", E: "x ~@3 x!4", F: "x ~@3 x ~@2 x!2 ~@7", G: "~ x ~@2",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  A B ~ C D@6 E F D@7 G H@2 I J ~ C D@6 E F D@7 G H@2 I J ~ C D@6 E F D@7 G H@2 I J ~ C D@6 E F D@6 K ~
>`.pickRestart({
  A: "x!4", B: "x ~ x!3 ~ x ~ x ~@7", C: "x ~ x ~ x!3 ~@5 x ~@3", D: "~ x ~ x", E: "~@4 x ~ x!3 ~@7", F: "~@3 x",
  G: "~@2 x ~ x!4", H: "~@2 x ~@3 x ~@3 x ~@3 x!2", I: "~ x ~ x ~ x ~ x", J: "~@2 x!2 ~ x!2 ~ x ~@7", K: "~ x ~@2",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@11 B ~@9 A ~@11 B ~@9 A ~@11 B ~@9 A ~@8>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 A ~@21 A ~@21 A ~@21 A ~@6 B C>".pickRestart({
  A: "~@4 x!2 ~@10", B: "~@7 x", C: "x",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~ A ~ A ~@3 A ~ A ~ A ~@9 A ~ A ~ A ~@3 A ~ A ~ A ~@9 A ~ A ~ A ~@3 A ~ A ~ A ~@9 A ~ A ~ A ~@3 A ~ A ~ A ~ B C
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@7 x", C: "~ x ~@6",
})).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@21 A ~@21 A ~@21 A ~@6 B ~>".pickRestart({
  A: "~@2 x!2 ~@12", B: "~@10 x!4 ~@2",
})).gain(0.28)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A B ~@6 B@2 ~@8 A ~@2 C A B ~@6 B@2 ~@8 A ~@2 C A B ~@6 B@2 ~@8 A ~@2 C A B ~@6 B@2 ~@7 D
>`.pickRestart({
  A: "x", B: "~ x", C: "~@3 x", D: "~ x ~@2",
})).gain(0.24)

stack(
  bass, synth_strings_1, trumpet, trombone, synth_brass_1, accordion, electric_guitar_muted, recorder, kick, snare,
  low_tom, hihat, mid_tom, open_hat, high_tom, crash
)

More by Andre van Duin