Strudelify

My Guy

Mary Wells

KeyF majorTempo126 bpm
0:00/0:00
// My Guy — Mary Wells
// 126 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 90 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// chords · piano
const piano = note(`<
  A B C ~ D E F G H I J@2 K L M N O P Q R D E F G H I J@2 K L M N O P Q R S T U V@3 W X D E F G H I J@2 K L M N O P Q R
  C B C ~ D E F G H I J@2 K L M N ~@2 Q R ~@2 Q R ~@2 Q R ~@2
>`.pickRestart({
  A: "~@2 g3@3 f3 g3@2 f3 g3@2 f3", B: "bb2@2 g3 f3@3 bb2@2 g3 f3@3", C: "bb2@2 g3@3 f3 g3@2 f3 g3@2 f3",
  D: "~@4 d4@2 a4@4 d4@2 ~@4 d4@2 a4@4 f4 ~, bb2@5 ~ f2@6, ~@6 f4@2 ~@2 [g4,bb4]@7 ~ f4@2 ~@4", // Gm
  E: "bb2 ~@3 d4@2 [f4,a4]@3 ~ d4@2 ~@4 d4@2 a4@4 [d4,f4] ~, ~@10 [g4,bb4]@7 ~ f4@2 ~@4, ~ f2", // F Dm Gm
  F: "bb2 ~@3 d4 ~ [f4,a4]@3 ~ d4@2 ~@6 a4@4 [d4,f4]@2, ~@5 bb4@4 ~@3, ~@10 g4@6 ~@2 f4 ~@5, ~ f2", // F Dm
  G: "bb2 ~@3 d4@2 [f4,a4]@3 ~ d4@2 ~@4 d4@2 a4@4 f4 ~, ~@5 bb4@4 ~@3, ~@5 g4@3 ~ f4 ~@2, ~@12 f2@11 ~", // F
  H: "bb2 ~@5 [f4,a4]@3 ~ d4@2 ~@6 a4@4 [d4,f4]@2, ~@2 d4@2 ~ bb4@4 ~@3, ~@5 g4@3 ~ f4 ~@2, ~ f2", // F Dm
  I: "bb2 ~@5 [f4,a4]@3 ~ d4@2 f2@4 ~@2 a4@4 [d3,c4,d4,gb4]@2, ~@5 [g4,bb4]@3 d4@2 ~@2, ~@9 f4 ~@2", // F D7 Gm
  J: "[d2@3 ~ c4@2 [d4,gb4,a4]@2 ~@2 c4@2 ~@4 c4@2 gb4@2 ~@2 c4@2 ~@4 c4@2 a4@4 c4@2 ~@4 c4@2 [d2,d4]@2 ~@2 g3@2, ~@10 a4@12 d4@5 ~@3 d4@2 ~@2 d4@6 ~@8, ~@10 d4@6 ~@2 d4 ~@3 gb4@7 ~@5 gb4@12 ~@2, ~@10 d3 ~ d3@11 ~ d2@6 ~@6 d3@6 ~@6]/2", // D
  K: "~@4 c4 ~ [c2,eb4,g4]@3 ~ [g3,c4]@2 f3@4 ~@2 [f3,a4]@4 [c3,c4,g4] ~, c3@3 ~, c2@6 c4 ~@3 [f4,a4]@7 ~ f4@2 ~@4, ~@6 f2@5 ~", // Cm C5 F C5 F
  L: "c2@2 ~@2 c4@2 [c2,eb4,g4]@3 ~ [f4,a4]@6 c4@2 [f3,f4]@2 ~@2 [c3,c4,eb4] ~, [c3,g3]@6 ~@4 c4@3 ~@5 a4@4 g4@2, ~@10 c3 ~@13", // Cm F Cm C5
  M: "~@4 c4 ~ g4@4 [g3,c4]@2 f3@4 c4@2 [f3,f4]@3 ~ [c4,g4]@2, c3@18 ~@4 [c3,eb4] ~, c2@6 eb4@2 ~@2 [f4,a4]@7 ~ a4@4 ~@2, ~@6 f2@5 ~", // C5 F C5 Cm F
  N: "[c2,c3,g3] ~@11", O: "~@4 d4@2 [f4,bb4]@3 ~ f4@6 ~@2 g4@5 ~, ~@5 bb4@6 ~",
  P: "c2@6 [g4,bb4]@4 c4@2 f2@6 [f4,a4]@4 c4 ~, ~@10 [f4,a4]@7 ~@7", // Gm F
  Q: "bb2 ~@5 [f4,a4]@3 ~ d4@2 bb4@6 [d4,f4,a4]@2 ~@4, ~@6 d4 ~@5 g4@4 ~@8, ~@12 gb4 ~@5 f3 ~@5", // F Dm
  R: "~@6 [eb3,eb4,g4]@3 ~@3 [f3,f4,a4]@8 ~@4, ~@6 bb3 ~@5 c4@6 ~@6", // Eb F
  S: "eb3@4 [eb4,g4,bb4] ~ bb3@4 eb4 ~ [f3,f4,a4]@6 f4 ~@3 bb3@2", // Eb F
  T: "~@4 [eb4,g4,bb4] ~@11 [f4,a4] ~@5 f4@2, eb3@6 ~@6 f3@6 ~@4 c4 ~", // Eb F
  U: "~@4 [eb4,g4,bb4] ~ bb3@3 ~@7 c4@2 f4@5 ~, eb3@7 ~@5 f3@6 a4@3 ~@3", // Eb
  V: "[~@4 d4@2 f4 ~@3 d4@2 bb3@4 d4@2 [bb3,f4,bb4] ~@3 [g3,g4]@10 ~@8 d4@2 [a3,a4]@3 ~ g4@11 ~@3 f4@6 d4@3 ~@3, bb3@7 ~@3 [f4,bb4]@7 ~@5 bb4@13 ~@7 f4 ~@3 d4@7 ~@7 d4@3 ~@9, ~@11 d4@3 ~@4 d3@3 ~@15]/3", // Bb5 G A Bb5
  W: "g4@6 ~@4 g4@3 ~@3 e4@2 [g4,c5]@5 ~, c5@5 c3@4 ~@3, e4@2 ~ e4@3 ~@6", // C5
  X: "[f4,a4] ~@11 e7 [c7,d7] [a6,b6] [f6,g6] e6 [c6,d6] b5 [g5,a5] f5 [d5,e5] c5 [a4,b4]", // F Csus2 Asus2 Fsus2 Csus2 Gsus2 Dsus2 Asus2
})).s("gm_piano").gain(0.42).pan(0.7)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@4 A B C A D E F G H I J ~ K L M ~ A B C A D E F G H I J ~ K L M ~ N O P Q R@2 S T A B C A D E F G H I J ~ K L M ~@5
  A B C A D E F G H I J ~@3 M ~@3 M ~@3 M ~@3
>`.pickRestart({
  A: "~@22 d4 ~", B: "~@6 d4 ~@17", C: "~@6 d4 ~@9 d4 ~@7", D: "~@4 d4 ~", E: "~@4 d4@3 ~@17", F: "~@6 c4 ~@17",
  G: "~@6 c4 ~@15 [g2,c3] ~", H: "~@16 [a3,c4]@4 ~@2 [a3,eb4] ~", I: "~@4 a3 ~, ~@3 f2@2 ~",
  J: "~@6 c4 ~@9 a3@4 ~@2 a3 ~", K: "bb2@4 ~ g3 g2@3 f4@2 ~, ~@9 g3 ~@2", L: "~@4 e4 ~ e4@3 ~@7 c4@2 f3@2 ~@2 f3 ~",
  M: "~@12 bb3 ~@11", N: "~@16 c4 ~ a3 ~@5", O: "~@10 eb4 ~@5 c4 ~ a3 ~@5", P: "~@10 g3@2 ~@6 a3@2 ~@2 [f3,c4] ~",
  Q: "~@10 f3@11 ~@3", R: "[~@6 d4@2 ~@2 [g3,g4] ~@19 d4@4 g3@2 d3@6 a3@2 ~@2 f3@2, ~@22 g3@10 ~@2 g4 ~@13]/2",
  S: "c3@6 ~@6 c4@6 g3@3 ~ c3@2, ~@22 e4 ~", T: "f3 ~@23",
})).s("gm_piano").gain(0.19).pan(0.7)

// chords · trombone
const trombone = note(`<
  A@2 B C ~@14 D E D@2 F G H@2 I@2 ~@6 D C ~@8 D@2 F J H K L M@2 N O ~@3 D C A@2 B C D@2 F J H K L M@2 N O ~@3 D C ~@2 D
  C ~@2 D C ~@2
>`.pickRestart({
  A: "[[d5,f5]@34 ~@2 f5@4 [bb4,d5]@3 ~ [bb4,d5]@3 ~, ~@12 d5 ~@3]/2", B: "[bb4,d5]",
  C: "~@6 [g4,bb4]@2 ~@4 [a4,c5]@7 ~@5", D: "~@6 [f4,a4] ~@5 [g4,bb4]@6 [f4,a4] ~@5",
  E: "~@6 [g4,bb4] ~@5 [a4,c5]@7 ~@5", F: "~@4 d4 ~ a4@2 ~@2 d4 ~ bb4@6 [f4,a4] ~@5, ~@6 f4 ~@5 g4@4 ~@8",
  G: "~@4 d4@2 c5@2 ~@2 d4 ~ g4@6 f4 ~@5, ~@6 a4 ~@17", H: "~@4 d4 ~ a4@2 ~@4 [g4,bb4]@6 [f4,a4] ~@5, ~@6 f4 ~@17",
  I: "[[a4,c5]@17 ~ [bb4,d5]@3 ~ [a4,c5]@26]/2", J: "~@4 d4@2 c5@2 ~@2 d4 ~ g4@6 [d4,f4] ~@5, ~@6 a4 ~@17",
  K: "~@4 d4 ~ a4@2 ~@4 [g4,bb4]@6 [f4,a4] ~@5, ~@6 f4 ~@11 d5@6", L: "[a4,c5]@17 ~ [bb4,d5]@6",
  M: "[[a4,c5]@26 ~@4 [eb4,g4] ~@15 a4@2]/2", N: "eb4 ~@5 [eb4,g4] ~@17", O: "~@6 [eb4,g4] ~@17",
})).s("gm_trombone").gain(0.66).pan(0.6)

// chords · trombone · soft notes
const trombone_soft = note(`<
  ~@18 A ~ A@2 ~@2 B@2 ~@8 A ~@9 A@2 ~@2 B@2 ~@2 C D ~@4 A ~@5 A@2 ~@2 B@2 ~@2 C D ~@4 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "~@4 d4 ~@5 d4@2 ~@12", B: "~@5 d4 ~@6", C: "~@22 f4 ~", D: "g4 ~@23",
})).s("gm_trombone").gain(0.39).pan(0.6)

// bass · acoustic bass · "Acc Bass"
const bass = note(`<
  A B C D E F G F@2 H I J K@3 L M N O D E F G F@2 H I J K@3 L M N O D P Q R S T U V W E F G F@2 H I J K@3 X M N O D A B
  C D E F G F@2 H I Y K@3 X Z AA AB AC AD AE AF AG AD AA AH AI AE AJ
>`.pickRestart({
  A: "bb1@4 g2@5 ~ f2@2 g2@4 f2@2 g2@4 f2@2", B: "bb1@2 g2 f2@3 bb1@2 g2 f2@3", C: "bb1@2 g2@3 f2 g2@2 f2 g2@2 f2",
  D: "~@6 eb2@2 ~@4 f2@7 ~@5", E: "bb2@9 ~ bb2 ~ f2@6 a2@3 ~ bb2 ~", F: "bb2@11 ~ f2@5 ~ a2@2 ~@2 bb2 ~",
  G: "bb2@11 ~ f2@6 a2@2 ~@2 bb2 ~", H: "bb2@9 ~ bb2@2 bb2@5 ~ bb2@2 a2@2 gb2@2", I: "d2@7 ~@3 d2@2 a2@3 ~ a2@2 d2@5 ~",
  J: "d2@3 d2@2 ~ d2@2 ~ db2@2 ~, ~@4 d2 ~", K: "c2@7 ~@3 c2@2 f2@2 ~@2 f2@2 d2@5 ~", L: "c2 ~@11",
  M: "bb2@5 ~ bb2@4 a2@2 g2@6 d3@4 ~@2", N: "c3@5 ~ c3@6 f2@2 c2@2 a1@2 f2@5 ~", O: "bb2@6 ~@4 bb2 ~ f2@5 ~@7",
  P: "eb2@7 ~@3 eb2@2 f2@6 ~@4 f2@2", Q: "eb2@7 ~@3 eb2@2 f2@8 ~@2 bb1 ~", R: "eb2@7 ~@3 eb2@2 f2@7 ~@5",
  S: "bb2@6 ~@4 bb2 ~ f2@6 bb2@4 f2 ~", T: "g2@7 ~@3 g2@2 d2@11 ~", U: "g2@7 ~@3 g2@2 d2@5 ~ d2@5 ~",
  V: "c3@4 ~ c3 c2@3 c3@2 c2", W: "f2@3 ~ f1@16 ~@4, ~@4 e1 ~@19", X: "c2 ~@3 c2 g2 f2@3 a2@3",
  Y: "c3 db3 d3 d2@2 ~ d2@2 ~ db2@2 ~, d2 ~@15 d2@4 ~@4", Z: "bb2@4 ~@2 bb2@3 ~ a2@2 g2@2 d2@2 c2@2 bb1@4 ~@2",
  AA: "c2@3 ~ c2@2 f1@5 ~ gb1@5 ~ a1@4 ~@2", AB: "bb2@6 ~@4 bb2@2 f2@3 ~ f2 ~ bb2@4 f2@2",
  AC: "bb2@2 ~ c3@2 ~ d3@3 f2 ~ a2", AD: "bb1@3 d2@3 g2@3 b1@2 ~",
  AE: "c2@6 db2@2 d2@2 eb2 ~ e2@2 f2@2 eb2@2 c2@2 f1 ~ a1@2", AF: "bb1@7 ~@3 bb2@2 f2@3 ~ f2 ~ bb2@4 f2@2",
  AG: "bb2@2 ~ eb2@2 ~ f2@3 f2 ~ a2", AH: "bb1@6 ~@4 bb2@2 f2@2 ~@2 f2 ~ bb2@4 f2@2", AI: "bb2@2 ~ eb2@2 ~ f2@3 ~@3",
  AJ: "bb1@7 ~@3 f2@2 bb2@2 ~@10",
})).s("gm_acoustic_bass").gain(0.72)

// chords · brass section · "Brass"
const brass_section = note("<~@12 A B@2 ~@13 A B@2 ~@21 A B@2 ~@17 A B@2 ~@15>".pickRestart({
  A: "~@6 [eb4,g4,bb4] ~@9 [f4,a4,c5] ~@5 [f4,a4] ~, ~@11 c5", B: "~@6 [eb4,g4,bb4] ~@9 [f4,a4,c5] ~@5 [f4,a4,c5] ~",
})).s("gm_brass_section").gain(0.57).pan(0.4)

// chords · rock organ · "Organ"
const rock_organ = note(`<
  ~@3 A B C D E F G H@2 I J K L M N O P B C D E F G H@2 I J K L M N O P Q R S T U V W X B C D E F G Y@2 I J K L M N O P
  ~@3 P B C D E F G Z@2 I J K L ~@2 AA P ~@2 AA P ~@2 AA P ~@2
>`.pickRestart({
  A: "~@3 [eb5,g5] ~@2 [c5,f5,a5]@4 ~@2, ~@6 bb4 ~@17", // Eb F
  B: "~@4 d5 ~ [f5,a5]@3 ~ d5@2 [g5,bb5]@5 ~ a5@2 ~@4, ~@6 e5 ~@11 f5 ~@5", // F Gm
  C: "~@4 d5 ~ [f5,a5]@2 ~@2 [g5,bb5]@6 d5@2 [f5,a5]@2 ~@4, ~@6 e5 ~@17", // F Gm F
  D: "~@4 d5@2 [f5,a5]@3 ~ d5 ~ [g5,bb5]@6 a5@2 ~@4, ~@6 e5 ~@11 f5 ~@5", // F Gm
  E: "~@2 d5 [f5,a5] ~ [g5,bb5]@3 d5 a5 ~@2, ~@6 e5 ~@11 f5 ~@5", // F Gm
  F: "~@4 d5@2 [f5,a5]@3 ~ d5@2 [g5,bb5]@6 a5@2 ~@4, ~@6 e5 ~@11 f5 ~@5", // F Gm
  G: "~@4 d5@2 [e5,f5] ~@3 [g5,bb5]@6 d5@2 [f5,a5]@2 ~@4, ~@3 a5 ~@8", // Fmaj7 Gm F
  H: "[[d5,gb5]@8 ~@2 [d5,gb5]@4 ~ gb5 d5 [a4,c5]@3 ~@2 gb4@22 ~@4, c5@15 [g5,a5]@2 d5 ~@3 c5@23 ~@4, ~@16 gb5@2 ~@3 d5@21 ~@6]/2", // D Am Gsus2
  I: "[eb5,g5]@11 ~ [f5,a5]@11 ~, c5@23 ~", J: "[c5,eb5,g5]@12 [c5,f5,a5]@11 ~", K: "[eb5,g5]@12 [f5,a5]@11 ~, c5@11 ~",
  L: "[c5,eb5,g5] ~@23", M: "[bb4,d5,f5]@12 [b4,g5]@11 ~, ~@4 d5@3 ~", N: "[g4,bb4,e5]@11 ~ [a4,c5]@10 ~@2, ~ eb5",
  O: "~ bb4 ~@4 e5 [f5,a5]@3 d5@2 [g5,bb5]@5 ~ [d5,f5] ~@5, d5 ~@8 a5 ~@2", // F Gm Dm
  P: "~@3 [eb5,g5] ~@2 [c5,f5,a5]@3 ~@3, ~@6 bb4 ~@17", Q: "~ [bb4,eb5]@11 [c5,f5]@10 ~@2, g5 a5",
  R: "[bb4,eb5,g5]@12 [c5,f5,a5]@11 ~", S: "[bb4,eb5,g5]@11 ~ [f5,a5]@11 ~, ~@4 c5@3 ~", T: "[bb4,d5,f5]@23 ~",
  U: "[bb4,d5,g5] [d5,f5], ~@6 a4@5 ~", V: "[bb4,d5,g5]@11 ~ a4@11 ~, ~@11 [d5,f5]@12 ~", W: "[c5,e5,g5]@23 ~",
  X: "[c5,f5] ~@23, a5 ~@11", // F5
  Y: "[[d5,gb5]@8 ~@2 [d5,gb5]@4 ~ gb5 d5 [a4,c5]@3 ~@2 gb4@22 ~@4, c5@15 [g5,a5]@2 d5 ~@3 [c5,d5]@3 ~@24, ~@8 gb5 ~@15]/2", // D Am Gsus2 Csus2
  Z: "[[d5,gb5]@8 ~@2 [d5,gb5]@4 ~ gb5 d5 [a4,c5]@3 ~@2 gb4@22 ~@4, c5@15 [g5,a5]@2 d5 ~@3 c5@21 ~@6, ~@16 gb5@2 ~@3 d5@19 ~@8]/2", // D Am Gsus2
  AA: "~@6 e5 [f5,a5]@3 d5@2 [g5,bb5]@5 ~ [d5,f5] ~@5, ~@9 a5 ~@2", // F Gm Dm
})).s("gm_rock_organ").gain(0.38).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B C D E@3 F@2 E F@3 E G H E B I D J E J K L K M K@3 G K N J G D J E J@2 E J M J E J M K G J@6 E@2 O P A@2 B C D M
  D@4 J@2 D@3 G D@3 C D@3 Q D@3 Q ~@2
>`.pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x!2", C: "~ x!2 ~", D: "x ~@4 x!2 ~@5", E: "x ~@5 x ~@4 x", F: "x ~@5 x ~ x ~@2 x", G: "x",
  H: "x ~@4 x!2 ~ x ~@3", I: "~@2 x!2 ~@2 x ~@5", J: "x ~@4 x ~@2 x ~@2 x", K: "x ~@7 x ~@2 x", L: "x ~@4 x ~@6",
  M: "x ~@10 x", N: "x ~@4 x!2 ~ x ~@2 x", O: "x ~ x", P: "~@3 x ~@2 x ~@4 x", Q: "x!3 ~",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@11 ~ A@3 ~ A@5 B A@5 ~ A@3 C A@7 ~ A B A B A B A@5 D A@2 B ~@4 D A B A@3 B A@5 ~@3 A@2 ~@2 A@2 ~@2 A E ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~ x!2 ~", D: "~@3 x", E: "~@3 x ~@5 x ~ x",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A B ~@3 C ~ D ~@5 E ~@2 F G ~@5 H ~ I ~@3 A ~@3 J ~@7 E ~ H ~ K ~ H ~ I ~@6 L M ~@2 L M ~ H ~@3 E ~@2 A ~@2 A ~@2
  F N ~@2 O N ~@2 O G ~@2
>`.pickRestart({
  A: "~@8 x!4", B: "x ~@7 x!4", C: "~@7 x!2 ~@3", D: "~@5 x", E: "~@8 x!2 ~@2", F: "~@11 x", G: "x ~@8 x!2 ~",
  H: "~@6 x!2 ~@4", I: "~@2 x", J: "~@6 x ~@2 x!3", K: "~@6 x!4 ~@2", L: "~@9 x!3", M: "x", N: "x ~@8 x!3",
  O: "~@3 x ~@5 x ~ x",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~ x]!56 ~@4 [~ x ~ x]!23 [~ x ~@2] ~@2>").gain(0.56)

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

// drums · low tom
const low_tom = s("lt").struct("<~@25 [~@10 x!2] ~@23 [~@10 x!2] ~@15 [~@3 x] ~@24>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@5 B ~@3 A ~@5 C ~@19 C ~@3 C ~@15 D ~@3 B ~@20>".pickRestart({
  A: "~@11 x", B: "~@10 x!2", C: "~@8 x!2 ~@2", D: "~@2 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@3 A B ~@14 A ~@39 A ~@3 A ~@15 A ~@3 A ~@3 A ~@2>".pickRestart({
  A: "~ x!2 ~", B: "x",
})).gain(0.64)

stack(
  piano, piano_soft, trombone, trombone_soft, bass, brass_section, rock_organ, kick, snare, snare_soft, clap, hihat,
  low_tom, mid_tom, crash
)