Strudelify
United cover art

1994 · Life In The Streets

United

Prince Ital Joe

KeyC majorTempo100 bpm
0:00/0:00
// United — Prince Ital Joe
// 100 bpm, 4/4, key C 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(100/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 · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@16 A B C D A B C D E F G H I J K L M@3 N M@3 N M@3 N M@3 N M@3 N M@3 N A B C D A B C D E F G H I J K L M@3 N M@3 N
  M@3 N M@3 N M@3 N M@3 N A B C D A B C D E F G H I J K L A B C D A B C D E F G H I J O@3
>`.pickRestart({
  A: "a1@2 ~@2 a1 a1@2 ~ a1@2 ~ a1 a1@2 d2 ~", B: "f2@2 ~@2 f2 f2@2 ~ f2@2 ~ f2 f2@2 g2 c3",
  C: "c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2 c2@2 e2@2", D: "c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2 c2@2 b1 ~",
  E: "a1@2 ~@2 a1 a1@2 ~ a1@2 ~ a1!2 ~ a1 ~", F: "a#1@2 ~@2 a#1!2 ~@2 a#1@2 ~ a#1!2 ~ a#1 ~",
  G: "c2@2 ~@2 c2!2 ~@2 c2@2 ~ c2!2 ~ c2 ~", H: "d2@2 ~@2 d2!2 ~@2 d2@2 ~ d2 d2@2 c2@2",
  I: "f1@2 ~@2 f1@2 ~@2 f1@2 ~ f1!2 ~ f1 ~", J: "g1@3 ~ g1@2 ~@2 g1@2 ~ g1!2 ~ g1 ~",
  K: "c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2!2 ~ c2 ~", L: "c2@3 ~ c2@2 ~@2 c2@2 ~ c2 b1 ~ b1 ~",
  M: "a1 ~ a1 ~ a1!2 ~@2 a1@2 ~ a1!2 ~ a1 ~", N: "f1 ~ f1 ~ f1!2 ~@2 g1@2 ~ g1!2 ~ g1 ~", O: "[c2@41 ~@7]/3",
})).s("gm_synth_bass_2").gain(0.56)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  A@8 B C D E@2 F G@2 H@8 I J K L@5 ~@16 M ~@2 N M O P@2 Q@8 I J K L@5 ~@16 M ~@2 N M O P@2 H@8 I J K L@5 H@8 I J K R@5
  ~
>`.pickRestart({
  A: "[[a2,e4,a4] [f2,a3,f4] [c2,g3]@2 [a2,a4] [f2,a3,f4] [c2,g3,e4]@2, c4, ~@2 e4@3 ~@3]/8", B: "[a2,a4]",
  C: "[a#2,f4,a#4]", D: "[c3,e4,g4]", E: "[[d3,d4,a4] [f3,a3,c4], f4]/2", F: "[g3,b3,d4,g4]", G: "[c3,g3,c4,e4]/2",
  H: "[e4@16 f4@15 g4@32 ~@17 f4@16 [e4,g4]@32, c4, a4@31 e4@48 ~@49, ~@2 a4 ~]/8", I: "a4", J: "[f4,a#4]",
  K: "[e4,g4,c5]", L: "[[d5,f5]@4 f4@4 d5@4 e4@6 [e4,g4,c5] [d4,g4,b4], a4@4 g4@5 ~, ~@2 c5@7 ~]/5", M: "[e4,a4]",
  N: "d4", O: "[d4,g4]", P: "[f4@3 g4]/2", Q: "[e4 f4 g4@2 ~ f4 [e4,g4]@2, c4, a4@2 e4@3 ~@3, ~@2 a4 ~]/8",
  R: "[[d5,f5]@2 f4@2 g4@5 ~, a4@2 d5 ~@2, ~@2 c5@7 ~]/5", // Dm
})).s("gm_pad_warm").gain(0.2)

// chords · pad warm · "WARM PAD" · soft notes
const pad_warm_soft = note("<~@49 A B@2 ~@2 C@2 ~@33 A B@2 ~@2 C@2 ~@33>".pickRestart({
  A: "[d4,g4]", B: "[f4@3 g4, c4 ~]/2", C: "[c4@15 d4@16 ~]/2",
})).s("gm_pad_warm").gain(0.14)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@16 A B C D A B C D E F G H I J G K ~@16 L ~@2 M L ~@2 M A B C D A B C D E F G H I J G K ~@16 L ~@2 M L ~@2 M A B C D
  A B C D E F G H I J G K A B C D A B C D E F G H I J ~@3
>`.pickRestart({
  A: "~@2 [c4,e4] ~@2 [c4,e4] ~@2 [c4,e4] ~@2 [c4,e4] ~@2 [c4,e4] ~", // C
  B: "~@2 [c4,f4] ~@2 [c4,f4] ~@2 [c4,f4] ~@2 [c4,f4] ~@2 [c4,f4] ~", // F5
  C: "~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] f5", // C
  D: "~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,f5] ~@2 [c5,e5] ~", // C F5 C
  E: "~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~", // Am
  F: "~@2 [a#3,c4,f4] ~@2 [a#3,c4,f4] ~@2 [a#3,c4,f4] ~@2 [a#3,c4,f4] ~@2 [a#3,c4,f4] ~", // A#sus2
  G: "~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~", // C
  H: "~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~", // Dm
  I: "~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~", // F
  J: "~@2 [g3,c4,d4] ~@2 [g3,c4,d4] ~@2 [g3,c4,d4] ~@2 [g3,c4,d4] ~@2 [g3,c4,d4] ~", // Gsus4
  K: "~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [b3,d4,g4] ~", L: "[e5,a5] ~@3 [e5,a5] ~@11",
  M: "[a4,d5] ~@3 [a4,d5] ~@3 [d5,g5] ~@3 [d5,g5] ~@3", // D5 G5
})).s("gm_synth_brass_1").gain(0.18)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@16 A B C@2 A B D E A F D G B H I@2 ~@16 J ~@2 K L ~@2 M A B C@2 A B D E A F D G B H I@2 ~@16 J ~@2 K L ~@2 M A B C@2
  A B D E A F D G B H I@2 A B C@2 A B D E A F D G B H N@2 ~
>`.pickRestart({
  A: "[a2,e3]@15 ~", B: "[f2,c3]@15 ~", C: "[[c3,g3]@28 [b2,f#3]@3 ~]/2", D: "[c3,g3]@15 ~",
  E: "[c3,g3]@7 ~ [c3,g3]@4 [b2,f#3]@3 ~", F: "f3, a#2@7 ~", G: "[d3,a3]@15 ~", H: "[g2,d3]@15 ~",
  I: "[[c3,g3]@23 ~ [c3,g3]@4 [b2,f#3]@3 ~]/2", J: "[a2,e3] ~ [a2,e3]@2 ~@4",
  K: "[d2,a2]@3 ~ [d2,a2]@2 ~@2 [g2,a2,d3]@3 ~ [g2,d3]@2 ~@2", L: "[a2,e3]@2 ~@2 [a2,e3]@3 ~@9",
  M: "[d2,a2]@2 ~@2 [d2,a2]@3 ~ [g2,d3]@2 ~@2 [g2,d3]@3 ~", N: "[[c3,g3]@23 ~@9]/2",
})).s("gm_distortion_guitar").gain(0.11)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@32 A@3 B A@3 C A@3 B A@3 C D E F G D E F G ~@16 A@3 B A@3 B A@3 B A@3 C D E F G D E F G ~@33
>`.pickRestart({
  A: "~@2 [a3,d4,e4] ~@3 [a3,d4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4] ~", // Asus4 Am
  B: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // F G
  C: "~@2 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [b3,d4] ~@3 [g3,b3,d4] ~", // F Bm G
  D: "~@2 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~", // Am
  E: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  F: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // F
  G: "~@2 [d4,f4,a4] ~@3 [d4,f4,a4] ~@3 [d4,g4,c5] ~@3 [d4,g4,b4] ~", // Dm Csus2 G
})).s("gm_epiano2").gain(0.48)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@16 A B C ~ D E C ~ F G H I J K L M N@3 O N@3 P Q R S T U R S V ~@8 A B C ~ D E C ~ F G H I J K L M N@3 O N@3 P Q R S
  T U R S V ~@8 A B C ~ D E C ~ F G H I J K L M A B C ~ D E C ~ F G H I J K ~@3
>`.pickRestart({
  A: "[a1,c4]@13 ~@3, a4@11 ~@5", B: "[f1,a3,f4]@3 ~", C: "[c2,g3,e4]@9 ~@7", D: "[a1,c4,a4]@11 ~@5",
  E: "[f1,a3,f4]@11 ~@5", F: "[a1,c4,g4]@3 ~", G: "[a#1,c4,g4]@11 ~@5", H: "[c2,g3,e4]@3 ~", I: "[d2,a3,f4]@3 ~",
  J: "[c4,a4]@13 ~@3, f2@15 ~", K: "[g2,b3,g4]@13 ~@3", L: "[c2,e3,c4] ~", M: "~@8 [c2,e3,c4]@4 [b1,d3,b3]@3 ~",
  N: "~@2 [e3,a3,d4] ~@3 [e3,a3,d4] ~@3 [e3,a3,c4] ~@3 [e3,a3,c4] ~", // Dsus2 Am
  O: "~@2 [f3,a3] ~@3 [c3,f3,a3] ~@3 [d3,g3,c4] ~ [d3,g3,c4] ~ [d3,g3,b3] ~", // F Csus2 G
  P: "~@2 [c3,f3,a3] ~@3 [c3,f3,a3] ~@3 [d3,g3,c4] ~ [d3,g3,c4] ~ [d3,g3,b3] ~", // F Csus2 G
  Q: "[e3,a3,d4]@2 ~@2 [e3,a3,d4]@2 ~@2 [e3,a3,c4]@2 ~@2 [e3,a3,c4] ~ [e3,a3,d4]@2", // Dsus2 Am Dsus2
  R: "~@2 [e3,a3,d4]@2 ~@2 [e3,a3,d4] ~ [e3,a3,c4]@2 ~@2 [e3,a3,c4]@2 ~@2", // Dsus2 Am
  S: "[e3,a3,d4]@2 ~@2 [e3,a3,d4]@2 ~@2 [e3,a3,c4]@2 ~@2 [e3,a3,c4] ~ [a2,c3,f3]@2", // Dsus2 Am F
  T: "~@2 [a2,c3,f3]@2 ~@2 [a2,c3,f3] ~ [b2,d3,g3]@2 ~@2 [b2,d3,g3]@2 ~@2", // F G
  U: "[e3,a3,d4]@2 ~@2 [e3,a3,d4]@2 ~@2 [e3,a3,c4]@2 ~@2 [a3,c4] ~ [e3,a3,d4]@2", // Dsus2 Am Dsus2
  V: "~@2 [a2,c3,f3]@2 ~@2 [a2,c3,f3] ~ [b2,d3,g3]@2 ~@2 [b2,d3] ~@3, ~@6 g3 ~", // F G Bm
})).s("gm_piano").gain(0.2).pan(0.6)

// chords · church organ · "CHURCH ORG"
const church_organ = note(`<
  A B C@2 A B C@2 A D E F G H I@2 ~@2 J K ~@2 J K ~@24 L M N O L M N P ~@2 J K ~@2 J K ~@24 Q R S T Q R S U ~@18 J K ~@2
  J K ~@6 V@3
>`.pickRestart({
  A: "[a2,e5]", B: "[f2,f5]", C: "[g5 f5, c2]/2", D: "[a#2,f5]", E: "[c3,g5]", F: "[d3,a5]", G: "[f3,a5]", H: "[g3,g5]",
  I: "[c3,c6]/2", J: "~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] f5",
  K: "~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] ~@2 [c5,f5] ~@2 [c5,e5] ~", // C F5 C
  L: "e5 a4 e5 a4 e5 a4 e5 a4, a4 ~ e4 ~ a4 ~ e4 ~ a4 ~ e4 ~ a4 ~ e4 ~",
  M: "d5 a4 d5 a4 d5 a4 d5 a4, g4 ~ d4 ~ g4 ~ d4 ~ g4 ~ d4 ~ g4 ~ d4 ~",
  N: "c5 a4 c5 a4 c5 a4 c5 a4, f4 ~ c4 ~ f4 ~ c4 ~ f4 ~ c4 ~ f4 ~ c4 ~",
  O: "d5@2 a4@2 d5@2 a4@2 g4 ~ g4 ~ g4 ~ g4 ~, f4 ~ d4 ~ g4 ~ d4 ~ c5@4 b4@4",
  P: "d5@2 a4@2 d5@2 a4@2 c5@2 a4@2 [g4,b4] ~ g4 ~, f4 ~ d4 ~ f4 ~ d4 ~ g4 ~ g4 ~@5", Q: "e5 a4 e5 a4 e5 a4 e5 a4",
  R: "d5 a4 d5 a4 d5 a4 d5 a4", S: "c5 a4 c5 a4 c5 a4 c5 a4", T: "d5 a4 d5 a4 c5@2 b4@2",
  U: "d5@2 a4@2 d5@2 a4@2 c5@2 a4@2 b4 ~@3", V: "[~ f4@8 e4@2 d4@2 e4@29 ~@6, [c3,g3,c4]@7 ~]/3",
})).s("gm_church_organ").gain(0.11)

// chords · church organ · "CHURCH ORG" · soft notes
const church_organ_soft = note("<~@88 A B C D A B C E ~@33>".pickRestart({
  A: "a4 ~ e4 ~ a4 ~ e4 ~ a4 ~ e4 ~ a4 ~ e4 ~", B: "g4 ~ d4 ~ g4 ~ d4 ~ g4 ~ d4 ~ g4 ~ d4 ~",
  C: "f4 ~ c4 ~ f4 ~ c4 ~ f4 ~ c4 ~ f4 ~ c4 ~", D: "f4 ~ d4 ~ g4 ~ d4 ~ g4 ~ g4 ~ g4 ~ g4 ~",
  E: "f4 ~ d4 ~ f4 ~ d4 ~ g4 ~ g4 ~ g4 ~ g4 ~",
})).s("gm_church_organ").gain(0.07)

// other · kalimba
const kalimba = note("<~@40 A B C D A B E D ~@32 A B C D A B E D ~@41>".pickRestart({
  A: "~@2 a5 ~ c6 a5 d6 a5 e6 a5 d6 a5 c6 a5 d6 a5", B: "~ a5!3 c6 a5 d6 a5 e6 a5 d6 a5 c6 a5 d6 a5",
  C: "~@6 a5!4 d6 a5 e6 a5!3", D: "a5!4 d6 a5 e6 a5 f6 a5 e6 a5 d6 c6!3", E: "a5 ~@5 a5!4 d6 a5 e6 a5!3",
})).s("gm_kalimba").gain(0.15).pan(0.6)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@16 [x!4]!39 ~ [x!4]!39 ~ [x!4]!30 ~@3>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~ x ~ x ~ x ~ x]!39 ~ [~ x ~ x ~ x ~ x]!39 ~ [~ x ~ x ~ x ~ x]!30 ~@3>")
  .gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!4]!39
  ~
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!4]!39
  ~
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!4]!30
  ~@3
>`).gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@7 A ~@31 A ~@7 A ~@31 A ~@7 A ~@7 A ~@7 A ~@5 A ~@2>".pickRestart({
  A: "x",
})).gain(0.35)

stack(
  bass, pad_warm, pad_warm_soft, synth_brass_1, distortion_guitar, epiano2, piano, church_organ, church_organ_soft,
  kalimba, kick, snare, hihat, open_hat, tambourine, crash
)

More by Prince Ital Joe