Strudelify

Painter Man

Creation

KeyC majorTempo126 bpm
0:00/0:00
// Painter Man — Creation
// 126 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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
const bass = note(`<
  ~@2 A B C D E B C D F G H I J G H K L M N@2 O P N@2 Q R B C D E B C D F G H I J G H K L M N@2 O P N@2 Q R B C D F G H
  I J G H S T U V W G H I J G H K L M N@2 O P N@2 X Y Z AA AB AC N@2 AD AE B AF AG AH@2 AI
>`.pickRestart({
  A: "~@2 c2 a#1 c2 a#1 f1@2", B: "g1@2 g1@2 c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", C: "c2 ~ c2 ~ c2@4 ~@2 c2@2 f2@4",
  D: "d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2 ~", E: "d#2 ~ d#2 ~ c2@2 a#1@2 c2@2 a#1@2 f1@4",
  F: "d#2 ~ d#2 ~ c2@2 c2 ~@3 d#2 e2 f2@2 f2 ~", G: "f1@4 g1@2 g1 ~@3 g1@2 g1@2 g1@2",
  H: "a#1@2 b1@2 c2@2 c2 ~@3 d#2 e2 f2@2 f2 ~", I: "f1@4 g1@2 g1 ~@3 g1@2 a1@2 g1@2",
  J: "a1@2 g1@2 c2@2 c2 ~@3 d#2 e2 f2@2 f2 ~", K: "d#2@4 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  L: "d2@4 g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", M: "g2 ~ g2 ~ c2@4 ~@2 c2@2 c2@4",
  N: "[~@2 c2@2 f2@5 ~ f2 ~ c2 ~ c2@4 c2 ~ c2 ~ c2@4 c2 ~ c2 ~ c2@2]/2", O: "~@2 c2@2 g1 ~ g1@4 g1 ~@3 a#1@2, ~@3 a#2",
  P: "~ b1 c2@2 ~ c2 c2@2, b2 ~@3", Q: "~@2 c2@2 g1 ~ g1@3 ~ g1 ~ c2@4", R: "g2@2 c2 a#1 c2 a#1 f1@2",
  S: "f1@2 g1 g2 g1 g2 g1 g2", T: "g1 g2 f2 d2 g2 f2 d2 g2", U: "f2@2 d2@2 g1@2 g2 ~@3 g2@2 f2@2 d2@2",
  V: "g2 f2 g1 g2 f2 d2 g2 f2", W: "d2@2 g2@2 c2@2 c2 ~@3 d#2 e2 f2@2 f2 ~", X: "~@2 c2@2 g1 ~ g1@3 ~ g1@2 c2@2 g1@2",
  Y: "a#1@2 b1@2 c3@2 ~@2 c3 ~@3 c3@2 ~@2", Z: "c3 ~@3 f2 ~@3 f2@2 ~@2 c3 ~@3", AA: "c3 ~@3 c3@2 ~@2 c3 ~@3 c3 ~@3",
  AB: "c3 ~@3 g2 ~@3 g2 ~@3 c3 ~ g1@2", AC: "a#1 b1 c2@2 ~ c2 c2@2", AD: "~@2 c2@2 g1 ~ g1@4 g1 ~ c2@4",
  AE: "g1 a#1 c2 a#1 c2 a#1 f1@2", AF: "c2 ~ c2 ~@3 a#1@2 c2@2 a#1@2 f1@4, ~ c2 ~@2",
  AG: "g1@4 c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", AH: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", AI: "c2 ~ c2 ~@13",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · english horn
const english_horn = note(`<
  ~@10 A B C D E F G H@2 I@3 J I@3 K ~@8 A B C D E F G H@2 L@3 K M@3 J ~@15 A B C D E F G H@2 I@3 K M@3 J N@3 O I@3 K
  ~@7
>`.pickRestart({
  A: "~@4 d4@3 ~ e4 ~ e4@4 f4 ~", B: "d4!2 ~ c4@2 ~@3", C: "~@2 g3@2 d4@4 e4@2 f4@3 ~ d4@2", D: "~ d4 g3 g3@3 ~@2",
  E: "~@4 d4@3 ~ e4 ~ e4@3 ~ d4@2", F: "~@2 d4 ~ d4 ~ c4@6 ~@4", G: "~@2 g3@2 d4@3 ~ e4@2 f4@3 ~ d4@2",
  H: "[~ d4@2 g3@2 ~ g3@14 ~@12]/2",
  I: "[~@4 [g3,c4,e4]@3 ~ [c4,g4] ~ [c4,e4,g4]@9 ~ [c4,f4,a4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4]@9 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4]@4 [a3,d4,f4] ~, ~@8 e4@2 ~@16 a4 ~@21]/3", // C C5 C F C Dm
  J: "[g3,c4,e4]@3 ~ [g3,d4,f4]@3 ~ [g3,b3,f4] ~ [g3,c4,e4]@6, d4 ~@3 e4 ~@11", // C G7 C
  K: "[g3,c4,e4]@3 ~ [g3,d4,f4]@3 ~ [g3,b3] ~ [g3,c4,e4]@6, d4 ~@3 e4 ~@3 f4@2 ~@6", // C G7 G C
  L: "[~@4 [g3,c4,e4]@3 ~ [c4,e4]@2 [c4,e4,g4]@9 ~ [c4,f4,a4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4]@9 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4]@4 [a3,d4,f4] ~, ~@8 g4 ~@17 a4 ~@21]/3", // C F C Dm
  M: "[~@4 [g3,c4,e4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4]@9 ~ [c4,f4,a4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4]@9 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4]@4 [a3,d4,f4] ~, ~@26 a4 ~@21]/3", // C F C Dm
  N: "[~@4 [g3,c4,e4] ~ [c4,e4,g4]@2 ~@2 [c4,e4,g4]@9 ~ [c4,f4] ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@9 ~ [c4,e4,g4] ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@4 [d4,f4]@2, ~@10 a4 ~@13]/3", // C F5 C Dm
  O: "[c4,e4]@2 ~@2 [g3,d4,f4] ~ [g3,b3,f4]@2 ~@2 [g3,c4,e4]@6", // C G7 C
})).s("gm_english_horn").gain(0.45)

// bass · synth bass 2
const bass_2 = note("<~@2 A B@2 C@2 B@2 D@2 ~@16 A B@2 C@2 B@2 D@2 ~@16 A B@2 D@2 ~@35 A E@2 F@4>".pickRestart({
  A: "~@2 c3 a#2 c3 a#2 f2@2", B: "[g2@4 c3@16 c3@5 ~ c3@2 f3@4]/2", C: "[d#3@9 ~ c3 a#2 c3 a#2 f2@2]/2",
  D: "[d#3@9 ~@7]/2", E: "[g2@2 c3@8 ~ a#2 c3 a#2 f2@2, ~@5 c3 ~@2]/2", F: "[g2@2 c3@25 ~@5]/4",
})).s("gm_synth_bass_2").gain(0.5)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@4 A B@2 C D E ~@8 F G@4 H@4 ~@2 A B@2 C D E I@7 J@2 G@4 H@4 ~ C D E K@7 L@4 M@7 J@2 G@4 H@4 N@4 H@4 O P@2 Q@4
>`.pickRestart({
  A: "~@4 [c4,c5]@5 ~ [c4,c5]@2 [f4,f5]@4", B: "[[d#4,d#5]@19 ~@13]/2", C: "~@4 [c5,c6] ~@5 [c5,c6] ~@5",
  D: "[c5,c6] ~@3 [c4,c5]@4 ~@2 [c4,c5]@2 [f4,f5]@4", E: "[d#4,d#5]", F: "~@4 g3 f#3 g3 a3 b3 a3 b3 c4 d4 c4 d4 e4",
  G: "[f4 e4 f4 f#4 g4@3 ~ g4@9 ~@3 [f4,c5,f5]@7 ~ [c4,g4,c5]@24 [g3,g4]@8 [a#3,f4,a#4]@4, ~@4 [c4,c5]@15 ~@33 d4@6 ~@6]/4", // F5 C5 G A#5 C
  H: "[[b3,f#4,b4]@4 [c4,g4,c5]@16 [f4,c5,f5]@7 ~ [c4,g4,c5]@24 [g3,d4,g4]@8 [c4,g4,c5]@4]/4", // B5 C5 F5 C5 G5 C5
  I: "[~@4 [e5,g5]@8 [f5,a5]@7 ~ [d5,g5,b5]@15 ~ g5@8 [f5,a5]@8 [d5,g5,b5]@15 ~ [e5,g5]@8 [f5,a5]@7 ~ [d5,b5]@15 ~ e5@7 ~ [f5,a5]@4, ~@4 c6@15 ~@17 c6@15 ~@17 c6@15 ~@17 c6@12, ~@18 e5@3 ~@21 g5@12 ~@2]/7", // Em F G F G Em F G …
  J: "[~@4 [d5,g5,b5]@16 g3 f#3 g3 a3 b3 a3 b3 c4 d4 c4 d4 e4]/2", // G
  K: "[~@4 c4@8 [f4,a4]@7 ~ [d4,b4]@15 ~ c4@8 [f4,a4]@7 ~ [d4,b4]@15 ~ c5@8 [f4,a4]@8 [d4,b4]@15 ~@9 [f4,a4]@4, ~@2 c5@8 ~@8 c5@8 ~@8 c4@7 ~@9 [c4,c5]@6, ~@4 g4@6 ~@10 g4@23 ~@9 g4@22 ~@10 g4@22 ~@6]/7", // F G F G F G F C
  L: "[~@4 [g5,d6,g6]@48 g3 f#3 g3 a3 b3 a3 b3 c4 d4 c4 d4 e4]/4", // G5
  M: "[f4 e4 f4 f#4 [g4,e5,g5]@8 [f5,a5]@7 ~ [d5,g5,b5]@15 ~ [e5,g5]@8 [f5,a5]@8 [d5,g5,b5]@15 ~ [e5,g5]@8 [f5,a5]@7 ~ [d5,b5]@15 ~ e5@7 ~ [f5,a5]@4, ~@4 c6@15 ~@17 c6@15 ~@17 c6@15 ~ g5@24 ~@4, ~@25 c6@3]/7", // C F G Em F G Em F …
  N: "[~@4 [c4,g4,c5]@16 [f4,c5,f5]@7 ~ [c4,g4,c5]@24 [g3,g4]@8 [a#3,f4,a#4]@4, ~@26 d4@3 ~@3]/4", // C5 F5 C5 G A#5
  O: "~@2 [c4,c5] [a#3,a#4] [c4,c5] [a#3,a#4] [f3,f4]@2", // C A# C A# F
  P: "[[g3,g4]@2 [c4,c5]@8 [c4,c5] [a#3,a#4] [c4,c5] [a#3,a#4] [f3,f4]@2]/2", Q: "[[g3,g4]@4 [c4,c5]@16 c4@35 ~@9]/4",
})).s("gm_string_ensemble_1").gain(0.35)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@18 A B ~@23 A B ~@21 A B ~@7 A B ~@7 C D E F G ~@10>".pickRestart({
  A: "~@4 g4 f#4 g4 a4 b4 a4 b4 c5 d5 c5 d5 e5", B: "f5 e5 f5 f#5 g5@2 ~@10",
  C: "~@6 [e6,g6,c7] ~@3 [e6,g6,c7] ~@3 [e6,g6,c7] ~", // C
  D: "~@2 [e6,g6,c7] ~@3 [f6,a6,c7] ~@3 [f6,a6,c7] ~@3 [e6,g6,c7] ~", // C F C
  E: "~@2 [e6,g6,c7] ~@3 [e6,g6,c7] ~@3 [e6,g6,c7] ~@3 [e6,g6,c7] ~", // C
  F: "~@2 [e6,g6,c7] ~@3 [d6,g6,b6] ~@3 [d6,g6,b6] ~@3 [e6,g6,c7] ~", G: "~@2 [e6,g6,c7] ~@13",
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.8)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@2 A B@2 C@2 B@2 D@2 E F E F E F G H I J K L M J N O P B@2 C@2 B@2 D@2 E F E F E F G H I J K L M J N O P B@2 Q R@2 S
  T U V@2 W X Y Z AA E F E F E F G H I J K L M J N O AB AC AD AE AF AG AH AI AJ AK@2 AL@2 ~@2
>`.pickRestart({
  A: "~@2 c4 a#3 c4 a#3 f3@2", B: "[g3@4 c4@15 ~ c4@5 ~ c4@2 f4@4, ~@28 d#4 ~@3]/2",
  C: "[d#4@9 ~ c4 a#3 c4 a#3 f3@2]/2", D: "[d#4@19 ~ [c4,g4]@2 [c4,g4] ~@3 [c4,g4]!2 [f3,c4] ~ [f3,c4] ~]/2",
  E: "~@2 [f3,g3,c4] [f3,c4] [g3,d4]@2 [g3,d4] ~@3 g3!2 [a#3,b3]@2 d4 ~", // Fsus2 F5 G5 Bmaj7
  F: "a#3 a3 g3 ~ [c4,g4]@2 [c4,g4] ~@3 [c4,g4]!2 [f3,c4] ~ [f3,c4] ~", // C5 F5
  G: "~@2 [f3,g3,c4] [f3,c4] [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~", // Fsus2 F5 G5
  H: "[g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~", // G5
  I: "[g3,d4] ~ [g3,d4] ~ [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2", // G5 C
  J: "[e4,g4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [e4,g4,c5] ~", // C F C
  K: "[e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@3 ~ [e4,g4,c5]@3 ~", // C
  L: "[e4,g4,c5]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,f4,a#4] ~ [d4,f4,a#4] ~", // C G A#
  M: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2", // B C
  N: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", O: "[e4,g4,c5] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [e4,g4,c5] ~",
  P: "[f4,g4,a4] [c4,d4,e4] [a3,b3] ~ c4@2 a#3@2 c4@2 a#3@2 f3@4", Q: "d#4@10 ~@4 g4 a4",
  R: "[c5 d5 c5@2 d5@6 f5@3 ~ d5@4 c5@2 d5@2 g4@9 ~]/2",
  S: "~@4 [c6,e6]@3 [g5,c6,e6]!2 ~ [a5,c6,f6]@4 [g5,c6,e6] ~, ~ g5@2 ~@5", // C F C
  T: "~@2 c5 ~ [g5,b5]@7 ~@3 g4 a4, ~@3 d5@9 ~@4", U: "c5 d5 c5 ~ d5@2 f5@2 f5@2 d5@2 f5@2 f5@2",
  V: "[d5@3 c5 d5@2 g4@2 g4@2 g4@8 ~@2 d6@2 g6@2 g6@2 d6@2 g6@2 g6@2]/2",
  W: "d6@2 c6@2 c6@2 [d6,g6] ~ [d6,g6]@2 c6@2 [d6,g6] ~ [d6,g6] ~", // G5
  X: "c6@2 [d6,g6] ~ [d6,g6]@2 c6@2 [d6,g6]@2 [d6,g6]@2 c6@4", // G5
  Y: "a#5 [g5,a5] [c6,e6] [b5,d6] [g5,a5] [c6,e6] [b5,d6] g5", // Gsus2 C Bm Gsus2 C Bm
  Z: "[c6,e6] [b5,d6] g5 [c6,e6] [b5,d6] g5 [c6,e6] [b5,d6]", // C Bm C Bm C Bm
  AA: "g5@2 f5@2 [c4,g4]@2 [c4,g4] ~@3 [c4,g4]!2 [f3,c4] ~ [f3,c4] ~", // C5 F5
  AB: "[f4,g4,a4] [c4,d4,e4] [a3,b3] ~@3 [e5,g5,c6] ~@3 [e5,g5,c6] ~@3 [e5,g5,c6] ~", // F C Asus2 C
  AC: "~@2 [e5,g5,c6] ~@3 [f5,a5,c6] ~@3 [f5,a5,c6] ~@3 [e5,g5,c6] ~", // C F C
  AD: "~@2 [e5,g5,c6] ~@3 [e5,g5,c6] ~@3 [e5,g5,c6] ~@3 [e5,g5,c6] ~", // C
  AE: "~@2 [e5,g5,c6] ~@3 [d5,g5,b5] ~@3 [d5,g5,b5] ~@3 [d5,f5,a#5] ~", // C G A#
  AF: "~@2 [d#5,f#5,b5] ~ [e5,g5,c6] ~@3 [e5,g5,c6]@2 ~@2 [e5,g5,c6]@2 ~@2", // B C
  AG: "[e5,g5,c6] ~@3 [f5,a5,c6] ~@3 [f5,a5,c6] ~@3 [e5,g5,c6] ~@3", // C F C
  AH: "[e5,g5,c6] ~@3 [e5,g5,c6] ~@3 [e5,g5,c6]@2 ~@2 [e5,g5,c6]@2 ~@2", // C
  AI: "[e5,g5,c6] ~@3 [d5,g5,b5]@2 ~@2 [d5,g5,b5]@2 ~@2 [e5,g5,c6]@2 ~@2", // C G C
  AJ: "[g5,a5] [c5,d5,e5,f5] [f4,g4,a4,b4] e4 c4@2 a#3@2 c4@2 a#3@2 f3@4, ~@12 g3 ~@3", // Gsus2 Dm7 G7
  AK: "[g3@2 c4@7 ~ c4 a#3 c4 a#3 f3@2]/2", AL: "[g3@2 c4@9 ~@5]/2",
})).s("gm_distortion_guitar").gain(0.45)

// drums · kick
const kick = s("bd").struct("<[~ x!3] [x!4]!91 [x!3 ~ x ~ x ~] [x!4]!2 [x!2 ~@2] ~@3>").gain(0.5).pan(0.6)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@34 [~@6 x!2] ~@60 [~@3 x ~@12] ~@3>").gain(0.5).pan(0.6)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A B A ~@2 B ~@6 C ~ B ~@2 D B ~@2 C ~ A ~ A B A ~@2 B ~@6 C ~ B ~@2 D B ~@2 C ~ A ~ A ~ A C A E A C A B ~ C
  B ~@6 C ~ B ~@2 D B ~@2 C ~@4 B ~ C ~@2 A ~@5
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~ x ~@6", D: "~@3 x ~ x ~@2", E: "~ x ~ x ~@4",
})).gain(0.4).pan(0.6)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@3 A ~@3 B ~@4 A ~@3 B ~@3 A ~@3 A ~@3 A ~@3 B ~@4 A ~@3 B ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A ~@3 B ~@4 A ~@3 B ~@3
  A ~@3 A ~@3 B ~@2 C ~@3
>`.pickRestart({
  A: "~ x ~@2", B: "~ x!2 ~@5", C: "x!2 ~@2",
})).gain(0.45).pan(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@95 [~ x ~@6] ~@3>").gain(0.5).pan(0.6)

stack(
  bass, english_horn, bass_2, string_ensemble_1, acoustic_guitar_nylon, distortion_guitar, kick, snare, hihat, mid_tom,
  open_hat, crash, high_tom
)