Strudelify

Mr Blue

Rene Klijn

KeyA majorTempo96 bpm
0:00/0:00
// Mr Blue — Rene Klijn
// 96 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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.

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S T Q R S T U J K L M N V W X Y S Z AA R S T AB@3 AC AD AE AF AG AH AI AJ AK AL AM
  AN AO AP AQ AR AS AP AT AR AU AH AI AJ AK AL AM AN AO AP AV AW AX AP AQ AY AZ AB@3 AC AD AE AF BA@2
>`.pickRestart({
  A: "a4 e5 a5 ~@3 a4 e5, e3@15 ~, ~@3 a5@5, ~ a6",
  B: "~@2 a4@2 e5@2 ~@4 b4@2 e5@2 b4 ~, b2@15 ~, ~@6 b5@9 ~, ~@8 b6@7 ~",
  C: "~@3 a4 c#7@2 a4 b4, a2@15 ~, a4 a5 ~@2, ~@2 e5@5 ~@9", D: "~ d5 ~ a5 b6@2 ~@2, e3@15 ~, ~ e5 ~@2",
  E: "[e4,a4,b4]@3 ~ [e6,a6]@4, a2, ~@7 e7@8 ~", F: "e4@7 ~ [e6,b6]@8, [e2,b2], ~@7 e7@8 ~",
  G: "[e4,a4,b4]@7 ~ [e6,a6]@8, a2@15 ~, ~@7 e7@9", // Esus4 A5
  H: "~@8 b6@7 ~, e2@15 ~, [b3,e4]@4 a5@11 ~, ~@2 e5@13 ~, ~@6 e6@9 ~", I: "[a3,e4]@5 c#4!2 e4, e3@7 ~",
  J: "b3@5 b3 a3 b3, [e3,g#3]@15 ~", K: "c#4@9 ~ c#4@2 d4@2 e4@2, [e3,a3]@7 ~", L: "[e3,g#3,b3]@15 ~",
  M: "[a3,c#4]@9 ~ c#4@2 f#4@2 a3@2, [c#3,f#3]@7 ~", N: "b3@9 ~ b3@2 a3@2 b3@2, [b2,e3,g#3]@7 ~",
  O: "[a3,c#4]@11 ~ d4@2 e4@2, [c#3,f#3]@15 ~", P: "[b2,e3,g#3,b3]@15 ~", Q: "[a2,e3,a3,c#4]@7 ~ [c#2,c#3,e3,b3]@7 ~",
  R: "[f#2,a3,c#4,f#4]@6 ~@2 [e2,e3,c#4,e4,a4]@7 ~", S: "[d2,d3,a3,d4,f#4]@6 ~@2 [b2,d#4,f#4,a4,c#5]@7 ~",
  T: "[e2,e3,b3,e4,b4]@15 ~", U: "[a3,e4]@9 ~ a3@2 b3@2 c#4@2, e3@7 ~", V: "[a3,c#4]@5 c#4 d4 e4, [c#3,f#3]@15 ~",
  W: "~@6 e4 b4, [b2,e3,g#3,b3]@15 ~", X: "[a2,e3,a3,c#4,a4]@7 ~ [c#2,c#3,e3,b3]@7 ~",
  Y: "[f#2,a3,c#4,f#4]@6 ~@2 [e2,e3,c#4,e4,f#4,a4]@7 ~", Z: "[e2,e3,b3,e4]@7 b4, b4@13 ~@3",
  AA: "[e3,a3,c#4,a4]@8 [c#2,c#3,e3,b3]@7 ~, a2@3 ~@5", // A C#m7
  AB: "[[e3,a3,e4,a5]@7 e3 [e3,a3,d4,e4,d6]@7 e3 e6@5 a6 e6 [e3,c#6], ~@7 e5@8 e5@5 ~@4, ~@32 [e3,a3,c#4,e4]@13 ~@3]/3", // A5 Dsus2 C#m A
  AC: "[a3,d4,e4,a4]@7 ~, d6@3 ~", AD: "[e3,a3,e4,a5]@13 ~ [e3,e5]@2", AE: "[e3,a3,d4,e4,d6]@13 ~ [e3,e5]@2",
  AF: "e6@9 ~ a6@2 e6@2 [e3,c#6]@2, [e3,a3,c#4,e4]@7 ~", AG: "[a3,d4,e4,a4]@15 ~, d6@3 ~",
  AH: "[a3,e4,c#5]@5 a4 b4 c#5, e3@7 ~", AI: "[b3,b4]@5 b4 a4 b4, [e3,g#3]@15 ~",
  AJ: "[c#4,c#5]@9 ~ c#5@2 d5@2 e5@2, [e3,a3]@7 ~", AK: "[e3,g#3,b3]@15 ~, [g#4,b4]@3 ~",
  AL: "[a3,c#4,c#5]@9 ~ c#5@2 f#5@2 a4@2, [c#3,f#3]@7 ~", AM: "[b3,b4]@9 ~ b4@2 a4@2 b4@2, [b2,e3,g#3]@7 ~",
  AN: "[a3,c#4,c#5]@5 c#5 d5 e5, [c#3,f#3]@15 ~", AO: "[b2,e3,g#3,b3,b4]@15 ~", AP: "[e3,a3,c#4,a5]@7 ~ [e3,b3,b5]@7 ~",
  AQ: "[c#3,f#3,a3,c#6]@7 ~ [c#3,e3,a3,a5]@7 ~", AR: "[f#3,d6]@7 ~ [d#4,f#4,a4,c#5,c#6]@7 ~, [a3,d4]@5 ~@11",
  AS: "e4@5 a4 [e4,b4]@2, [e3,b3]@15 ~", AT: "[c#3,f#3,a3,c#6]@7 ~@5 b5@3 ~, ~@8 [c#3,e3,a3,a5]@7 ~",
  AU: "[e3,b3,e4]@15 ~", AV: "[c#3,f#3,a3,c#6]@7 ~ [e2,c#3,e3,a3,a5]@7 ~",
  AW: "[d2,f#3,d6]@7 ~ [d#4,f#4,a4,c#5,c#6]@7 ~, [a3,d4]@5 ~@11", AX: "b5@3 e5 b4!2 e5!2, [e2,e3,b3]@15 ~, e4@5 ~@3",
  AY: "[f#3,d6]@7 ~ [d#4,f#4,a4,c#5]@7 ~, [a3,d4]@5 ~@11", AZ: "[b3,f#4,b4]@15 ~, e4@13 ~@3",
  BA: "[a4@8 ~@13 [e6,a6]@10 ~, [a3,d4,e4]@15 a6@6 ~@11, d6@12 ~ e6@7 ~@12, ~@8 a4@9 ~@2 [a4,e5]@12 ~, ~@10 e5@7 ~@3 a5@10 ~@2]/2", // A5 Asus4 A5
})).s("gm_piano").gain(0.25)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A B C D A B C D E F E F G F H I J K L M N O P Q R S R S T U T V N W X Y N Z AA Q AB AC AD AE AF AG AH AI AJ F AJ S H F
  AK V AL AM AN AO AP AQ AR AS AJ AT AJ AU H F H V AL AM AN AO AP AQ AR AS AV AW AX AY AV AZ BA AX ~
>`.pickRestart({
  A: "a2 ~@13 e2 ~", B: "b2@12 ~@2 e2 ~", C: "c#3@8 ~@2 c#3 ~ d3 ~ e3 ~", D: "b2@15 ~", E: "a2 ~ a2 ~@12 a2",
  F: "e2 ~ e2 ~@7 e2 ~@3 e2 ~", G: "f#2 ~ f#2 ~@11 f#2 ~", H: "f#2 ~ f#2 ~@7 f#2 ~@3 f#2 ~",
  I: "e2 ~ e2 ~@7 e2 ~@2 e2 ~ e2", J: "a2 ~ a2 ~@4 c#2 c#2@2 c#2 ~@5", K: "f#2 ~ f#2 ~@6 e2!2 ~ e2@2 e1 ~",
  L: "d2 ~ d2@2 ~@3 b1!2 ~ b1@2 ~@3 d2", M: "e2 e1@2 ~ e1@2 ~ e1 e2 e1 e1@2 e1 ~ e1@2",
  N: "a2 ~ a2 ~@4 c#2!2 ~ c#2 ~@5", O: "f#2 ~ f#2 ~@5 e1!2 ~ e1!4 ~", P: "d2 ~ d2 ~@4 b1!4 ~@4 b1",
  Q: "e2 ~ e1 ~@4 e2!2 ~ e2 ~@3 e2 ~", R: "a2 ~ a2 ~@7 a2 ~@3 a2@2", S: "e2 ~ e2 ~@7 e2 ~@3 e2@2",
  T: "f#2 ~ f#2 ~@7 f#2 ~@3 f#2@2", U: "e2 ~ e2 ~@7 e2@2 ~@2 e2@2", V: "e2 ~ e2 ~@4 e2!3 ~ e2!4 ~",
  W: "f#2 ~ f#2 ~@4 e2!2 ~ e2 ~@3 e2 ~", X: "d2 ~ d2 ~@3 d2 b1!2 ~ b1 ~@4 b1", Y: "e2 ~ e1 ~@2 e1!2 ~ e2 e1 ~ e1!4 ~",
  Z: "f#2 ~ f#2 ~@5 e2 ~ e2 ~@2 e2 ~@2", AA: "d2 ~ d2 ~@4 b1!2 ~@3 b1 ~@2 b1", AB: "a2 ~ a2 ~@4 a2 ~@2 a2 ~@4 a2",
  AC: "a2 ~ a2 ~@4 b2 c#3 ~ e3 ~ e3 ~ b2 ~", AD: "a2 ~ a2 ~@4 e3 ~ e2!2 ~ e2!2 ~ e2",
  AE: "a2 ~ a2 ~@4 e3 ~@2 e3 ~ e3!2 ~@2", AF: "a2 ~ a2 ~@4 a2 ~ a2!2 ~ b2 c#3 e3@2", AG: "a2 ~ a2 ~@4 a2 ~@2 e2 ~ e2!4",
  AH: "a2 ~ a2 ~@4 b2 c#3 ~ b2 ~ a2 ~ e2 ~", AI: "a2 ~ a2 ~@4 a2!2 ~ a2 ~@2 e2 ~ e2", AJ: "a2 ~ a2 ~@7 a2 ~@3 a2 ~",
  AK: "f#2 ~ f#2 ~@7 f#2@2 ~@2 f#2@2", AL: "a2 ~ a2 ~@3 c#2!3 ~ c#2 ~@4 c#2",
  AM: "f#2 ~ f#2 ~@2 f#2!2 ~ e2 ~ e2 ~ e2 ~ e2 ~", AN: "d2 ~ d2 ~@4 b1!2 ~ b1 ~ b1!4",
  AO: "e2 ~ e1 ~@2 e1!3 e2 e1 ~ e1!4 ~", AP: "a2 ~ a2@2 a2 ~@2 c#2!2 ~ c#2 ~@4 c#2",
  AQ: "f#2 ~ f#1 ~@2 f#2 ~ f#2 e2 ~ e2 ~@3 e2 ~", AR: "d2 ~ d2 ~@4 b1!2 ~ b1 ~@4 e1", AS: "e2 ~ e1 ~@7 e1 ~@3 e1 ~",
  AT: "e1 ~ e1 ~@7 e1 ~@3 e1 ~", AU: "e1 ~ e1 ~@7 e1 ~@3 e2 ~", AV: "a2 ~ a2 ~@4 e3 ~ e3!2 ~ e3!2 ~@2",
  AW: "a2 ~ a2 ~@6 e2!2 ~ e2 ~@3", AX: "a2 ~ a2 ~@13", AY: "a2 ~ a2 ~@4 b2 c#3 e3 a2 ~ e2 ~@3",
  AZ: "a2 ~ a2 ~@6 e2!2 ~ a2 ~ e2 ~", BA: "a2 ~ a2 ~@6 e3!2 ~@2 e3 ~@2",
})).s("gm_fretless_bass").gain(0.4)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B A B A B A B A B A B C B C B D E F B D E F B A B A B C B C G D H I J K H I J A L A L A L A L A B A B C B C G D E F
  B D E F B A B A B C B C G D E F B D E F B A L A L A L A L ~
>`.pickRestart({
  A: "c#4 ~ a3 ~ c#4 ~ a3 ~ c#4 ~ a3 ~ c#4!2 a3 ~", B: "e4 ~ b3 ~ e4 ~ b3 ~ e4!2 b3 ~ e4!2 b3 ~",
  C: "f#4 ~ c#4 ~ f#4 ~ c#4 ~ f#4 ~ c#4 ~ f#4!2 c#4 ~", D: "c#4 ~ a3 ~ c#4!2 a3 ~ e4 ~ b3 ~ e4!2 b3 ~",
  E: "f#4 ~ c#4 ~ f#4!2 c#4 ~ c#4!2 a3 ~ c#4!2 a3 ~", F: "d4 ~ a3 ~ d4 ~ a3 ~ d#4!2 b3 ~ d#4!2 b3 ~",
  G: "e4 ~ b3 ~ e4 ~ b3 c#4 e4!2 b3 ~ e4!2 b3 ~", H: "f#4 ~ c#4 ~ f#4!2 c#4 ~ c#4 ~ a3 ~ c#4!2 a3 ~",
  I: "d4 ~ a3 ~ d4 ~ a3 ~ d#4!2 b3 ~ d#4 ~ b3 ~", J: "e4 ~ b3 ~ e4 ~ b3 ~ e4 ~ b3 ~ e4!2 b3 ~",
  K: "c#4 ~ a3 ~ c#4!2 a3 ~ e4 ~ b3 ~ e4 ~ b3 ~", L: "d4 ~ a3 ~ d4 ~ a3 ~ d4!2 a3 ~ d4!2 a3 ~",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.3)

// other · alto sax
const alto_sax = note(`<
  A@2 B C D E@2 F ~@19 G ~@3 H ~@7 I J K L@2 M N O P Q ~@2 R ~@3 S@2 ~@2 T U@2 V W ~@7 X ~@7 Y Z AA AB AC AD AE@3 AF
>`.pickRestart({
  A: "[~@2 e4@26 c#4 d4 e4@2]/2", B: "e4@12 ~ c#4@2 a3", C: "b3@12 ~ a3@2 g#3", D: "~ e3@11 f#3 a3 b3 f#3, f#3 ~@7",
  E: "[b3@11 ~@2 a3 b3 c#4@2 b3 a3 [f#3,a3] b3 a3@7 c#4@2 e4 [f#4,a4], a3 ~@31]/2", // F#m
  F: "f#4@6 c#4 b3 c#4 b3 [f#3,a3] a3@5", G: "~@3 c#4 [a3,b3] b3 ~ c#4@2 e4@3 f#4 ~@3", H: "~@5 e4 f#4 c#4 e4@4 ~@4",
  I: "~@12 e4 f#4 b3@2", J: "a3@13 b3 c#4@2", K: "e4@4 e4@2 [f4,f#4] ~ e4@7 ~",
  L: "[c#5@2 b4 b4@2 a4 a4@2 g#4 g#4@2 f#4 [e4,f#4] ~ e4 e4@3 f#4 c#4@2 b3 a3 b3@5 a3 b3 c#4 e4]/2", // Esus2
  M: "b3@4 b3@2 c#4@2 ~@4 a3 b3 c#4 e4", N: "b3@3 a3 b3@2 c#4 a3@3 f#3 ~@5",
  O: "~ e3!2 f#3!2 a3!2 b3!2 c#4!2 e4!2 f#4!2 e4",
  P: "a4@4 [b4,c5] [a4,b4] f#4 a4@2 [e4,f#4] c#4 e4 b3@2 [a3,b3] f#3, ~@12 f#4 ~@3", Q: "a3@3 ~@5",
  R: "~@4 c#4@2 e4 ~ e4@2 b3 b3@4 ~", S: "[~@11 a4 b3@2 [f#3,a3] a3@4 ~@13]/2", T: "~@9 a3@2 ~ c#4 e4 f#4 ~",
  U: "[a4@22 f#4@6 b3 [b3,c4] f#3@2, ~@22 e4 ~@7 a3 ~]/2", V: "a3 ~@3", W: "~@10 a3 b3 c#4 e4 f#4 ~",
  X: "~@4 c#4 e4!2 c#4 e4@2 f#4 b3@2 a3 ~@2", Y: "~@10 c#5@4 b4 [f#4,a4]", Z: "a4@12 ~ e4 ~ e4, ~@6 f#4 ~",
  AA: "e4 ~ d4 d4@5 ~@8", AB: "c#4@2 e4 b3@2 e4 a3@2 e4 g#3@2 e4 f#3@2 f#3@2", AC: "f#3@2 a3@9 ~ a3 b3 c#4 d4",
  AD: "e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4 f#4 g#4 a4",
  AE: "[b4@2 b4@2 b4@2 ~@2 a4@3 [e4,f#4] c#4@2 [e4,f#4] c#4@2 b3 [g#3,c#4] b3@7 ~ c#4@2 e4 f#4 e4@9 ~ c#4 ~ c#4 ~ c#4@2 [a3,b3], ~@31 c#4 ~@16]/3", // Esus2 C#5 Asus2
  AF: "b3@15 ~",
})).s("gm_alto_sax").gain(0.3)

// chords · acoustic guitar steel · "+12STR GTR"
const acoustic_guitar_steel = note(`<
  A B C B C D C B ~@12 E F G B H B C B I D I B J F G B E F G B K L M L M N M L ~@8 J F G B E F G B H B C B I D I B J F G
  B E F G B K L M L M N M L ~
>`.pickRestart({
  A: "[e3,a3]@3 [a3,e4] [a3,e4]@4 [a3,e4] a3 a3@2 [a3,e4] a3 a3@2, ~@9 e4@3 ~ e4@3", // A5
  B: "[b3,e4] ~@2 e4 [b3,e4] b3 b3@2 [b3,e4] ~@2 e4 [b3,e4] b3 b3@2, ~ [b3,e4]@2 ~@2 e4@3 ~@2 b3@2 ~ e4@3, ~@2 b3@2 ~@5 [b3,e4]@2 ~@5", // E5
  C: "[a3,e4] ~@2 e4 [a3,e4] a3 a3@2 [a3,e4] ~@2 e4 [a3,e4] a3 a3@2, ~ [a3,e4]@2 ~@2 e4@3 ~@2 a3@2 ~ e4@3, ~@2 a3@2 ~@5 [a3,e4]@2 ~@5", // A5
  D: "[b3,e4] ~@2 e4 [b3,e4] b3 b3@2 [b3,e4] ~@2 e4 [b3,e4] ~@2 e4, ~ [b3,e4]@2 ~@2 e4@3 ~@2 b3@2 ~ [b3,e4]@2 ~, ~@2 b3@2 ~@5 [b3,e4]@2 ~@3 b3@2", // E5
  E: "[a3,e4] ~@2 e4 [a3,e4] a3 a3@2 [b3,e4] ~@2 e4 [b3,e4] b3 b3@2, ~ [a3,e4]@2 ~@2 e4@3 ~@2 b3@2 ~ e4@3, ~@2 a3@2 ~@5 [b3,e4]@2 ~@5", // A5 E5 A5 E5
  F: "[f#3,c#4] ~@2 c#4 [f#3,c#4] f#3 f#3@2 [e3,c#4] ~@2 c#4 [e3,c#4] ~@2 c#4, ~ [f#3,c#4]@2 ~@2 c#4@3 ~@2 e3@2 ~ [e3,c#4]@2 ~, ~@2 f#3@2 ~@5 [e3,c#4]@2 ~@3 e3@2", // F#5 C#m F#5 C#m
  G: "[a3,d4] ~@2 d4 [a3,d4] a3 a3@2 [a3,d#4] ~@2 d#4 [a3,d#4] a3 a3@2, ~ [a3,d4]@2 ~@2 d4@3 ~@2 a3@2 ~ d#4@3, ~@2 a3@2 ~@5 [a3,d#4]@2 ~@5", // D5 Adim D5 Adim
  H: "[a3,e4] ~@2 e4 [a3,e4] a3 a3@2 [a3,e4] a3 a3@2 [a3,e4] a3 a3@2, ~ [a3,e4]@2 ~@2 e4@3 ~ e4@3 ~ e4@3, ~ a3 ~@6", // A5
  I: "[f#3,c#4,f#4] ~@2 c#4 [f#3,c#4] f#3 f#3@2 [f#3,c#4] ~@2 c#4 [f#3,c#4,f#4] f#3 f#3@2, ~ [f#3,c#4]@2 ~@2 c#4@3 ~@2 f#3@2 ~ c#4@3, ~@2 f#3@2 ~@5 [f#3,c#4]@2 ~@5", // F#5
  J: "[a3,c#4] ~@2 c#4 [a3,c#4] a3 a3@2 [b3,e4] ~@2 e4 [b3,e4] b3 b3@2, ~ [a3,c#4]@2 ~@2 c#4@3 ~ [b3,e4]@2 ~@2 e4@3, ~ a3 ~@3 b3 ~@2", // A E5 A E5
  K: "[a3,c#4,e4] ~@2 [c#4,e4] [a3,c#4,e4] a3 a3@2 [a3,c#4,e4] a3 a3@2 [a3,c#4,e4] a3 a3@2, ~ [a3,c#4,e4]@2 ~@2 [c#4,e4]@3 ~ [c#4,e4]@3 ~ [c#4,e4]@3, ~ a3 ~@6", // A C#m A C#m
  L: "[a3,d4,e4] ~@2 [d4,e4] [a3,d4,e4] a3 a3@2 [a3,d4,e4] a3 ~ e4 [a3,d4,e4] a3 a3@2, ~ [a3,d4,e4]@2 ~@2 [d4,e4]@3 ~ [d4,e4]@3 ~ [d4,e4]@3, ~ a3 ~@3 a3 ~@2", // Asus4 Dsus2 Asus4 Dsus2
  M: "[a3,c#4,e4] ~@2 [c#4,e4] [a3,c#4,e4] a3 a3@2 [a3,c#4,e4] a3 ~ e4 [a3,c#4,e4] a3 a3@2, ~ [a3,c#4,e4]@2 ~@2 [c#4,e4]@3 ~ [c#4,e4]@3 ~ [c#4,e4]@3, ~ a3 ~@3 a3 ~@2", // A C#m A C#m
  N: "[a3,d4,e4] ~@2 [d4,e4] [a3,d4,e4] a3 a3@2 [a3,d4,e4] a3 ~ e4 [a3,d4,e4] a3 ~ e4, ~ [a3,d4,e4]@2 ~@2 [d4,e4]@3 ~ [d4,e4]@3 ~ [d4,e4]@3, ~ a3 ~@3 a3 ~ a3", // Asus4 Dsus2 Asus4 Dsus2
})).s("gm_acoustic_guitar_steel").gain(0.07).pan(0.8)

// drums · ride
const ride = s("rd").struct("<~@40 [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!8 ~@32 [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!8 ~>")
  .gain(0.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!4 ~ x ~ x ~ x ~ x ~ x ~ x]!88 ~>").gain(0.5)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<[~@2 x!6]!88 ~>").gain(0.25)

// drums · shaker
const shaker = s("sh").struct("<[x ~ x!3 ~ x!10]!87 [x ~ x!3 ~ x!9 ~] ~>").gain(0.1)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<[~ x ~@3 x ~@10]!88 ~>").gain(0.05)

stack(
  piano, bass, electric_guitar_muted, alto_sax, acoustic_guitar_steel, ride, cabasa, cabasa_soft, shaker, shaker_soft
)