Strudelify

De oude muzikant

Ben Cramer

KeyD majorTempo192 bpm
0:00/0:00
// De oude muzikant — Ben Cramer
// 192 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 204 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(192/3)

// 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.

// chords · accordion
const accordion = note(`<
  A B C B D E A F C G H I J K L M N O A G P E Q B A R S T U V W X Y Z AA B C G AB AC AD AE AD AF AG AH AI AJ AK AL AM AN
  AD AO AP AC AQ AO AD AR AS AT AU AV AW AX AY AZ BA BB BC BD BE AX BF BG BH BI BH BI AP AC BJ BK BJ AF BL BM BN BO BP
  BQ AM AN AD AO AP AC BR AO BJ AR AS AT BS BT AW AX BU AZ BV B A G AP AC AD AE AD AO BW BX BY BZ CA CB AM AN AD AO AB
  CC BR AF AD AR AS CD BS AV AW AX CE AZ BA BB BC BD CF AX CG BG BH BI CH CI CJ CK CL CM CL CN CO CP CQ CR CS CT CU CV
  CW CX CJ CK CY CX CW CZ DA DB DC DD DE DF DG DH DI DJ DK DL DM DF DN DO DP@2 DQ@2 DR@2 DS DT DU DV
>`.pickRestart({
  A: "d5@11 f#5@5", B: "b5@11 a5@5", C: "d5@10 ~ f#5@5", D: "[d5,d6]@10 ~ f#5@5", E: "[b5,c#6]@11 a5@5",
  F: "[a5,b5]@11 a5@5", G: "b5@10 ~ a5@5", H: "[a4,c#5]@3 [a#4,d5]@2 [b4,d#5]@3 [c5,e5]@3 [c#5,f5]@2 [d5,f#5]@2 ~",
  I: "[d#5,g5]@3 [e5,g#5]@2 [f5,a5]@3 [f#5,a#5]@3 [g5,b5]@2 [g#5,c6]@2 ~", // D# E F F# G G#
  J: "[a5,c#6]@2 a5@2 ~ [a5,c#6]@2 a5@2 g5@2 a5!2 ~ g5@2, ~@4 g5@2 ~@5 c#6@2 ~@3", // A
  K: "a5@2 a5@2 g5 c#6@2 a5@2 g5@2 a5 a5@2 g5@2, c#6 ~@4 a5 ~@5 c#6@2 ~@3",
  L: "c#6@2 a5@2 ~ [a5,c#6]@2 a5@2 g5@2 a5 a5@2 g5@2, a5 ~@3 g5@2 ~@5 c#6@2 ~@3", // A
  M: "[a5,c#6]@2 a5@2 ~ [a5,c#6]@2 a5 ~ g5@2 [a5,c#6] a5@2 g5@2, ~@2 g5 ~@5", N: "~@5 c#5@2 ~ c#5@2 ~ e5@2 e5@2 ~",
  O: "[g5,b5]@11 [f#5,a5]@5", P: "[d5,d6]@11 f#5@5", Q: "[d5,b5]@11 f#5@5", R: "d5@11 c5@5", S: "b4@5 d5@5 ~ g5@5",
  T: "a5@10 ~ g5@5", U: "[e5,g5]@10 ~ [d5,g5]@5", V: "[c#5,g5]@11 [b4,g5]@5", W: "[f#5,b5]@11 [f#5,a5]@5",
  X: "[f#5,a5]", Y: "[g5,c#6]@2 a5@2 c#6 [g5,c#6]@2 a5@2 c#6@2 ~ a5@2 c#6@2, ~@11 [g5,c#6]@2 ~@3",
  Z: "[g5,c#6]@5 a5@5 ~ [g5,c#6]@5", AA: "[d5,b5]@10 ~ [f#5,a5]@5", AB: "[d4,d5]@11 f#4@5", AC: "[b4,c#5]@11 a4@5",
  AD: "d4@10 ~ f#4@5", AE: "[a4,b4]@11 a4@5", AF: "b4@11 a4@5",
  AG: "[a3,c#4]@3 [a#3,d4]@2 [b3,d#4]@2 ~ [c4,e4]@3 [c#4,f4]@2 [d4,f#4]@2 ~", // A A# B C C# D
  AH: "[d#4,g4]@2 ~ [e4,g#4]@2 [f4,a4]@3 [f#4,a#4]@3 [g4,b4]@2 [g#4,c5]@2 ~", // D# E F F# G G#
  AI: "[a4,c#5] ~ a4@2 ~ [a4,c#5]@2 a4@2 g4@2 a4 a4@2 g4@2, ~@4 g4@2 ~@5 c#5@2 ~@3", // A
  AJ: "c#5@2 a4@2 ~ a4@2 a4@2 g4@2 a4 a4@2 g4@2, a4 ~@3 g4@2 ~@10, ~@5 c#5 ~@5 c#5@2 ~@3",
  AK: "[a4,c#5]@2 a4@2 ~ c#5@2 a4@2 g4@2 a4!2 ~ g4@2, ~@2 g4 ~@5, ~@5 a4 ~@5 c#5@2 ~@3", // A
  AL: "[a4,c#5]@2 a4@2 ~ [a4,c#5]@2 a4@2 g4@2 a4 a4@2 g4@2, ~@4 g4@2 ~@5 c#5@2 ~@3", // A
  AM: "~@5 c#4@2 ~ c#4@2 ~ e4@2 e4@2 ~", AN: "[g4,b4]@11 [f#4,a4]@5", AO: "b4@10 ~ a4@5", AP: "[d4,d5]@10 ~ f#4@5",
  AQ: "[d4,b4]@10 ~ f#4@5", AR: "d4@11 c4@5", AS: "b3@5 d4@5 ~ g4@5", AT: "a4@10 ~ g4@5", AU: "[e4,g4]@11 [d4,g4]@5",
  AV: "[c#4,g4]@11 [b3,g4]@5", AW: "[f#4,b4]@11 [f#4,a4]@5", AX: "[f#4,a4]",
  AY: "[g4,c#5]@2 a4@2 c#5 [g4,c#5]@2 a4 ~ c#5@2 ~ a4 ~ c#5@2, ~@11 [g4,c#5]@2 ~@3", AZ: "[g4,c#5]@5 a4@5 ~ [g4,c#5]@5",
  BA: "f#4@2 a4@2 ~ f#4@2 a4@2 d5@2 ~ a4@2 d5@2, ~@4 d5@2 ~@5 f#4@2 ~@3", BB: "d5@5 c#5@5 ~ c5@5, f#4",
  BC: "e5@11 d5@5, b4", BD: "c#5@11 b4@5, g4", BE: "b4@11 a4@5, f#4",
  BF: "g4@2 a4@2 c#5 g4@2 a4 ~ c#5@2 ~ a4@2 c#5 ~, ~@11 g4@2 ~@3", BG: "g4@5 a4@5 ~ [g4,c#5]@5",
  BH: "[d4,d5]@11 [f#4,f#5]@5", BI: "[b4,b5]@11 [a4,a5]@5", BJ: "d4@11 f#4@5", BK: "[a4,b4]@10 ~ a4@5",
  BL: "[a3,c#4]@3 [a#3,d4]@2 [b3,d#4]@2 ~ [c4,e4]@3 [c#4,f4]@2 [d4,f#4]@3", // A A# B C C# D
  BM: "[d#4,g4]@2 ~ [e4,g#4]@2 [f4,a4]@3 [f#4,a#4]@3 [g4,b4]@2 [g#4,c5]@3", // D# E F F# G G#
  BN: "a4@2 a4@2 ~ [a4,c#5]@2 a4@2 g4@2 a4 a4@2 g4 ~, c#5 ~@3 g4@2 ~@5 c#5@2 ~@3", // A
  BO: "[a4,c#5]@2 a4@2 g4 [a4,c#5]@2 a4@2 g4@2 a4 a4@2 g4 ~, ~@11 c#5@2 ~@3", // A
  BP: "[a4,c#5]@2 a4@2 ~ [a4,c#5]@2 a4@2 g4@2 a4!2 ~ g4 ~, ~@4 g4@2 ~@5 c#5@2 ~@3", // A
  BQ: "[a4,c#5]@2 a4@2 ~ [a4,c#5]@2 a4@2 g4 ~ a4 a4@2 g4 ~, ~@4 g4@2 ~@5 c#5@2 ~@3", BR: "[d4,b4]@11 f#4@5",
  BS: "[e4,g4]@10 ~ [d4,g4]@5", BT: "[c#4,g4]@10 ~ [b3,g4]@5",
  BU: "g4@2 a4@2 c#5 [g4,c#5]@2 a4@2 c#5@2 ~ a4@2 c#5@2, c#5 ~@10 [g4,c#5]@2 ~@3", BV: "[d5,b5]@11 [f#5,a5]@5",
  BW: "[a3,c#4]@3 [a#3,d4]@2 [b3,d#4]@2 ~ [c4,e4]@2 ~ [c#4,f4]@2 [d4,f#4]@2 ~", // A A# B C C# D
  BX: "[d#4,g4]@2 ~ [e4,g#4]@2 [f4,a4]@3 [f#4,a#4]@2 ~ [g4,b4]@2 [g#4,c5]@2 ~", // D# E F F# G G#
  BY: "c#5@2 a4@2 g4 [a4,c#5]@2 a4@2 g4@2 a4 a4@2 g4@2, a4 ~@10 c#5@2 ~@3", // A
  BZ: "[a4,c#5]@2 a4@2 ~ c#5@2 a4@2 g4@2 a4 a4@2 g4@2, ~@2 g4 ~@5, ~@5 a4 ~@5 c#5@2 ~@3", // A
  CA: "[a4,c#5]@2 a4@2 g4 [a4,c#5]@2 a4@2 g4@2 a4 a4@2 g4@2, ~@11 c#5@2 ~@3", // A
  CB: "[a4,c#5]@2 a4@2 ~ [a4,c#5]@2 a4 ~ g4@2 a4 a4@2 g4@2, ~@4 g4@2 ~@5 c#5@2 ~@3", CC: "[b4,c#5]@10 ~ a4@5",
  CD: "a4@11 g4@5", CE: "[g4,c#5]@2 a4@2 c#5 [g4,c#5]@2 a4@2 c#5@2 ~ a4@2 c#5@2, ~@11 [g4,c#5]@2 ~@3",
  CF: "b4@10 ~ a4@5, f#4", CG: "g4@2 a4@2 ~ g4@2 a4@2 c#5@2 ~ a4@2 c#5@2, ~@4 c#5@2 ~@5 g4@2 ~@3",
  CH: "[a#4,d5]@3 [c5,d#5]@2 [c#5,e5]@3 [d5,f5]@2 ~ [d#5,f#5]@2 [e5,g5]@3", // A# Cm C#m Dm D#m Em
  CI: "[f5,g#5]@3 [f#5,a5]@2 a#5@2 ~ b5@2 ~ c6@2 d6@3, ~@5 g5@5 ~ a5@5", CJ: "[d#4,d#5]@11 g4@5",
  CK: "[c5,d5]@11 a#4@5", CL: "d#4@10 ~ g4@5", CM: "[a#4,c5]@10 ~ a#4@5", CN: "c5@10 ~ a#4@5",
  CO: "[a#3,d4]@2 ~ [b3,d#4]@2 [c4,e4]@3 [c#4,f4]@2 ~ [d4,f#4]@2 [d#4,g4]@3", // A# B C C# D D#
  CP: "[e4,g#4]@3 [f4,a4]@2 [f#4,a#4]@3 [g4,b4]@2 ~ [g#4,c5]@2 [a4,c#5]@3", // E F F# G G# A
  CQ: "[a#4,d5]@2 a#4@2 ~ d5@2 a#4@2 g#4@2 a#4 a#4@2 g#4@2, ~@2 g#4 ~@5, ~@5 a#4 ~@5 d5@2 ~@3", // A#
  CR: "[a#4,d5]@2 a#4@2 ~ [a#4,d5]@2 a#4@2 g#4@2 a#4!2 ~ g#4@2, ~@4 g#4@2 ~@5 d5@2 ~@3", // A#
  CS: "[a#4,d5]@2 a#4@2 ~ [a#4,d5]@2 a#4@2 g#4@2 a#4 a#4@2 g#4 ~, ~@4 g#4@2 ~@5 d5@2 ~@3", // A#
  CT: "[a#4,d5]@2 a#4@2 ~ [a#4,d5]@2 a#4 ~ g#4@2 a#4 a#4@2 g#4@2, ~@4 g#4@2 ~@5 d5@2 ~@3", // A#
  CU: "~@5 d4@3 d4@3 f4@2 f4@2 ~", CV: "[g#4,c5]@11 [g4,a#4]@5", CW: "d#4@11 g4@5", CX: "c5@11 a#4@5",
  CY: "[d#4,c5]@10 ~ g4@5", CZ: "d#4@10 ~ c#4@5", DA: "c4@5 d#4@5 ~ g#4@5", DB: "a#4@10 ~ g#4@5",
  DC: "[f4,g#4]@10 ~ [d#4,g#4]@5", DD: "[d4,g#4]@11 [c4,g#4]@5", DE: "[g4,c5]@11 [g4,a#4]@5", DF: "[g4,a#4]",
  DG: "[g#4,d5]@2 a#4@2 d5 [g#4,d5]@2 a#4@2 d5@2 ~ a#4@2 d5@2, ~@11 [g#4,d5]@2 ~@3", // G#dim
  DH: "[g#4,d5]@5 a#4@5 ~ [g#4,d5]@5", DI: "g4 ~ a#4@2 ~ g4@2 a#4@2 d#5 ~@2 a#4@2 d#5@2, ~@4 d#5@2 ~@5 g4@2 ~@3",
  DJ: "d#5@5 d5@5 ~ c#5@5, g4", DK: "f5@11 d#5@5, c5", DL: "d5@10 ~ c5@5, g#4", DM: "c5@10 ~ a#4@5, g4",
  DN: "g#4@2 a#4@2 ~ g#4@2 a#4@2 d5@2 ~ a#4@2 d5@2, ~@4 d5@2 ~@5 g#4@2 ~@3", DO: "g#4@5 a#4@5 ~ [g#4,d5]@5",
  DP: "[g#4,d5]/2", DQ: "[d#4@10 ~ g4@5 c5@11 a#4@5, d#5]/2", DR: "[d#4@11 g4@5 c5@11 a#4@5, d#5]/2",
  DS: "[d#4,a#4]@3 [e4,b4]@2 [f4,c5]@2 ~ [f#4,c#5]@3 [g4,d5]@2 [g#4,d#5]@3", // D#5 E5 F5 F#5 G5 G#5
  DT: "[a4,e5]@3 [a#4,f5]@2 [b4,f#5]@3 [c5,g5]@3 [c#5,g#5]@2 [d5,a5]@2 ~", DU: "[d#5,a#5]@3 ~@8 [f4,g#4,d5]@5",
  DV: "[d#4,g4,d#5]@5 ~@11", // D#
})).s("gm_accordion").gain(0.4)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@38 A B A B A B@2 C B C B C B D A B A B A B A E F A F@2 A@2 B C A G H@2 A@2 B@2 A B A B A B A B A B@2 C B C B C B D A
  B A B A B A E F A F@2 A@2 B C A B A I A B A B A B@2 C B C B C B D A B A B A B A E F A F@2 A@2 B C A G H@2 A@2 B@2 A B
  J K L J L J L J@2 M J M J M J N L J L J L J L O P L P@2 L@2 J M L Q R@2 L@2 J S J@2 L J L J T ~ U V
>`.pickRestart({
  A: "d2@11 ~@5", B: "a1@11 ~@5", C: "e2@11 ~@5", D: "e2@9 ~@2 a1@5", E: "d2@11 f#1@5", F: "g1@11 ~@5",
  G: "d2@5 e2@5 ~ f#2@5", H: "g2@11 ~@5", I: "a1@5 b1@5 ~ c#2@5", J: "a#1@11 ~@5", K: "a#1@8 ~@3 d2@5", L: "d#2@11 ~@5",
  M: "f2@11 ~@5", N: "f2@9 ~@2 a#1@5", O: "d#2@11 g1@5", P: "g#1@11 ~@5", Q: "d#2@5 f2@5 ~ g2@5", R: "g#2@11 ~@5",
  S: "f1@11 ~@5", T: "a#1@5 ~@11", U: "d#2@5 ~@6 a#1@4 ~", V: "d#2@5 ~@11",
})).s("gm_electric_bass_finger").gain(0.21)

// other · piano · "A.PIANO 1"
const piano = note(`<
  A B A B A B A B A B C D E D E D C D A B A B A B A B F G F G A B E D A B A B A B A B A B E D E D E D E D A B A B A B A
  B F G F G A B E D A B F G A B C D A B A B A B A B A B E D C D E D C D A B A B A B A B F G F G A B C D A B A B H B A B
  A B E D E D E D C D A B A B A B A B F G F G A B E D A B F G A B C D A B I J K L M L M L N O N O P O P O M L M L M L M
  L Q R Q R M L N O M L Q R M L P O S T U V@2 W X ~ Y Z
>`.pickRestart({
  A: "d3@5 f#3@5 ~ a3@5, d2", B: "d4@5 a3@5 ~ f#3@5", C: "c#4@5 a3@5 ~ e3@5, a2@11 ~@5", D: "a3@5 c#4@5 ~ e3@5",
  E: "c#4@5 a3@5 ~ e3@5, a2@5 ~@3", F: "g3@5 b3@5 ~ d4@5, g2", G: "g4@5 d4@5 ~ b3@5", H: "~@5 d3@4 ~@2 d3@4 ~",
  I: "a#3@5 d4@5 ~ f4@5, a#2", J: "a#4@5 f4@5 ~ d4@5", K: "~@5 d#3@4 ~@2 d#3@4 ~", L: "d#4@5 a#3@5 ~ g3@5",
  M: "d#3@5 g3@5 ~ a#3@5, d#2", N: "d4@5 a#3@5 ~ f3@5, a#2@11 ~@5", O: "a#3@5 d4@5 ~ f3@5",
  P: "d4@5 a#3@5 ~ f3@5, a#2@5 ~@3", Q: "g#3@5 c4@5 ~ d#4@5, g#2", R: "g#4@5 d#4@5 ~ c4@5", S: "[a#3,a#4]",
  T: "[a#3,f4,a#4]", U: "~@5 [g3,a#3,d#4]@3 ~@3 [g3,a#3,d#4]@2 ~@3", V: "~@5 [g3,a#3,d#4]@3 ~@3 [g3,a#3,d#4]@3 ~@2",
  W: "~@5 [g3,a#3,d#4]@2 ~@4 [g3,a#3,d#4]@2 ~@3", X: "[f3,a#3,d4]@3 ~@13", Y: "~@11 [f3,a#3,d4]@3 ~@2",
  Z: "[d#3,g3,a#3] ~@7", // D#
})).s("gm_piano").gain(0.36).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  ~@38 A B C B D E F@2 ~@8 A B C B A B G@2 H@2 I@4 A J H@2 K@2 B L M@2 ~@2 A B C N ~@12 A B C N A B O@2 H@2 I@4 ~@4 A B
  C B P Q F@2 ~@8 A B C B A B G@2 H@2 I@4 A J H@2 K@2 B L M@2 ~ R S A J T U@2 T V W@4 X Y Z@2 S A J T S B J AA AB AC S T
  AD@2 AE AF AG AC S T ~@4 AH AI AJ AK AL ~ AM AN
>`.pickRestart({
  A: "d4", B: "c#4", C: "b3", D: "d4@11 c#4@5", E: "b3@11 a3@4 ~", F: "a3/2", G: "[b3@15 ~]/2", H: "b3/2", I: "a3/4",
  J: "c4", K: "[a3@27 d4@5]/2", L: "a3@11 g3@5", M: "f#3/2", N: "a3", O: "[b3@31 ~]/2", P: "d4@10 ~ c#4@5",
  Q: "b3@10 ~ a3@4 ~", R: "~@5 c#4@5 ~ d4@5", S: "d#4", T: "a#3", U: "d#4/2", V: "a3@10 ~ a#3@5", W: "d4/4",
  X: "a#3@11 d4@5", Y: "c4@10 ~ a#3@5", Z: "[d#4@31 ~]/2", AA: "g#3", AB: "f4@11 d#4@5", AC: "d4@11 c4@5", AD: "g#3/2",
  AE: "g3", AF: "d#4@5 d4@5 ~ c#4@5", AG: "c4@11 d#4@5", AH: "d#3@10 ~ g3@5", AI: "c4@11 a#3@5", AJ: "d#3@11 g3@5",
  AK: "c4@10 ~ a#3@4 ~", AL: "a#3 ~@3", AM: "~@11 d4@4 ~", AN: "d#4 ~@7",
})).s("gm_alto_sax").gain(0.45)

// drums · kick
const kick = s("bd").struct("<x!201 ~ [x ~@10 x ~@4] x>").gain(0.64)

// drums · rim
const rim = s("rim").struct(`<
  ~@81 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@90
>`.pickRestart({
  A: "x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@115 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B@38 ~ C B@4 A ~ D A
>`.pickRestart({
  A: "x", B: "~@5 x ~@5 x ~@4", C: "~@11 x ~@4", D: "x ~@10 x ~@4",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A@39 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B ~@48
>`.pickRestart({
  A: "x ~@4 x ~@5 x ~@4", B: "x ~@4 x ~@10",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@39 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~@48
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@38 A ~@76 A ~@78 A@7 ~ B A>".pickRestart({
  A: "x", B: "x ~@10 x ~@4",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@156 x!38 ~@10>").gain(0.64)

stack(accordion, bass, piano, alto_sax, kick, rim, snare, hihat, open_hat, crash, ride)

More by Ben Cramer