Strudelify

Give It Up

Cut 'n' Move

KeyE♭ majorTempo120 bpm
0:00/0:00
// Give It Up — Cut 'n' Move
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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@6 B@2 A@24 C D E F C D E G A@16 C D E F C D E G ~@8 A@14 B@2 A@24 ~@8 A@8 H>".pickRestart({
  A: "[eb3@2 [g3,c4,eb4] ~ eb3 [g3,eb4]@2 ~ [bb2,f3,bb3,d4] ~ bb3 [bb2,f3,bb3,d4] ~@2 [ab2,f3,ab3,c4,eb4]@5 ~@5 [ab2,f3,ab3,c4,eb4]@2 ~@2 [bb2,f3,bb3,d4]@2 ~@2, ~@5 c4 ~@26]/2", // Cm Bb Fm7 Bb
  B: "[eb3@2 [g3,c4,eb4] ~ eb3 [g3,eb4]@2 ~ [bb2,f3,bb3,d4] ~ bb3 [bb2,f3,bb3,d4] ~@2 [ab2,f3,ab3,c4,eb4]@5 ~@13, ~@5 c4 ~@26]/2", // Cm Bb Fm7
  C: "[ab2,ab3,c4,eb4] ~@3 [ab2,ab3,c4,eb4] ~@2 [ab2,ab3,c4,f4] ~@2 [ab2,ab3,c4,f4] ~@3 [ab2,ab3,c4,f4] ~", // Ab Fm
  D: "[bb2,g3,bb3,d4] ~@3 [bb2,f3,bb3,d4] ~@2 [bb2,g3,bb3,d4] ~@2 [bb2,g3,bb3,d4] ~@5", // Gm Bb Gm
  E: "[ab2,f3,ab3,c4,eb4] ~@3 [ab2,f3,ab3,c4,eb4] ~@2 [ab2,ab3,c4,f4] ~@2 [ab2,ab3,c4,f4] ~@3 [ab2,ab3,c4,f4] ~", // Fm7 Fm
  F: "[g3,bb3,d4] ~@3 [f3,bb3,d4] ~@2 [g3,bb3,d4,f4] ~@2 [g3,bb3,d4,g4] ~ [g3,bb3,d4,f4] ~@3", // Gm Bb Gm7 Gm Gm7
  G: "[g3,bb3,d4] ~@3 [f3,bb3,d4] ~@2 [g3,bb3,d4,f4] ~@2 [g3,bb3,d4,f4] ~@3 [g3,bb3,d4,f4] ~", H: "[g3,bb3,eb4] ~@7",
})).s("gm_piano").gain(0.37).pan(0.7)

// other · brass section
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 B ~ E ~@3 E ~@2 A B C@2 A B D@2 ~@9 E ~@12 G@2 ~ E ~@3 E
  ~@10 H ~@7 H ~@7 A B C@2 A B D@2 I
>`.pickRestart({
  A: "~@2 [g4,g5] [f4,f5] ~ [eb4,eb5] [c4,c5] ~ [eb4,eb5] ~ [c4,c5] ~ [bb3,bb4] [c4,c5] ~@2", // G F Eb C Eb C Bb C
  B: "~@6 [eb4,eb5] ~ [g4,g5]@2 [f4,f5] [eb4,eb5] [f4,f5] [eb4,eb5] ~@2", // Eb G F Eb F Eb
  C: "[~@2 [g4,g5] [f4,f5] ~ [eb4,eb5] [c4,c5] ~ [eb4,eb5] ~@2 [c4,c5] ~@2 [bb3,bb4]@16 ~@2]/2", // G F Eb C Eb C Bb
  D: "[~@2 [g4,g5] [f4,f5] ~ [eb4,eb5] [c4,c5] ~ [eb4,eb5] ~@2 [c4,c5] ~@2 [bb3,bb4]@12 [bb4,bb5] ~ [bb4,bb5] ~@3]/2", // G F Eb C Eb C Bb
  E: "~@4 [eb4,eb5]@3 ~@9", F: "~@8 [g4,g5]@2 [f4,f5] [eb4,eb5] [f4,f5] [eb4,eb5] ~@2",
  G: "[~@4 [eb4,eb5]@18 [eb4,eb5] ~ [g4,g5]@2 [f4,f5] [eb4,eb5] [f4,f5] [eb4,eb5] ~@2]/2", // Eb G F Eb F Eb
  H: "[bb4,bb5]!2 ~ [bb4,bb5]!2 ~ [bb4,bb5]!2 ~@8", I: "[eb5,eb6] ~@15",
})).s("gm_brass_section").gain(0.57)

// other · epiano1
const epiano1 = note("<~@24 A@7 B ~@15 C A@7 B ~@15 C ~@15 C A@7 D ~@33>".pickRestart({
  A: "eb7!5 ~ eb7!6 ~@4", B: "eb7!5 ~ eb7!2 ~@2 bb6!3 eb7 ~@2", C: "~@10 bb6!3 eb7 ~@2",
  D: "eb7!5 ~ eb7!4 bb6!3 eb7 ~@2",
})).s("gm_epiano1").gain(0.21).pan(0.6)

// other · soprano sax
const soprano_sax = note(`<
  ~@17
  [~@4 eb6 ~@2 eb6 ~@2 eb6 ~@2 eb6 ~@2]
  ~
  [~@4 eb6 ~@2 eb6 ~@2 eb6 ~@2 eb6 ~@2]
  ~
  [~@4 eb7 ~@2 eb7 ~@2 eb7 ~@2 eb7 ~@2]
  ~@107
>`).s("gm_soprano_sax").gain(0.19).pan(0.6)

// chords · brass section
const brass_section_2 = note(`<
  ~ A B A ~@12 C A B A D A B A C A B A D A B A E F E G E F E F C A B A D A B A C A B A D A B A E F E G E F E F C A B A D
  A B A C A H A D A H A C A B A D A B A C A B A D A B A C A H A D A H A C A H A D A H A ~@8 C A B A D A B A I
>`.pickRestart({
  A: "~@4 [eb4,ab4] ~ [g4,c5] [f4,bb4]", B: "eb4@3 ~@13", C: "~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~@4",
  D: "eb4 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~@4", E: "~ [eb4,ab4] ~ [eb4,ab4] ~@4", F: "~ [f4,bb4] ~ [f4,bb4] ~@4",
  G: "~ [f4,bb4] ~ [f4,bb4] ~ [bb4,eb5] ~ [bb4,eb5]", H: "eb4@3 ~@11 [eb4,ab4]@2", I: "[g4,bb4,eb5] ~@7",
})).s("gm_brass_section").gain(0.08).pan(0.3)

// other · muted trumpet
const muted_trumpet = note(`<
  ~@22 A B A B ~@2 A B ~@10 C ~@5 A B A B ~@2 A B ~@10 A B A B A B A B ~@8 D ~@7 A B ~@2 A B ~@35
>`.pickRestart({
  A: "eb5@2 ~ eb5@2 ~ eb5@2 bb4@2 ~ bb4@2 ~ ab4@2", B: "bb4 ~@7", C: "eb5 ~@7", D: "eb5@3 ~@13",
})).s("gm_muted_trumpet").gain(0.24)

// other · epiano1
const epiano1_2 = note(`<
  ~@4 A B A C D E D E D E D E D E D E D E D E D E D E D E D F G H G I G H G H D E D E D E D E D E D E D E D F G H G I G
  H G H D E D E D E D F J E K E J E K L D E D E D E M@2 D E D E D E D F J E K E J E K L J E K E J E K L N ~ O P J E O P
  D E D E D E D Q R
>`.pickRestart({
  A: "eb3@2 ~ eb3@2 ~ eb3 ~ bb2@2 ~ bb2@2 ~ ab2@2", B: "~@2 ab2 ~ ab2@2 f2@2 ab2@2 ~ eb2@2 ~ eb2@2", C: "ab2@5 ~@11",
  D: "eb3!2 ~ eb3@2 ~ eb3 ~ bb2@2 ~ bb2@2 ~ ab2@2", E: "~@2 ab2 ~ ab2 ~ f2@2 ab2@2 ~ eb2@2 ~ eb2@2",
  F: "~@2 ab2 ~ ab2 ~ f2@2 ab2@2 ~ bb2@2 ~ eb2@2", G: "ab2!2 ~@4 ab2 ~@4 ab2!2 ~ ab2 ~",
  H: "bb2!2 ~@4 bb2 ~@4 bb2!2 ~ bb2 ~", I: "bb2!2 ~@4 bb2 ~@3 eb3 ~ bb2 ~ eb3 ~",
  J: "eb3!2 ~ eb3@2 ~ eb3 ~ f3@2 ~ f3@2 ~ ab3@2", K: "eb3!2 ~ eb3@2 ~ eb3 ~ d3@2 ~ d3@2 ~ ab2@2",
  L: "~@2 ab2 ~ ab2 ~ f2@2 ab2@2 ~ eb2@2 ~ f2@2", M: "[eb3!2 ~ eb3@2 ~ eb3 ~ bb2@2 ~ bb2@2 ~ ab2@11 ~@7]/2",
  N: "eb3 ~@15", O: "eb3!2 ~ eb3@2 ~ eb3 ~ d3 ~@2 d3@2 ~ ab2@2", P: "~@2 ab3 ~ ab2 ~ f2@2 ab2@2 ~ eb2@2 ~ eb2@2",
  Q: "~@2 ab2 ~ ab2 ~ f2@2 ab2@2 ~ bb2@2 ~ bb2@2", R: "eb2 ~@7",
})).s("gm_epiano1").gain(0.48)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@7 B A@23 B A@7 B A@8 ~@7 C ~@7 D A@15 ~ A@7 B A@16 E ~ F@5 B A@7 B ~
>`.pickRestart({
  A: "~@4 x ~@7 x ~@2 x", B: "~@4 x ~ x!10", C: "~@7 x!4 ~ x!4", D: "~@8 x!4 ~ x!2 ~", E: "~ x ~@2", F: "~ x ~ x",
})).gain(0.4)

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

// drums · hihat
const hihat = s("hh").struct("<~@4 A@3 B C@48 A@16 C@15 B C@24 D ~ C@14 B>".pickRestart({
  A: "x!4", B: "x", C: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", D: "x!2 ~ x!3 ~ x ~@8",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@48 ~@8 A@23 ~ A@24 B ~ A@14 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.3)

// 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 A
>`.pickRestart({
  A: "x",
})).gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@8 A@8 ~@8 A@8 ~@16 A@8 ~@16 A@15 ~ A@24 B ~@7 A@8 C>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x",
})).gain(1.11)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@8 A@7 B ~@8 A@7 B ~@16 A@7 B ~@16 A@7 B A@7 ~ A@7 B A@7 B A@7 B C ~@7 A@8 ~
>`.pickRestart({
  A: "x ~@5 x!3 ~@5 x!2", B: "x ~@5 x!3 ~@7", C: "x ~@5 x!2 ~@8",
})).gain(1.11)

// drums · congas
const congas_3 = s("conga:33").struct("<~@8 A@8 ~@8 A@8 ~@16 A@8 ~@16 A@15 ~ A@24 B ~@7 A@8 ~>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~ x ~@6",
})).gain(1.11)

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

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@3 [~@9 x ~@6] ~@27 [~@9 x ~@6] ~@23 [~@9 x ~@6] ~@73>").gain(0.25)

// drums · mt
const mt = s("mt").struct("<~@3 [~ x] ~@27 [~ x] ~@23 [~ x] ~@73>").gain(0.45)

// drums · shaker
const shaker = s("sh").struct("<~@8 [x!8]!56 ~@8 [x!8]!40 [x!4 ~@4] ~@7 [x!8]!8 x>").gain(0.2)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@8
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!56
  ~@8
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!40
  [~ x ~ x ~ x ~ x ~@8]
  ~@7
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!8
  ~
>`).gain(0.05)

stack(
  piano, brass_section, epiano1, soprano_sax, brass_section_2, muted_trumpet, epiano1_2, kick, snare, clap, hihat,
  open_hat, crash, congas, congas_2, congas_3, ht, ht_soft, mt, shaker, shaker_soft
)