Strudelify

I Get the Sweetest Feeling

Jackie Wilson

KeyF majorTempo125 bpm
0:00/0:00
// I Get the Sweetest Feeling — Wilson,Jackie
// 125 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 102 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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(`<
  ~@4 A B C D E F G H I@4 J K L M N O N O N O P Q R S T D T U V W I@4 X Y Z AA N O N O N O P AB AC AD AE AF AG AD AH AI
  AJ AK D S AL AM AN AO I@4 AP AQ AR AS N O N O N O P Q AT AU AT AU AT AU AT AU AC AD AE AF AG AD AH AI AV@2
>`.pickRestart({
  A: "c2@4 g1@2 c2@5 ~ c2@4 ~@2 c2@3 ~ g1@2", B: "c2@4 ~@2 c2@3 ~ g1 ~ c2@5 ~ c2@4 ~@2",
  C: "c2@3 ~ g1@2 c2@5 ~ c2@3 ~ g1@2 c2@4 ~@2", D: "c2@2 g1 c2@2 ~ c2@2 ~ c2@2 g1",
  E: "c2@4 ~@2 c2@5 ~ c2@4 g1@2 c2@4 ~@2", F: "c2@2 ~ c2@2 g1 c2@2 ~ c2@2 ~",
  G: "bb1@4 f2@2 bb2@3 ~ f2 ~ bb1@3 ~ f2@2 bb2@2 f2 ~ bb1@2", H: "g2@3 ~ d2@2 g2@4 d2@2 g1@4 d2@2 g2@4 d2@2",
  I: "eb2@5 ~@5 a2@2 bb2@4 g2@2 bb1@3 ~@3", J: "db2@4 ab1@2 db2@2 ~@8 ab1@2 db2@5 ~",
  K: "gb1@4 db2 ~ gb2@4 ~@2 gb2@4 db2@2 gb2@3 ~@3", L: "f2@4 c2 ~ f1@4 ~@2 a1@4 c2@2 f2@3 ~@3",
  M: "f2@3 ~ c2 ~ f1@3 ~ c2@2 f2@4 c2@2 f2@3 ~@3", N: "bb1@4 bb2 ~ bb1@3 ~ bb2@2 bb1@4 bb2@2 bb1@4 bb2 ~",
  O: "bb1@4 bb2@2 bb1@4 bb2@2 bb1@3 ~ bb2@2 f2 ~ ab2 ~ bb2 ~", P: "g1@19 ~@3 d2 ~", Q: "g1@11 ~ g1@3 ~ a1@2 c2@3 ~@3",
  R: "c2@3 ~@3 c2@3 ~ g1@2 c2@4 ~@2 c2@4 ~@2", S: "c2@2 g1 c2@2 ~ c2@2 g1 c2@2 ~",
  T: "c2@3 ~@3 c2@4 g1@2 c2@3 ~@3 c2@4 g1@2", U: "c2@4 g1@2 c2@3 ~@3 c2@3 ~ g1@2 c2@3 ~ g1@2",
  V: "bb1@3 ~ f2@2 bb2@3 ~ f2@2 bb1@3 ~ f2@2 bb2 ~ f2@2 gb2 ~", W: "g2@4 d2 ~ g2@3 ~ d2 ~ g1@3 ~ d2 ~ g2@3 ~ d2 ~",
  X: "db2@4 ~@2 db2@5 ~ ab1@5 ~ db2@4 ab1 ~", Y: "gb1@3 ~ db2 ~ gb2@4 ~@2 gb2@4 db2 ~ gb2@4 db2 ~",
  Z: "f2@3 ~ c2 ~ f1@10 c2 ~ f2@3 ~ c2@2", AA: "f2@4 c2 ~ f1@4 ~@2 a1@3 ~ c2 ~ f2@3 ~@3",
  AB: "g1@11 ~ g1@3 ~ a1@2 c2@3 ~ a1@2", AC: "c2@3 ~ c2@2 ~@2 c2@2 ~@2 c2@3 ~ c2@3 ~ c2@2 ~@2", AD: "bb1 ~@11",
  AE: "c2@2 g2 c3@2 g2 c2@2 g2 c3@2 g2", AF: "bb1@4 f2@2 bb2@3 ~ f2 ~ bb2@3 ~ f2@2 bb1@4 ~@2",
  AG: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", AH: "a2@4 e2@2 a2@4 e2@2 a1@3 ~ e2@2 a2@4 e2@2",
  AI: "g2@4 d2@2 g2@4 d2@2 g1@3 ~ d2@2 g2@4 d2@2", AJ: "c2@4 g1@2 c2@4 ~@2 c2@4 g1@2 c2@3 ~@3",
  AK: "c2@2 g1 c2@2 g1 c2@2 g1 c2@2 ~", AL: "c2@2 ~ c2@2 g1 c2@2 ~ c2@2 g1",
  AM: "c2@4 g1@2 c2@4 ~@2 c2@3 ~ g1@2 c2@3 ~ g1 ~", AN: "bb1@4 f2@2 bb2@3 ~ f2@2 bb1@3 ~ f2@2 bb2 ~ f2@2 gb2@2",
  AO: "g2@4 d2@2 g2@3 ~ d2 ~ g1@3 ~ d2@2 g2@3 ~ d2@2", AP: "db2@4 ab1 ~ db2@5 ~ db2@3 ~ ab1@2 db2@3 ~ ab1 ~",
  AQ: "gb1@4 db2 ~ gb2@4 db2 ~ gb2@3 ~ db2 ~ gb1@3 ~@3", AR: "f2@4 c2 ~ f1@6 a1@5 ~ c2@4 e2@2",
  AS: "f2@4 c2@2 f2@3 ~ c2 ~ f1@3 ~ c2 ~ f2@3 ~ c2@2", AT: "c2@4 g1@2 c2@5 ~ c2@4 ~@2 c2@4 g1@2",
  AU: "c2@4 g1 ~ c2@4 ~@2 c2@4 g1 ~ c2@4 ~@2", AV: "[c2@23 ~]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · drawbar organ
const drawbar_organ = note("<A B A B ~@22 C D ~@22 C D ~@30 C D ~@18>".pickRestart({
  A: "[g6,c7,e7] ~@5 [g6,c7,e7] ~@5 [g6,c7,e7] ~@5 [g6,c7,e7] ~@5", // C
  B: "[a6,c7,f7] ~@5 [a6,c7,f7] ~@5 [a6,c7,f7] ~@5 [a6,b6,f7] ~@5", // F Bm7b5
  C: "[g6,c7]@3 ~@3 [g6,c7]@2 ~@4 [g6,b6]@2 ~@4 [g6,b6]@3 ~@3", D: "[g6,c7] ~@2 [g6,c7] ~@2 [g6,b6] ~@2 [g6,c7] ~@2",
})).s("gm_drawbar_organ").gain(0.35).pan(0.3)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B A B A B C D E F E F G H I B C F C F C F ~@2 A B A B A B C D E F E F G H I B C F C F C F ~@10 A B A B A B C D E
  F E F G H I B C F C F C F ~@2 J C J C J C J C ~@7 K@3
>`.pickRestart({
  A: "~@6 [c4,e4,g4] ~@11 [c4,e4,g4] ~@5", B: "~@6 [c4,f4,a4] ~@11 [c4,f4,a4] ~@5",
  C: "~@6 [d4,f4,bb4] ~@11 [d4,f4,bb4] ~@5", D: "~@6 [d4,g4,c5] ~@11 [d4,g4,b4] ~@5",
  E: "~@6 [d4,g4,bb4] ~@11 [d4,g4,bb4] ~@5", F: "~@6 [c4,eb4,ab4] ~@11 [c4,eb4,ab4] ~@5",
  G: "~@6 [f4,ab4,c5] ~@11 [f4,ab4,c5] ~@5", H: "~@6 [db4,gb4,bb4] ~@11 [db4,gb4,bb4] ~@5",
  I: "~@6 [c4,f4,bb4] ~@11 [c4,f4,bb4] ~@5", J: "~@6 [e4,g4,c5] ~@11 [e4,g4,c5] ~@5",
  K: "[~@6 [g4,c5]@11 ~, ~@23 e4@44 ~@5]/3", // C5
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.4)

// chords · vibraphone
const vibraphone = note(`<
  A B A B C@2 D@2 E@2 F G H@2 I@2 J@2 K@2 L@6 M@2 C@2 D@2 E@2 F G H@2 I@2 J@2 K@2 L@6 M@2 N O ~@2 N O P Q C@2 D@2 E@2 F
  G H@2 I@2 J@2 K@2 L@6 M@2 R@8 N O ~@2 N O P Q S@2
>`.pickRestart({
  A: "e5 ~@2 e5 ~@2 e5 ~@2 e5 ~@2", B: "f5 ~@2 f5 ~@2 f5 ~@2 f5 ~@2", C: "[[c4,e4]@19 ~@3 [f4,a4,c5]@24 ~@2]/2",
  D: "[[e4,g4,c5]@21 ~ [f4,a4,c5]@24 ~@2]/2", E: "[[e4,g4,c5]@21 ~ [f4,a4,c5]@23 ~@3]/2", F: "[f4,bb4,d5]@23 ~",
  G: "[g4,c5]@12 [g4,b4]@11 ~", H: "[g4@21 ~ ab4@24 ~@2]/2", I: "[g4@20 ~@2 ab4@23 ~@3]/2",
  J: "[[ab4,c5]@21 ~ [gb4,bb4]@23 ~@3]/2", K: "[[f4,bb4]@21 ~ [f4,a4]@23 ~@3]/2",
  L: "[[d5,f5]@3 ~@3 [d5,f5]@15 ~ [c5,eb5]@23 ~@3]/2", M: "[~@22 d4@23 ~@3]/2",
  N: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", O: "[d4,f4,bb4] ~@11",
  P: "d5@12 db5@11 ~", Q: "c5 b4", R: "[[c4,e4] ~@5 [c4,e4]@13 ~@3 [f4,bb4]@22 ~@4]/2", S: "[[e4,c5]@15 ~]/2",
})).s("gm_vibraphone").gain(0.3).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@16 A B C@2 ~@6 D@2 ~@3 E F G H@2 ~@4 A B C@2 ~@6 D@2 I J I J I J K L ~@3 M N O P@2 ~@4 A B C@2 ~@6 D@2 Q ~ Q ~ Q ~ Q
  ~ I J I J I J K L R@2
>`.pickRestart({
  A: "[ab5,c6]", B: "[gb5,bb5]@23 ~", C: "[bb5@23 ~ a5@23 ~, f5]/2", D: "g6/2", E: "~@5 [g3,g4] [c4,c5]@3 [d4,d5]@3",
  F: "[e4,e5] [g3,g4]", G: "[f4,f5] [e4,e5] [d4,d5] [c4,c5]", H: "[[d4,d5]@11 ~]/2",
  I: "[e5,c6] ~ [e5,c6] ~ [e5,c6] ~ [e5,c6] ~ [e5,c6] ~ [e5,c6] ~", J: "[d5,bb5] ~@11", K: "d5 db5, a5",
  L: "c5@12 b4@11 ~, g5@23 ~", M: "~ [g4,g5] [c5,c6] [d5,d6]", N: "[e5,e6] [g4,g5]",
  O: "[f5,f6] [e5,e6] [d5,d6] [c5,c6]", P: "[[d5,d6]@47 ~]/2", Q: "~@6 [d5,g5,bb5,e6]@5 ~@13", R: "[[e5,c6]@47 ~]/2",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.8)

// chords · brass section
const brass_section = note(`<
  ~@12 A ~ A ~ B@4 C@4 D@2 ~@2 E@2 F@2 G@4 A ~ A ~ B@4 C@4 D@2 ~@3 H I@2 ~ J K L ~@8 A ~ A ~ B@4 C@4 D@2 ~@2 M@8 ~ H I@2
  ~ J K L N@2
>`.pickRestart({
  A: "~@10 bb3 ~ g4@4 bb4@2 ~@4 ab4@2",
  B: "[~@10 db4 ~ f4@4 ab4@2 ~@4 gb4@8 f4@2 ~@2 f4 ~ eb4@3 ~ db4@2 ~@4 eb4@22 ~@2 f4@25 ~]/4",
  C: "[~@6 [bb3,d4,f4]@4 ~@12 [ab3,c4,eb4]@11 ~ [ab3,c4,f4] ~ [ab3,c4,eb4]@2 ~@4 [ab3,c4,eb4] ~ [ab3,c4,eb4] ~@3]/2", // Bb Ab Fm Ab
  D: "[~@3 [bb3,d4,f4]@2 ~@6 [ab3,c4,eb4]@13]/2", E: "[~@6 [g3,c4,e4]@4 ~ [f3,a3,d4]@13]/2",
  F: "[~@12 [g3,c4,e4]@7 ~@3 [f3,a3,c4]@26]/2", // C F
  G: "[~@12 [g3,c4,e4]@7 ~@3 [f3,a3,d4]@21 ~@3 [f3,bb3,d4]@20 ~@4 c4@14 b3@12, ~@70 [d3,f3]@25 ~]/4", // C Dm Bb Dm
  H: "~@6 [bb3,bb4]@2 ~@2 [a3,a4] ~ [g3,g4]@5 ~ [f3,f4]@4 [eb3,eb4]@2", I: "[[e3,e4]@9 ~@13 [bb3,d4,f5]@26]/2",
  J: "~@6 [bb3,bb4]@2 ~@2 [a3,a4] ~ [g3,g4]@5 ~ c4@6", K: "d4@12 db4@11 ~", L: "c4@12 b3@11 ~",
  M: "[~@6 [c4,e4,g4]@3 ~@13 [bb3,d4,f4]@11 ~ [bb3,d4,g4] ~ [bb3,d4,f4]@2 ~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~@3]/2", // C Bb Gm Bb
  N: "[[g3,c4,e4]@47 ~]/2", // C
})).s("gm_brass_section").gain(0.52).pan(0.2)

// other · orchestral harp
const orchestral_harp = note("<~@11 A ~@7 B ~@15 C D ~@6 B ~@7 A ~@7 E ~@15 B ~@7 F ~@15 G H ~>".pickRestart({
  A: "~@6 g6 e6 [b5,d6] a5 g5 [d5,e5] b4 a4 [e4,g4] d4 b3 [g3,a3] e3 d3 [a2,b2] g2 e2 d2", // Bm Dsus2 Em Gsus2 Asus2
  B: "~@12 f3 g3 [a3,c4] d4 f4 [g4,a4] c5 d5 [f5,g5] a5 c6 [d6,f6]", C: "~@18 d4 [e4,g4] [a4,b4] [d5,e5,g5] a5 [b5,d6]",
  D: "[e6,g6] ~@23", E: "~@12 g3 a3 [b3,d4] e4 g4 [a4,b4] d5 e5 [g5,a5] b5 d6 [e6,g6]",
  F: "g3 a3 [b3,d4] e4 g4 [a4,b4] d4 e4 [g4,a4] b4 d5 [e5,g5] a4 b4 [d5,e5] g5 a5 [b5,d6] d5 e5 [g5,a5] b5 d6 [e6,g6]", // Bm Asus2 Gsus2 Em Dsus2 Bm Gsus2 Em
  G: "~@12 e3 g3 [a3,b3] d4 e4 [g4,a4] b4 d5 [e5,g5] a5 b5 [d6,e6]", H: "g6 ~@23",
})).s("gm_orchestral_harp").gain(0.25).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@17 B A@3 B C ~ A@21 B C D E F A@2 E F A@19 B A B A B C ~ A@8 E F A@2 E F A@2 C ~
>`.pickRestart({
  A: "x!2", B: "x ~@5 x ~@4 x", C: "x", D: "~@11 x", E: "x!6", F: "x ~@4 x!2 ~@5",
})).gain(0.4)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@7 B A@7 C D A D A D A ~@2 A@7 B A@7 E D A D A D A ~@4 A B ~@2 A C A@15 ~ D A D A D A ~@2 D A D A D A D A ~@2 A B
  ~@2 A C ~@2
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2", D: "~ x!3", E: "x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 B ~ A ~ A ~@3 C D E ~ F G E ~ H ~@7 A ~@3 H ~@3 I ~@7 F ~ A ~ A ~ A ~ A
  D E ~ F G E ~ H ~@2
>`.pickRestart({
  A: "~@11 x", B: "~@8 x!4", C: "~@2 x", D: "~@3 x!2 ~", E: "x", F: "~@9 x ~ x", G: "~ x", H: "~@10 x!2", I: "~@6 x!6",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@20 A ~ A ~ A ~@19 A ~ A ~ A ~@27 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@9 A ~>".pickRestart({
  A: "x",
})).gain(0.4)

stack(
  bass, drawbar_organ, electric_guitar_clean, vibraphone, string_ensemble_1, brass_section, orchestral_harp, kick,
  snare, hihat, high_tom, crash
)

More by Jackie Wilson