Strudelify

Papa's Got a Brand New Bag

James Brown

KeyF majorTempo132 bpm
0:00/0:00
// Papa's Got a Brand New Bag — Brown James
// 132 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 4 "guitar" electric guitar clean (copy of ch 2 "DX7" epiano2)
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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 · "bass"
const bass = note(`<
  ~ A@2 B C D E F G B H I J ~ K B C D E F G B H I J ~ K B C D E B C D E B C D E F G B H I J ~ K B C D E F G B H I J ~ K
  B C D E B C D E B C D E B C D L M@4 ~
>`.pickRestart({
  A: "[c2@29 ~@3]/2", B: "f1 ~@2 c3 ~ f2@2 c2", C: "f2@2 ~@4 f1@2 ~@2 f1@2 f2@2 f1 ~", D: "f1@2 ~@4 c3 ~@3 f2@3 ~ c2@2",
  E: "f2 ~@2 f1 ~ f1 c3 f2", F: "bb1 ~@2 bb2 ~ f2@2 ab2", G: "bb2@2 ~@2 bb1@2 bb2@2 ~@2 bb1@3 ~ bb2@2",
  H: "f2@2 ~@4 f1@2 ~@2 f1@2 f2@2 c3 ~", I: "c2@2 ~@4 c2@2 ~@2 c2@3 ~ c2@2", J: "bb1 ~@7", K: "~@4 c2@11 ~",
  L: "f1@2 ~ ab1 ~ a1@2 ~ bb1@2 ~ b1@2 c2 ~@2", M: "[f1@2 ~@10 f1@41 ~@3 f1 ~@7]/4",
})).s("gm_electric_bass_finger").gain(0.5).pan(0.6)

// chords · epiano2 · "DX7"
const epiano2 = note(`<
  ~ A@2 B@4 C@2 B@2 D E F ~ B@4 C@2 B@2 D E F ~ B@12 C@2 B@2 D E F ~ B@4 C@2 B@2 D E F ~ B@15 ~ G@4 H
>`.pickRestart({
  A: "[[c3,g3,bb3,c4,e4]@5 ~@3]/2", B: "~@4 [eb4,g4,c5] ~@7 [eb4,g4,c5] ~@3", C: "~@4 [d4,f4,ab4] ~@7 [d4,f4,ab4] ~@3",
  D: "~@4 [c4,g4,bb4] ~@7 [c4,g4,bb4] ~@3", E: "[d4,f4,ab4] ~@15",
  F: "~@2 [c4,eb4,g4,c5]@2 c5 ~ g4 ~@8 [g4,c5], ~@2 [c4,eb4,g4] [c4,eb4]!5, ~@5 c5@2 [g4,c5]@2 [g4,c5]@2 [g4,c5]@2 [g4,c5]@2 ~", // Cm C5 Cm C5
  G: "[[a3,c4,eb4,f4]@2 ~@10 [f3,c4]@7 ~ c4@2 ~@10 bb4@3 bb4@2 c4 [f3,c4,bb4]@2 [f3,c4,f4,bb4] [f3,c4,eb4,f4,bb4]@12 ~@11, f3 ~@11 [f4,bb4]@13 f4@5 eb4@5 [eb4,f4]@6 ~@23, ~@12 eb4@11 c4@4 f3@11 ~@26, ~@19 f3@3 f3@4 bb4@5 f4@4 ~@29, ~@24 eb4@4 c4@9 ~@27]/4", // F7 F5 Fsus4 Bb5 Ebsus2
  H: "~@7 [f4,bb4]@2 [f4,bb4]@2 ~@5, ~@6 [f3,a3]@5 ~@5, ~@7 c4@4 ~@5", // Bb5 F
})).s("gm_epiano2").gain(0.5).pan(0.8)

// chords · trumpet · "brass"
const trumpet = note(`<
  ~ A@2 B C D E F C B C ~ G ~ H B C D E F C B C ~ G ~ H I@8 B C D E F C B C ~ G ~ H B C D E F C B C ~ G ~ H I@15 J K@4 ~
>`.pickRestart({
  A: "[[e4,c5,e5,g5]@21 ~@11]/2", B: "[c5,f5]@2 ~@10 [bb4,d5] [ab4,c5] [bb4,d5]@2", C: "[ab4,c5] ~@15",
  D: "[c5,f5] ~@11 [bb4,d5] [ab4,c5] [bb4,d5]@2", E: "ab4 ~@7, c5 ~@15",
  F: "[bb4,d5] ~@11 [bb4,d5] [ab4,c5] [bb4,d5]@2", G: "[d4,f4,ab4] ~@15", H: "~@4 [e4,g4,c5,g5]@9 ~@3",
  I: "~@4 [eb4,f4,c5] [c4,eb4,bb4] [eb4,f4,c5] ~@9", J: "f2@2 ~ ab2 ~ a2@2 ~ bb2@2 ~ b2@2 c3 ~@2",
  K: "[~@3 [g4,c5,eb5,g5]@11 ~@2]/4", // Cm
})).s("gm_trumpet").gain(0.5)

// chords · alto sax · "sax"
const alto_sax = note(`<
  ~ A ~ B C D E F G H I ~@3 J B C D E F G H I ~@3 J K@2 L K M K M K B C D E F G H I ~@3 J B C D E F G H I ~@3 J K@2 L K
  M K M K@3 L K M K M N O@4 ~
>`.pickRestart({
  A: "[c3,bb3,c4,e4]", B: "~@4 f2@2 ~@6 bb2 ab2 bb2@2", C: "f2 ~@3 f3 ~@11", D: "f3@2 ~@2 f2@2 ~@6 bb2 ab2 bb2 ~",
  E: "f2 ~@3 f2 ~@11", F: "bb3 ~@3 bb2@2 ~@10", G: "~@4 bb2 ~ bb2 ~@3 bb2 ~@5", H: "~@4 f2 ~@7 f3 ~@3",
  I: "~@4 f2 ~@11", J: "~@2 [c3,bb3]@5 ~", K: "~@4 [f3,eb4] [e3,d4] [f3,eb4] ~@9",
  L: "~@4 [f3,eb4] [e3,d4] [f3,eb4] ~@3 f2 ~@5", M: "~@4 [f3,eb4] [e3,d4] [f3,eb4] ~@5 f2 ~@3",
  N: "f2@2 ~ ab2 ~ a2@2 ~ bb2@2 ~ b2@2 c3 ~@2", O: "[~@6 [f3,c4,eb4,f4]@23 ~@3]/4",
})).s("gm_alto_sax").gain(0.5).pan(0.9)

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

// drums · rim
const rim = s("rim").struct("<~@3 A@9 ~@3 A@9 ~@3 A@17 ~@3 A@9 ~@3 A@15 ~@6>".pickRestart({
  A: "~ x ~ x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@12 A ~ B ~@9 A ~ B ~@17 A ~ B ~@9 A ~ B ~@7 B ~@7 C D ~ E F ~>".pickRestart({
  A: "x", B: "~@14 x!2", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "x!2", E: "~@15 x", F: "x!2 ~ x!3 ~ x!2 ~@7",
})).gain(0.5)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@14 A ~@11 A ~@19 A ~@11 A ~@18 B ~@2>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@5 x ~ x!3 ~ x!3 ~@2",
})).gain(0.25)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@3 A@9 ~ B ~ A@9 ~ B ~ A@17 ~ B ~ A@9 ~ B ~ A@15 ~@6>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@75 [~@3 x ~ x ~@10] ~@4>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~ A ~@12 B ~@11 B ~@19 B ~@11 B ~@16 C ~@4>".pickRestart({
  A: "x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct(`<
  ~
  x
  ~@73
  [~@13 x ~@2]
  [~@13 x ~ x]
  [x!2 ~ x ~ x ~ x!2 ~ x!2 ~ x!2 ~]
  [x ~ x!2 ~ x!2 ~@9]
  ~
>`).gain(0.4)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@76 [~ x ~ x!4 ~ x!3 ~ x ~@3] ~@3>").gain(0.2)

stack(
  bass, epiano2, trumpet, alto_sax, kick, rim, snare, snare_soft, hihat, hihat_soft, mid_tom, crash, ride, ride_soft
)

More by James Brown