Strudelify

Word Up

Cameo

KeyF♯ minorTempo122 bpm
0:00/0:00
// Word Up — Cameo
// 122 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 5 "GUITAR" named as a guitar, played on electric guitar clean (its clavinet patch is not one); ch 7 "organ" named as an organ, played on drawbar organ (its synth strings 2 patch is not one)
// note: duplicate parts dropped: ch 2 "BASS" synth bass 2 (copy of ch 1 "BASS" slap bass 1); ch 6 "GUITAR" electric guitar clean (copy of ch 5 "GUITAR" electric guitar clean)
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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 · slap bass 1 · "BASS"
const bass = note(`<
  ~@4 A B C D E F G D H I J K H I J K L I J K H I J K M N O P Q N O P H I J K H I J K L I J K L I J K M N O P Q N O P H
  R H@3 R H@2 S R S H S R S H M N O P Q N O P T U V W T U V W X Y Z AA X Y Z AA M N O P Q N O AB
>`.pickRestart({
  A: "f#1 ~@5 f#1@2 ~@8", B: "e1 ~ e1 ~@3 e1 ~@9", C: "d1 ~@5 d1 ~ e1@2 ~@4 e1 ~", D: "f#1 ~ f#1 ~@3 f#1@2 ~@8",
  E: "f#1@15 ~", F: "e1@15 ~", G: "d1 ~@5 d1@2 e1 ~@5 e1 ~", H: "[f#1,f#2] ~@2 [f#1,f#2] ~@4",
  I: "[e1,e2] ~ e2@2 ~@2 [e1,e2]@2 ~@8, ~@2 e1 ~@13", J: "[d1,d2]@2 ~@4 [d1,d2] ~ e1@2 ~@4 [e1,e2] ~, ~@8 e2 ~@7",
  K: "[f#1,f#2] ~ f#2@2 ~@2 f#2@2 ~@6 [e1,e2]@2, ~@2 f#1 ~@3 f#1 ~@9", L: "[f#1,f#2] ~@5 [f#1,f#2]@2 ~@8",
  M: "f#1 ~@5 f#1@6 ~@4", N: "e1 ~ e1 ~@3 e1@8 ~@2", O: "d1 ~@5 d1 ~ e1 ~@5 e1 ~", P: "f#1 ~ f#1 ~@3 f#1@9 ~",
  Q: "f#1 ~@2 f#1@3 ~@2", R: "f#1 ~@2 f#2 ~@4, f#2 ~@5 f#1 ~@9", S: "[f#1,f#2]@2 ~@4 [f#1,f#2]@2 ~@4 b1@3 a1",
  T: "f#2@2 ~@4 f#2 ~@5 b2@3 a2", U: "f#2 ~@5 f#2@2 ~@8", V: "f#2 ~@5 f#2@2 ~@4 b2@3 a2", W: "f#2 ~@5 f#2 ~@9",
  X: "[f#1,f#2]@5 ~ [f#1,f#2]@9 ~", Y: "[e1,e2]@4 ~@2 [e1,e2]@9 ~",
  Z: "d1@2 ~@4 [d1,d2]@2 [e1,e2] ~@5 [e1,e2] ~, d2 ~@15", AA: "[f#1,f#2]@2 ~ [f#1,f#2]@4 ~",
  AB: "f#1 ~ f#1 ~@3 f#1 ~@9",
})).s("gm_slap_bass_1").gain(0.8)

// other · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@4 A B C D A E F D ~@16 G H I J G E I J ~@16 G H I J G E I J ~@16 G H I J G E I J ~@8 K L M N K L M N G E I J G E I J
>`.pickRestart({
  A: "f#5@15 ~", B: "g#5@15 ~", C: "a5@15 ~", D: "f#5@7 ~", E: "e5@15 ~", F: "[d5,f#5]@7 ~ [e5,g#5]@7 ~", G: "f#5",
  H: "e5", I: "d5 ~@5 d5 ~ e5 ~@5 e5 ~", J: "f#5 ~ f#5 ~@3 f#5 ~@9", K: "~ a#5@15, f#5@7 ~",
  L: "[d5,g#5]@15 ~, e5 ~@15", M: "[d5,f#5] ~@5 f#5@2 [e5,g#5] ~@5 [e5,g#5] ~, ~@6 d5 ~@9",
  N: "f#5 ~ f#5@2 ~@2 f#5 ~@9",
})).s("gm_string_ensemble_1").gain(0.2)

// other · electric guitar clean · "GUITAR"
const electric_guitar_clean = note(`<
  ~@12 A ~ B ~ A ~ B ~ A ~ B ~ C ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@17 C ~ D ~ A ~ B
  ~@25
>`.pickRestart({
  A: "~@10 e4 ~ f#4@2 ~@2", B: "~@2 e4 ~ f#4 ~@5 e4 ~ f#4 ~@3", C: "~@10 e4 ~ f#4@3 ~",
  D: "~@2 e4 ~ f#4@2 ~@4 e4 ~ f#4 ~@3",
})).s("gm_electric_guitar_clean").gain(0.45)

// chords · drawbar organ · "organ"
const drawbar_organ = note(`<
  ~@4 A B C D E F G H I B C J I K C J L M N O L M N O P F Q R S F Q R I B C J I K C J L M N O L M N O S F Q R S F Q R
  ~@16 P F Q R S F Q R ~@8 S F T U S F T U P F Q R S F Q R
>`.pickRestart({
  A: "[f#4,a4,c#5] ~@5 [f#4,a4,c#5] ~@9", B: "[e4,g#4,b4] ~ [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@9",
  C: "[d4,f#4,a4] ~@5 [d4,f#4,a4] ~ [e4,g#4,b4] ~@5 [e4,g#4,b4] ~", // D E
  D: "[f#4,a4,c#5] ~ [f#4,a4,c#5] ~@3 [f#4,a4,c#5] ~@9", E: "[f#4,a4,c#5,f#5,a5,c#6]@15 ~",
  F: "[e4,g#4,b4,d5,g#5,b5]@15 ~", // E7
  G: "[d4,f#4,a4,d5,f#5,a5] ~@5 [d4,f#4,a4,d5,f#5,a5] ~ [e4,g#4,b4,e5,g#5,b5] ~@5 [e4,g#4,b4,e5,g#5,b5] ~", // D E
  H: "[f#4,a4,c#5,f#5,a5,c#6] ~ [f#4,a4,c#5,f#5,a5,c#6] ~@3 [f#4,a4,c#5,a5] ~@9, ~@3 [f#5,c#6] ~@4", // F#m F#5
  I: "[f#4,a#4,c#5] ~@5 [f#4,a#4,c#5] ~@9", J: "[f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~@3 [f#4,a#4,c#5] ~@9",
  K: "[d4,g#4,b4] ~ [d4,g#4,b4] ~@3 [e4,g#4,b4] ~@9", L: "~ a4@13 ~@2, [f#4,f#5,a5,c#6,f#6]@15 ~, c#5@13 ~@3",
  M: "[e4,g#4,b4,g#5,e6], [e5,b5]@7 ~", N: "[f#5,f#6]",
  O: "[f#4,a#4,c#5,a#5,c#6] ~ [f#4,a#4,c#5,a#5,c#6] ~@3 [f#4,a#4,c#5,a#5,c#6] ~@9, f#5@3 f#5@4 ~", // F#
  P: "[f#4,a#4,c#5,f#5,a#5,c#6]@7 ~", // F#
  Q: "[d4,f#4,a4,d5,f#5,a5] ~@5 [d4,f#4,a4,d5,f#5,a5] ~ [e4,g#4,b4,d5,g#5,b5] ~@5 [e4,g#4,b4,e5,g#5,b5] ~", // D E7 E
  R: "[f#4,a#4,c#5,f#5,a#5,c#6] ~ [f#4,a#4,c#5,f#5,a#5,c#6] ~@3 [f#4,a#4,c#5,f#5,a#5,c#6] ~@9", // F#
  S: "[f#4,a#4,c#5,f#5,a#5,c#6]@15 ~", // F#
  T: "[d4,f#4,a4,d5,f#5,a5] ~@5 [d4,f#4,a4,d5,f#5,g5,a5] ~ [e4,g#4,b4,e5,g#5,b5] ~@5 [e4,g#4,b4,e5,g#5,b5] ~", // D E
  U: "[f#4,a#4,c#5,f#5,a#5,c#6] ~ [f#4,a#4,c#5,f#5,a#5,c#6] ~@3 [f#4,a#4,c#5]@8 ~@2, ~@6 [f#5,a#5,c#6] ~@9", // F#
})).s("gm_drawbar_organ").gain(0.25)

// other · whistle · "whistle t"
const whistle = note("<~@2 A@2 ~@56 B ~@47>".pickRestart({
  A: "[c#6 f#6 c#6 f#6 c#6@25 ~@3]/2", B: "c#6 f#6 c#6 f#6 c#6@8 ~@4",
})).s("gm_whistle").gain(0.4)

// other · clavinet · "clav type"
const clavinet = note(`<
  ~@4 A B C D E F G H A I J K A I J K A L M N A L M N O B P Q R S T U A I J K A I J K A L M N A L M N O B P Q R S T U V
  W X Y Z AA AB AC AD AE AF AG AH AI AJ AK O B P Q R S T U AD AL AD AM AD AN AD AO AP AQ AR AS AP AQ AR AS O B P Q R S T
  AT
>`.pickRestart({
  A: "[f#1,f#2] ~@5 [f#1,f#2] ~@9", B: "[e1,e2] ~ [e1,e2] ~@3 [e1,e2] ~@9",
  C: "[d1,d2] ~@5 [d1,d2] ~ [e1,e2] ~@5 [e1,e2] ~", D: "[f#1,f#2] ~ [f#1,f#2] ~@3 [f#1,f#2] ~@9", E: "[f#1,f#2]@15 ~",
  F: "[e1,e2]@15 ~", G: "[d1,d2] ~@5 d1@2 e1@2 ~@4 [e1,e2] ~, ~@6 d2 ~ e2 ~@7",
  H: "[f#1,f#2] ~ [f#1,f#2] ~@3 f#2@2 ~@8, ~@6 f#1 ~@9", I: "[e1,e2] ~ [e1,e2]@2 ~@2 [e1,e2]@2 ~@8",
  J: "d2@2 ~@4 [d1,d2]@2 [e1,e2] ~@5 [e1,e2]@2, d1 ~@15", // D E
  K: "[f#1,f#2] ~ f#1@2 ~@2 [f#1,f#2] ~@5 [e1,e2]@3 ~, ~@2 f#2 ~@13", L: "[e1,e2] ~ [e1,e2] ~@3 [e1,e2]@2 ~@8",
  M: "[d1,d2] ~@5 [d1,d2]@2 [e1,e2] ~@5 [e1,e2] ~", N: "[f#1,f#2] ~ [f#1,f#2] ~@3 [f#1,f#2] ~@7 [e1,e2]@2",
  O: "f#2 f#1 ~@4 [f#1,f#2] ~@9", P: "d2@2 ~@4 [d1,d2] ~ [e1,e2] ~@5 [e1,e2] ~, d1 ~@15",
  Q: "[f#1,f#2] ~ [f#1,f#2] ~@3 f#1@2 ~@8, ~@6 f#2 ~@9", // F#
  R: "f#2 f#1 [f#3,a#3,c#4] ~@3 [f#1,f#2,f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~", // F#
  S: "[e1,e2] ~ [e1,e2,d3,g#3,b3] ~@3 [e1,e2,d3,g#3,b3] ~@3 [d3,g#3,b3] ~@3 [d3,g#3,b3] ~", // E E7 G#dim
  T: "d2@2 [d3,f#3,a3] ~@3 [d1,d2,d3,f#3,a3] ~ [e1,e2] ~ [e3,g#3,b3] ~@3 [e1,e2,e3,g#3,b3] ~, d1 ~@15", // D E
  U: "[f#1,f#2] ~ [f#1,f#2,f#3,a#3,c#4] ~@3 [f#2,f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~, ~@3 f#1 ~@4", // F#
  V: "~@2 f#3 ~ f#3@2 f#2 ~ f#3 ~ f#3@2 f#2@2 f#3@2", W: "[f#2,g2] ~ f#3 ~ f#3@2 f#2 ~ f#3 ~ [f#3,a3]@3 ~ [f#3,a3]@2",
  X: "f#2 ~ f#3 ~ f#3@2 f#2 ~ f#3 ~ f#3@2 f#2 ~ f#3@2", Y: "f#2 ~ f#3 ~ f#3@2 f#2 ~ f#3 ~ [f#3,a3] ~ [f#3,a3]@2 f#2 ~",
  Z: "f#2@2 f#3 ~ f#3@2 f#2 ~ f#3 ~ f#3@2 f#2 ~ f#3@2", AA: "f#2 ~ f#3 ~ f#3@2 f#2 ~ f#3 ~ [f#3,a3]@2 f#2 ~ f#3 ~",
  AB: "f#2 ~ f#3 ~ f#3 ~ f#2 ~ f#3 ~ f#3@2 f#2 ~ f#3@2",
  AC: "f#2 ~ f#3 ~ f#3@2 f#2 ~ [f#3,a3] ~ [f#3,a3]@2 f#2@2 f#3 ~", AD: "[f#1,f#2] ~@5 [f#1,f#2] ~@5 [b1,b2]@3 [a1,a2]",
  AE: "[f#1,f#2]@3 ~@3 f#2@2 ~@8, ~@6 f#1 ~@9", AF: "f#2@3 ~@3 f#2@2 ~@4 [b1,b2]@3 [a1,a2], f#1 ~@5 f#1 ~@9",
  AG: "[f#1,f#2]@3 ~@3 [f#1,f#2] ~@5 e1@4", AH: "[f#1,f#2] ~@5 f#2@5 ~ [b1,b2]@3 [a1,a2], ~@6 f#1 ~@9",
  AI: "[f#1,f#2]@3 ~@3 [f#1,f#2] ~@9", AJ: "f#2@2 ~@4 f#2@5 ~ [b1,b2]@3 [a1,a2], f#1 ~@5 f#1 ~@9",
  AK: "f#1@4 ~@2 f#2@2 ~@4 [e1,e2]@3 ~, f#2@2 ~@4 f#1 ~@9", AL: "[f#1,f#2] ~@5 f#2@2 ~@8, ~@6 f#1 ~@9",
  AM: "[f#1,f#2] ~@5 [f#1,f#2] ~@5 e2@4", AN: "f#1@2 ~@4 [f#1,f#2] ~@9, f#2 ~@15", AO: "[f#1,f#2] ~@5 [f#1,g1,f#2] ~@9",
  AP: "[f#1,f#2]@4 ~@2 [f#1,f#2]@9 ~", AQ: "[e1,e2]@4 ~@2 [e1,e2]@9 ~",
  AR: "[d1,d2]@4 ~@2 [d1,d2]@2 e1@2 ~@4 [e1,e2] ~, ~@8 e2 ~@7", AS: "[f#1,f#2] ~@5 [f#1,f#2]@8 ~@2",
  AT: "[f#1,f#2] ~ [f#1,f#2,f#3,a#3,c#4] ~@3 [f#2,f#3,a#3,c#4] ~@9, ~@3 f#1 ~@4", // F#
})).s("gm_clavinet").gain(0.42)

// other · oboe · "oboe type"
const oboe = note("<~@28 A B C@2 D E C@2 ~@16 A B C@2 D E C@2 ~@16 A B C@2 D E C@2 ~@24>".pickRestart({
  A: "f#5@15 ~", B: "e5", C: "[f#5@15 ~]/2", D: "~@2 b5 a#5@5", E: "a5@3 g#5@5",
})).s("gm_oboe").gain(0.24)

// other · oboe
const oboe_2 = note("<~@28 A B C@2 D E C@2 ~@16 A B C@2 D E C@2 ~@16 A B C@2 D E C@2 ~@24>".pickRestart({
  A: "f#4@15 ~", B: "e4", C: "[f#4@15 ~]/2", D: "~@2 b4 a#4@5", E: "a4@3 g#4@5",
})).s("gm_oboe").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B@3 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C
>`.pickRestart({
  A: "x ~@5 x ~@8 x", B: "x ~@2 x ~@4", C: "x ~ x!2 ~@4",
})).gain(0.66)

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

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

// drums · hihat
const hihat = s("hh").struct("<[x ~ x ~ x!3 ~]!107 [x!2 ~@2]>").gain(0.66)

// drums · ride
const ride = s("rd").struct("<[x!8]!107 [x!4 ~@4]>").gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@7 B A@7 B A@3 B A@3 B A@3 B A C A B A@3 B A@3 B A@7 B A@7 B A@23 B A@7 B A@2 D A@4 E A@3 F A@3 B A@3 G
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~ x ~@2", D: "x!2 ~ x", E: "~@4 x ~@7 x!4", F: "~@2 x ~@2 x ~@2",
  G: "x!4 ~@4",
})).gain(0.66)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@4 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@2 B
>`.pickRestart({
  A: "x", B: "~@3 x ~@4",
})).gain(0.33)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@61 A ~ A ~ B ~ C ~@40>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~@10 x!2 ~@2 x ~", C: "~@5 x!3",
})).gain(3.85)

// drums · bongos
const bongos = s("bongo:4").struct("<~@3 A ~@39 A ~@7 A ~@16 B C@6 D ~@7 A ~@7 A ~@16>".pickRestart({
  A: "~@5 x!2 ~", B: "~@3 x", C: "~ x ~ x", D: "~@2 x ~@2 x!2 ~",
})).gain(0.86)

// drums · congas
const congas = s("conga:33").struct("<~@62 A ~ A ~ A ~@29 B ~@3 C ~@3 A ~@3>".pickRestart({
  A: "~@5 x ~ x", B: "~ x!2 ~@5", C: "~ x ~ x ~@4",
})).gain(1.05)

stack(
  bass, string_ensemble_1, electric_guitar_clean, drawbar_organ, whistle, clavinet, oboe, oboe_2, kick, snare, clap,
  hihat, ride, tambourine, cowbell, vibraslap, bongos, congas
)

More by Cameo