Strudelify
KeyE♭ majorTempo125 bpm
0:00/0:00
// Give It Up — KC and The Sunshine Band
// 125 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "Synth Br.1" synth brass 1 (copy of ch 3 "Brass 1" brass section)
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "Fingered Bs."
const bass = note(`<
  ~@4 A B C@2 D E D E D F D E D E D E D F D E D E D E D F D E G H G I G I G J D E D E D F D E D E D E D F D E G H G I G
  I G J D E D E D F D E K E D E K F D E D E D E D F D E D E D E D F D E D E D E D F D E D E D E D F D E ~@2 L M N O P Q
  D E D E D F D E
>`.pickRestart({
  A: "eb2 ~@2 eb2 ~@2 eb2@2 bb1 ~@2 bb1 ~@2 ab1@2", B: "ab1!3 ~ ab1@2 f1@2 ab1 ~@2 ab1 bb1!2 f1 ~",
  C: "[eb2 ~@2 eb2 ~@2 eb2@2 bb1 ~@2 bb1 ~@2 ab1@6 ~@12]/2", D: "eb2!2 ~ eb2 ~@2 eb2@2 bb1 ~@2 bb1 ~@2 ab1!2",
  E: "ab1 ~ ab1 ~ ab1@2 f1@2 ab1 ~ ab1 ~ bb1 ~ bb1 ~", F: "ab1 ~ ab1 ~ ab1@2 f1 ~ ab1 ~ ab1 ~ bb1 ~ bb1 ~",
  G: "ab1 ~@2 ab1 ~@2 ab1 ~ ab1 ~@2 ab1 ~@2 ab1@2", H: "bb1 ~@2 bb1 ~ bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1@2",
  I: "bb1 ~@2 bb1 ~@2 bb1 ~ bb1 ~@2 bb1 ~@2 bb1@2", J: "bb1 ~@2 bb1 ~@2 bb1 ~ bb1 ~@2 bb1 ~@2 bb1 ~",
  K: "eb2!2 ~ eb2 ~@2 eb2@2 f2 ~@2 f2 ~@2 ab1!2", L: "eb2!2 ~@2 eb2 ~ eb2@2 d2 ~@2 d2 ~@2 ab1 ~",
  M: "~@2 ab2 ~@3 ab1 ~ ab1 ~ ab1@2 bb1 ~ bb1 ~", N: "eb2 ~@2 eb2 ~@2 eb2@2 f2 ~@2 f2 ~@2 f2@2",
  O: "ab2 ~@2 ab1 ~@2 ab1 ~ ab1 ~ ab1@2 bb1 ~ bb1@2", P: "eb2 ~@2 eb2 ~@2 eb2@2 d2 ~@2 d2 ~@2 d2@2",
  Q: "ab1 ~@2 ab2 ~@2 ab1 ~ ab1 ~ ab1@2 bb1 ~ bb1 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// other · brass section · "Brass 1"
const brass_section = note(`<
  ~@8 A B C@2 A B D@2 ~@9 E ~@3 E ~@2 A B C@2 A B D@2 ~@3 F ~@3 F ~ E ~@3 E ~@2 A B C@2 A B D@2 ~@9 E ~@3 E ~@8 G@2 ~ E
  ~@3 E ~@18 H ~@10 F ~@3 F
>`.pickRestart({
  A: "~@2 g5 f5 ~ eb5 c5 ~ eb5 ~ c5 ~ bb4 c5 ~@2", B: "~@6 eb5 ~ g5@2 f5 eb5 f5 eb5 ~@2",
  C: "[~@2 g5 f5 ~ eb5 c5 ~ eb5 ~@2 c5 ~@2 bb4@14 ~@4]/2",
  D: "[~@2 g5 f5 ~ eb5 c5 ~ eb5 ~@2 c5 ~@2 bb4@10 ~@2 [bb4,bb5] ~ [bb4,bb5] ~@3]/2", E: "~@4 eb5@3 ~@9",
  F: "~@8 g5@2 f5 eb5 f5 eb5 ~@2", G: "[eb5@23 ~ g5@2 f5 eb5 f5 eb5 ~@2]/2",
  H: "bb5!2 ~ bb5!2 ~ bb5!2 ~ bb5!2 ~ bb5 ~ bb5 ~",
})).s("gm_brass_section").gain(0.6)

// chords · piano · "Honky-tonk"
const piano = note(`<
  A@2 B@2 A@2 C@2 A@2 B@2 A@2 D@2 A@2 B@2 A@2 D@2 A@2 B@2 A@2 D@2 E F G H E F G H A@2 B@2 A@2 D@2 A@2 B@2 A@2 D@2 E F G
  H E F G H ~@8 A@2 B@2 A@2 D@2 A@2 B@2 A@2 D@2 A@2 B@2 A@2 D@2 A@2 B@2 A@2 D@2 A@2 B@2 A@2 D@2 ~@8 A@2 B@2 A@2 C@2
>`.pickRestart({
  A: "[eb3@2 [g3,bb3,eb4] ~ eb3 [g3,bb3,eb4] ~@2 [bb2,f3,bb3,d4] ~@2 [bb2,f3,bb3,d4] ~@2 [ab2,f3,ab3,c4]@7 ~@3 [ab2,f3,ab3,c4]@3 ~ [bb2,f3,bb3,d4]@3 ~]/2", // Eb Bb Fm Bb
  B: "[eb3@2 [g3,bb3,eb4] ~ eb3 [g3,bb3,eb4] ~ eb3 [bb2,f3,bb3,d4] ~@2 [bb2,f3,bb3,d4] ~@2 [ab2,f3,ab3,c4]@8 ~@2 [ab2,f3,ab3,c4]@3 ~ [bb2,f3,bb3,d4]@3 ~]/2", // Eb Bb Fm Bb
  C: "[eb3@2 [g3,bb3,eb4] ~ eb3 [g3,bb3,eb4] ~ eb3 [bb2,f3,bb3,d4] ~@2 [bb2,f3,bb3,d4] ~@2 [ab2,f3,ab3,c4]@8 ~@10]/2", // Eb Bb Fm
  D: "[eb3@2 [g3,bb3,eb4] ~ eb3 [g3,bb3,eb4] ~ eb3 [bb2,f3,bb3,d4] ~@2 [bb2,f3,bb3,d4] ~@2 [ab2,f3,ab3,c4]@8 ~@2 [ab2,eb3,ab3,c4]@4 [bb2,f3,bb3,d4]@3 ~]/2", // Eb Bb Fm Ab Bb
  E: "~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~", // Fm7
  F: "~@2 [f3,bb3,d4] ~@2 [f3,bb3,d4] ~@2 [f3,bb3,d4] ~@2 [f3,bb3,d4] ~@4", // Bb
  G: "[ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~", // Fm7
  H: "~@2 [f3,bb3,d4] ~@2 [f3,bb3,d4] ~@2 [f3,bb3,d4] ~@2 [f3,bb3,eb4]@2 ~ [f3,bb3,d4] ~", // Bb Ebsus2 Bb
})).s("gm_piano").gain(0.5)

// other · orchestra hit
const orchestra_hit = note(`<
  ~@22 A B A B ~@2 A B ~@16 A B A B ~@2 A B ~@10 A B A B A B A B ~@16 A B ~@2 A B ~@34
>`.pickRestart({
  A: "[eb5,eb6] ~@2 [eb5,eb6] ~@2 [eb5,eb6] ~ [bb4,bb5] ~@2 [bb4,bb5] ~@2 [ab4,ab5] ~", B: "[bb4,bb5] ~@15",
})).s("gm_orchestra_hit").gain(0.4)

// other · pad bowed · "Bowed Glass"
const pad_bowed = note("<~@23 A ~@7 A ~@15 A ~@7 A ~@15 A ~@15 A ~@7 A ~@32>".pickRestart({
  A: "~@10 bb4!3 eb5 ~@2",
})).s("gm_pad_bowed").gain(0.32)

// other · string ensemble 2 · "Choir Aahs"
const string_ensemble_2 = note("<~@120 A B C D A B E@2>".pickRestart({
  A: "g5@3 c6", B: "bb5", C: "f5@3 bb5", D: "eb5", E: "[f5@4 bb5@3 eb5@8 ~]/2",
})).s("gm_string_ensemble_2").gain(0.16)

// other · epiano2 · "E.piano 2"
const epiano2 = note(`<
  ~ A B A B ~@11 C A D A E A B ~ C A D A E A B ~ F G H I H J K J C A D A E A B ~ C A D A E A B ~ F G H I H J K J C A D A
  E A B ~ C A D A E A B ~ C A D A E A B ~ C A D A E A B ~ C A D A E A B ~ C A D A E A B ~@9 C A D A E A B ~
>`.pickRestart({
  A: "~@4 ab4 g4 c5 bb4", B: "eb4 ~@3", C: "~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~@4", D: "eb4@3 ~@13",
  E: "eb4 [eb5,g5,bb5] ~ [eb5,g5,bb5] ~@4", F: "~@2 ab4@2 ~ ab4@2 ~@9", G: "~@2 bb4@2 ~ bb4@2 ~@9",
  H: "~ ab4 ~ ab4 ~@4", I: "~ bb4 ~ bb4 ~ eb5 ~ eb5", J: "~ bb4 ~ bb4 ~@4", K: "~@3 ab4@2 ~ ab4@2 ~@8",
})).s("gm_epiano2").gain(0.24)

// other · guitar harmonics · "Gt. Harmonics"
const guitar_harmonics = note("<~@17 A ~ B ~ C ~ D E@2 F@6 ~@9 A ~ B ~ C ~ D E@2 F@6 ~@32 E@2 F@6 ~@32>".pickRestart({
  A: "~@4 eb3 ~@3 eb3 ~@2 eb3@2 ~ eb3 ~", B: "~@4 eb3@2 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~",
  C: "~@4 eb3@2 ~@2 eb3 ~@2 eb3@2 ~ eb3 ~", D: "~@4 eb4@2 ~@2 eb4@2 ~ eb4@2 ~ eb4 ~", E: "eb5!5 ~ eb5!6 ~@4",
  F: "eb5!4 ~@2 eb5!6 ~@4",
})).s("gm_guitar_harmonics").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@3 B A@79 ~ A@24 B ~ B C B D A E A@8>".pickRestart({
  A: "x!4", B: "x", C: "x ~@6 x", D: "~@4 x ~ x!2", E: "x!2 ~@2",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct("<~@8 A@48 ~@16 A@14 B ~ A@24 ~@8 A@8>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@39 A ~@7 A ~@15 B ~@7 C ~@47 D ~@7 A>".pickRestart({
  A: "~@10 x!2 ~ x!3", B: "~@2 x ~ x!2 ~ x!2 ~ x!6", C: "~@2 x!3 ~@2 x!2 ~ x!6", D: "~@2 x ~ x ~@2 x!2 ~ x!6",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct(`<
  ~@8
  [~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x]!48
  ~@8
  [~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x]!23
  ~
  [~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x]!40
>`).gain(0.42)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!48
  ~@16
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!15
  ~
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!24
  ~@2
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!14
>`).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8
  [~ x ~ x ~ x ~ x]!48
  ~@16
  [~ x ~ x ~ x ~ x]!15
  ~
  [~ x ~ x ~ x ~ x]!24
  ~@2
  [~ x ~ x ~ x ~ x]!14
>`).gain(0.42)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 [x!16]!48 ~@16 [x!16]!15 ~ [x!16]!24 ~@2 [x!16]!14>").gain(0.28)

// drums · ht
const ht = s("ht").struct("<~@3 A ~@19 B ~@7 A ~@23 A ~@23 A ~@15 A ~@7 A ~@7 A ~@16>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~@2 x ~@3 x ~ x ~@2 x ~@2 x!2",
})).gain(0.42)

// drums · mt
const mt = s("mt").struct("<~@3 [~ x] ~@124>").gain(0.42)

// drums · shaker
const shaker = s("sh").struct("<~@8 [x!16]!48 ~@16 [x!16]!40 ~@2 [x!16]!14>").gain(0.42)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@71 [~@5 x ~@2] ~@56>").gain(0.61)

stack(
  bass, brass_section, piano, orchestra_hit, pad_bowed, string_ensemble_2, epiano2, guitar_harmonics, kick, snare,
  snare_soft, clap, hihat, open_hat, crash, tambourine, ht, mt, shaker, woodblocks
)

More by KC and The Sunshine Band