Strudelify
KeyC majorTempo100 bpm
0:00/0:00
// Baby Blue — George Baker Selection
// 100 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@5 A B C B D E B@2 F B G B H I G@2 J K G@4 H E B G L M G E G N B E G@2 A B C B D E G B F B G B H I G@2 J K G@4 H E
  B@2 L N G E G J K G@3 B H E B G L M G E G N B E G N B E G N B O@2
>`.pickRestart({
  A: "~@6 [g3,c4] ~@3 [g3,c4]@2 ~@6 [g3,c4]@2 ~@4", B: "~@6 [g3,c4] ~@3 [g3,c4] ~@7 [g3,c4]@2 ~@4",
  C: "~@3 [g3,c4] ~ [g3,c4] ~@3 [g3,c4] ~@2", D: "~@6 [g3,b3] ~@3 [g3,b3]@2 ~@6 [g3,b3]@2 ~@4",
  E: "~@6 [g3,b3] ~@3 [g3,b3] ~@7 [g3,b3]@2 ~@4", F: "~@5 c4 g3 ~@3 [g3,c4] ~@7 [g3,c4] ~@5",
  G: "~@6 [g3,c4] ~@3 [g3,c4] ~@7 [g3,c4] ~@5", H: "~@6 [g3,b3] ~@3 [g3,b3] ~@7 [g3,b3] ~@5",
  I: "~@6 [g3,b3]@2 ~@2 [g3,b3] ~@7 [g3,b3] ~@5", J: "~@6 [a3,c4] ~@3 [a3,c4] ~@7 [a3,c4] ~@5",
  K: "~@5 [a3,c4] ~@4 [a3,c4] ~@7 [a3,c4] ~@5", L: "~@6 [a3,c4] ~@3 [a3,c4]@2 ~@6 [a3,c4] ~@5",
  M: "~@6 [a3,c4]@2 ~@2 [a3,c4] ~@7 [a3,c4]@2 ~@4", N: "~@6 [a3,c4] ~@3 [a3,c4] ~@7 [a3,c4]@2 ~@4",
  O: "[~@6 [g3,b3,d4] ~@3 [g3,b3,d4] ~@7 [g3,b3,d4]@2 ~@4 e4@22 ~@2, ~@23 [g3,c4]@22 ~@3]/2", // G C5
})).s("gm_acoustic_guitar_steel").gain(0.18)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A B C D E F G H I J K L E F G H I J K M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG E F G H I J K L E F G H I J K
  M N O P Q R S T U V W X Y Z AA M AH O P Q R S T U V W X Y Z AA AB AC AD AE AB AC AD AE AB AC AD AE AI
>`.pickRestart({
  A: "c3@2 b2 a2", B: "g2@2 a2 b2", C: "c3 g2", D: "c3@3 g2@3 a2@3 b2@2 ~", E: "c3@9 ~@3 g2@10 ~@2",
  F: "c3@5 ~ g2@5 ~ a2@4 ~@2 b2@4 ~@2", G: "c3@9 ~@3 g2@11 ~", H: "c3@2 ~ c3@2 ~ b2@2 ~ a2@2 ~", I: "g2@11 ~ d3@11 ~",
  J: "g2@5 ~ g2@4 ~@2 a2@4 ~@2 b2@4 ~@2", K: "c3@4 ~@2 g2@5 ~", L: "c3@4 ~@2 g2@4 ~@2 a2@5 ~ b2@4 ~@2",
  M: "c3@2 ~ c3@2 ~ d3@2 ~ e3@2 ~", N: "f3@7 ~@5 c3@9 ~@3", O: "f3@4 ~@2 f3@5 ~ e3@4 ~@2 d3@4 ~@2",
  P: "c3@5 ~@7 g2@7 ~@5", Q: "c3@2 ~ g2@2 ~ a2@2 ~ b2@2 ~", R: "c3@5 ~@7 g2@11 ~", S: "c3 ~ c3 ~ b2 ~ a2 ~",
  T: "g2@9 ~@3 d3@10 ~@2", U: "g2@4 ~@2 g2@4 ~@2 a2@4 ~@2 b2@3 ~@3", V: "c3@7 ~@5 g2@10 ~@2",
  W: "c3@4 ~@2 c3@3 ~@3 d3@4 ~@2 e3@4 ~@2", X: "f3@7 ~@5 c3@8 ~@4", Y: "f3@5 ~ e3@2 ~ d3@2 ~",
  Z: "c3@10 ~@2 b2@4 ~@2 a2@3 ~@3", AA: "g2@5 ~ a2@2 ~ b2@2 ~", AB: "c3@5 ~ d3@2 ~ e3@2 ~",
  AC: "f3@10 ~@2 e3@5 ~ d3@4 ~@2", AD: "c3@10 ~@2 b2@5 ~ a2@5 ~", AE: "g2@11 ~ a2@5 ~ b2@5 ~", AF: "c3@10 ~@2 g2@11 ~",
  AG: "c3@5 ~ g2@4 ~@2 a2@5 ~ b2@4 ~@2", AH: "f3@8 ~@4 c3@9 ~@3", AI: "c3@5 ~@7",
})).s("gm_fretless_bass").gain(0.27)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@36 A B C D@2 E@2 F G H I J@2 K L M@2 N O P@2 Q R S T U@2 V W X Y Z AA AB AC AD Q R S T U@2 V W X Y Z AA AE AC AD AF
  AG AH AI@2 ~@2 AJ AK AL AM AN
>`.pickRestart({
  A: "~@11 e4 [f4,a4]@3 ~@3 [f4,a4]@4 ~@2, ~@11 g#4@2 ~@11", B: "[e4,g4]@9 ~@2 [e4,g4] [f4,a4]@3 ~@3 [e4,g4]@3 ~@3",
  C: "[d4,f4]@7 ~@5 [e4,g4]@2 ~@4 [d4,f4]@3 ~@3, ~@11 [d4,f4]@2 ~@11", D: "[[c4,e4]@5 ~@3]/2", E: "[e5@7 d5]/2",
  F: "e5", G: "g5", H: "f5@2 d5 b4", I: "g4@2 b4 d5", J: "[e5@2 c5@5 ~]/2", K: "~@6 g4@6 c5@5 ~ a5@6, e5@7 ~@5",
  L: "g5@2 ~", M: "[e5@12 d5@5 d#5@6 e5@11 ~@2 e5@6 d#5@6]/2", N: "d5@2 a4 a#4", O: "b4@2 c5 d5", P: "[c5@37 ~@11]/2",
  Q: "~@6 a4@3 ~ g#4 ~ a4@3 ~ c5 ~ a5@2 ~@4", R: "f5 ~", S: "~@10 f#4 ~ g4@3 ~ c5 ~ e5@2 ~@4", T: "c5@2 d5 d#5",
  U: "[~ c5, e5@13 ~@11]/2", V: "~@2 b4 a#4", W: "a4@5 ~", X: "~ g5 e6 c6", Y: "a#5", Z: "a5 c5 f5 c6", AA: "a5@5 ~",
  AB: "~@4 g4@2 c5@3 ~ e5@2 a5@4 ~@2 g5@5 ~", AC: "[d5,f5]@2 [e5,g5] [d5,f5]", AD: "[c5,e5]@5 ~",
  AE: "~@4 g4@2 c5@3 ~ e5@2 a5@4 ~@2 g5@4 ~@2", AF: "~@12 [f5,a5] ~@5 a5@2 ~@4, ~@18 f5 ~@5",
  AG: "[e5,g5]@8 ~ [e5,g5]@2 ~ f5@6 [e5,g5]@6, ~@11 a5@6 ~@7", AH: "[d5,f5]@8 ~ [d5,f5]@2 [e5,g5]@7 [d5,f5]@6",
  AI: "[[c5,e5]@10 ~@2 c5@3 b4@2 [a#4,d5]@6 ~ c5@10 ~@14, ~@11 e5@4 d#5 ~@7 a4@11 ~@14]/2", // C A#
  AJ: "~@6 [c5,e5]@2 b4 [a#4,d5]@3, ~@16 d#5 ~@7", AK: "[a4,c5]@10 ~@2 [f5,a5]@3 ~@3 [f5,a5]@3 ~@3",
  AL: "[e5,g5]@10 ~@2 [f5,a5]@3 ~@3 [e5,g5]@4 ~@2, ~@11 [e5,g5]@3 ~@10", // Em F Em
  AM: "[d5,f5]@7 ~@2 [d5,f5]@3 [e5,g5]@4 ~@2 [d5,f5]@4 ~@2", AN: "[c5,e5]@3 ~",
})).s("gm_string_ensemble_1").gain(0.27)

// chords · accordion
const accordion = note(`<
  A B C D@6 E@2 F@2 G@4 H@2 F@2 I@2 J@2 K@6 L@4 M N O P Q@2 R@4 E@2 F@2 G@4 H@2 F@2 I@2 J@2 S@6 T@4 U I@2 J@2 S@6 T@4 M
  N O V M N O V M N O V W
>`.pickRestart({
  A: "~@11 e4 [f4,a4]@4 ~@2 [f4,a4]@3 ~@3, ~@11 g#4@2 ~@4 [e4,g#4]@2 ~@5", B: "[e4,g4]@6 [f4,a4]@2 ~ [e4,g4]@2 ~",
  C: "[d4,f4]@4 ~@2 [e4,g4]@3 [d4,f4]@3, ~@11 [d4,f4]@3 ~@10", // Dm Em Dm
  D: "[[g3,c4]@4 c4@4 ~@15 [d#4,f#4], e4@8 [e4,g4]@15 ~, ~@12 g3@26 ~@10 [g3,c4]@23 ~]/6", // C5 D#m Em C5
  E: "[[d4,f4]@18 ~@5 [f4,a4]@13 [a3,c4,e4,g4]@6 [b3,d4,f4]@6, [g3,b3]@19 ~@5, ~@18 [e4,g4]@7 ~@23]/2", // Dm F Am7 Bdim G Em
  F: "[[g3,c4]@11 ~, e4@47 ~]/2", G: "[~@15 [d#4,f#4], [e4,g4]@91 ~@5, ~@24 [g3,c4]@23 ~]/4",
  H: "[[d4,f4]@3 [e4,g4] [f4,a4]@2 [a3,c4,e4,g4] [b3,f4], [g3,b3]@19 ~@2 d4@2 ~]/2", // Dm Em F Am7 Bdim G
  I: "[[f3,a3]@32 ~ a3@3 [b3,g4,b4]@6 [f3,a3,f4,a4]@6, [f4,a4]@3 ~, ~@33 f3@7 ~@8]/2", J: "[[g3,c4,e4,g4]@23 ~]/2",
  K: "[[c4,e4,g4]@15 [b3,d#4,f#4]@3 [e4,g4]@3 [f4,a4]@9 [e4,g4]@9 [d4,f4]@4 ~@2 e4@2 ~ [b3,d4]@8 ~@7 [d4,f4]@3 [e4,g4]@3 [f4,a4]@7 ~@2 [f4,a4]@6 [e4,g4]@6 [d4,f4]@6 c4@2 c4@34 b3@6 a#3@6, g3@15 ~ g3@32, ~@6 c4@9 c4@9 ~@8 e4@16]/6", // C B Em F Em Dm Bm Dm …
  L: "[[f4,a4]@29 ~ a4@6 b4@6 [f4,a4]@6 [e4,g4]@9 ~@3 a4@5 ~ [e4,g4]@5 ~ f4@8 ~ [d4,f4]@3 [e4,g4]@5 ~ [d4,f4]@6, [f3,a3]@49 ~@10 e4@6 ~@6 d4@8 ~@17, ~@30 f4@10 ~@8 [g3,c4]@23 ~ [g3,b3]@23 ~, ~@59 g4@2 ~@35]/4", // F Em Dm Em Dm F C5 G
  M: "[g3,c4], e4@7 ~", N: "f4@3 ~ [f4,a4]@4, [f3,a3]", O: "g4@3 g4 a4@2 g4@2, [g3,c4,e4]@23 ~",
  P: "f4@8 ~@4 g4@4 ~@2 [g3,b3,d4,f4]@5 ~, [g3,b3,d4]@2 ~, ~@11 f4@2 ~@11", Q: "[[g3,c4,e4]@23 ~]/2",
  R: "[~@15 [d#4,f#4], [e4,g4]@15 ~, ~@24 [g3,c4]@23 ~]/4", // D#m Em C5
  S: "[[c4,e4,g4]@15 [b3,d#4,f#4]@3 [e4,g4]@3 [f4,a4]@9 [e4,g4]@9 [d4,f4]@4 ~@2 e4@2 ~ [b3,d4]@8 ~@7 [d4,f4]@3 [e4,g4]@3 [f4,a4]@7 ~@2 [f4,a4]@6 [e4,g4]@6 [d4,f4]@6 c4@2 c4@34 b3@6 a#3@6, g3@15 ~ g3@32, ~@18 c4@27 c4@27 ~@24 e4@47 ~]/6", // C B Em F Em Dm Bm Dm …
  T: "[[f4,a4]@28 ~@2 a4@6 b4@6 [f4,a4]@6 [e4,g4]@9 ~@3 a4@4 ~@2 [e4,g4]@5 ~ f4@8 ~ [d4,f4]@3 [e4,g4]@5 ~ [d4,f4]@6, [f3,a3]@49 ~@10 e4@6 ~@6 d4@8 ~@17, ~@30 f4@10 ~@8 [g3,c4]@23 ~ [g3,b3]@23 ~, ~@59 g4@2 ~@35]/4", // F Em Dm Em Dm F C5 G
  U: "[g3,c4,e4]@23 ~", V: "f4@8 ~@4 g4@4 ~@2 [g3,b3,d4,f4]@5 ~, [g3,b3,d4]@2 ~, ~@11 f4@3 ~@10", W: "[g3,c4,e4]@3 ~",
})).s("gm_accordion").gain(0.16)

// drums · kick
const kick = s("bd").struct("<~@5 A@5 B A C A@5 B A C A@25 B A C A@5 B A C A@14 C A@26 C>".pickRestart({
  A: "x!2", B: "x ~@2 x", C: "x",
})).gain(0.23)

// drums · rim
const rim = s("rim").struct(`<
  ~@3 A@3 B A B A B A@3 B A B A B A@3 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@3 B A B A B A@3 B A B A B A B
  A B A B A B A@2 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 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.23)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@5 [~ x ~ x]!93 ~>").gain(1.17)

stack(acoustic_guitar_steel, bass, string_ensemble_1, accordion, kick, rim, cabasa)

More by George Baker Selection