Strudelify
Got to Get It cover art

Serenity

Got to Get It

Culture Beat

KeyA minorTempo122 bpm
0:00/0:00
// Got to Get It — Culture Beat
// 122 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "Synth" lead 8 bass lead (copy of ch 8 "Synth" lead 8 bass lead, 0.229 beats early); ch 8 "Synth" lead 8 bass lead (copy of ch 12 "Synth" synth strings 1, 0.229 beats late)
// note: Full arrangement: all 175 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 · synth bass 2 · "Bass"
const bass = note(`<
  ~@16 A@2 B C A@2 B C A@2 B C A D A D A D A E A@2 B C A@2 B C A@2 B C A@2 B C A D A D A D A D A D A D A D A F A D A D A
  D A F A D A D A D A D A D A D A D A D A@2 B C A@2 B C A@2 B C A@2 B C ~@2 A D A D A D A D A D A D A D A F A D A D A D
  A F A D A D ~@12 A D A D A D A D A D A D A D A F A D A D A D A G ~
>`.pickRestart({
  A: "a1@2 a2!2 a1@2 a2!2 a1@2 a2!2 a1@2 a2!2", B: "f1@2 f2!2 f1@2 f2!2 f1@2 f2!2 f1@2 f2!2",
  C: "g1@2 g2!2 g1@2 g2!2 g1@2 g2!2 g1@2 g2!2", D: "f1@2 f2!2 f1@2 f2!2 f1@2 g2!2 g1@2 e2!2",
  E: "f1@2 f2!2 f1@2 f2!2 g1@2 g2!2 g1@2 e2 ~", F: "f1@2 f2!2 f1@2 f2!2 g1@2 g2!2 g1@2 e2!2",
  G: "f1@2 f2!2 f1@2 f2!2 ~@8",
})).s("gm_synth_bass_2").gain(0.64)

// other · pad new age · "Fantasia"
const pad_new_age = note("<A@8 B@8 ~@159>".pickRestart({
  A: "[a1@127 ~]/8", B: "[a2, a1@63 ~]/8",
})).s("gm_pad_new_age").gain(0.54)

// other · synth drum · "Effect"
const synth_drum = note("<~@15 A ~@11 B ~@7 A ~@55 A ~@25 A ~@23 A ~@15 A ~@17>".pickRestart({
  A: "~@12 b4 ~@3", B: "~@12 c5 ~@3",
})).s("gm_synth_drum").gain(0.8)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  A@8 B C B C B C D@2 ~@44 A@8 B C B C B C E@2 F ~@41 A@8 B C B C B C E@2 F ~@23 A@8 B C B C B C G@3
>`.pickRestart({
  A: "[[a3,e4]@2 [f3,c4] [g3,d4] [a3,e4]@2 [f3,c4] [g3,d4] [a3,e4]@2 [f3,c4] [g3,d4] [a3,e4]@2 [f3,c4] [g3,d4], g4]/8", // A5 F5 G5 A5 F5 G5 A5 F5 …
  B: "[a3,e4]", C: "[f3,c4] [g3,d4]", D: "[e4@19 ~@13, a3 ~]/2", E: "[a3@2 [f3,c4] [g3,d4], e4@19 ~@13]/2",
  F: "[a3,e4]@5 ~@11", G: "[a3@16 [f3,c4]@8 [g3,d4]@7 ~ e4@16, e4@19 ~@12 a3@16 ~]/3",
})).s("gm_synth_strings_1").gain(0.31).pan(0.4)

// other · pad poly · "Frase"
const pad_poly = note("<~@68 A B A B A B A B ~@50 A B A B A B A B ~@32 A B A B A B A C ~>".pickRestart({
  A: "a4 ~ d5 ~ e5 ~ a4 d5 ~ e5 ~ a4 c5 d5 e5 a4", B: "f4 ~ a4 ~ c5 ~ f4 g4 ~ b4 ~ b4 c5@2 b4 ~",
  C: "f4 ~ a4 ~ c5 ~ f4 g4 ~@8",
})).s("gm_pad_poly").gain(0.36).pan(0.8)

// other · synth strings 1 · "Synth"
const synth_strings_1_2 = note(`<
  ~@28 A B A B A B A B ~@16 C D C E C D F G ~@16 A B A B A B A B A B A B A B A B H I H I H I H I H I H I H I H J ~@2 C D
  C E C D F G ~@24 A B A B A B A B A B A B A B A B ~@17
>`.pickRestart({
  A: "a3!2 a4 a3!2 a4 a3!2 a#4 a3!2 g4 a3 g4 a3 g4", B: "f3!2 f4 f3!2 f4 f3!2 g4 g3!2 e4 g3 e4 g3 e4",
  C: "a2 a3 a2 a3 a2 a3 a2 a3", D: "c3 c4 c3 c4 f2 f3 g2 g3", E: "c3 c4 c3 c4 d3 d4 g2 g3",
  F: "a2@2 a3@2 a2 ~ a3@2 a2@2 a3@2 a2@2 a3@2", G: "c3@2 c4@2 c3@2 c4@2 d3@2 d4@2 g2@2 g3 ~",
  H: "[a3,e4] ~@3 [a3,e4] ~@2 [a3,e4]!2 ~ [a3,e4] ~@3 [a3,e4] ~", // A5
  I: "[a3,e4] ~@3 [a3,e4] ~@2 [g3,d4]!2 ~ [g3,d4] ~@3 [a3,e4] ~", J: "[a3,e4] ~@3 [a3,e4] ~@2 [g3,d4]!2 ~ [g3,d4] ~@5",
})).s("gm_synth_strings_1").gain(0.42)

// drums · kick
const kick = s("bd").struct("<~@16 A@35 B A@39 B A@16 ~@2 A@32 ~@4 A@11 B A@15 C ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@7 B C D A E A F G H A I A J K F A F A L A M A N O P G Q A R S A G F G A T U V F A N G F V W A N A N X Y Z AA AB
  AC AD N AB F AD AE G AD AF L A@2 AF AG G@3 F G@3 AH AD F A F A AD A AI ~@2 AD AJ A AK A AL A AF A F A F A N A AM AD AN
  AO AP A AQ A AR A G AS AI AT AF K AF ~@7 AU G AD AF L A@2 AF AG V F A N G F V W A N A N X Y Z AV ~
>`.pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~@3", B: "~@2 x!6 ~@2 x!6", C: "~@4 x ~@4 x ~@2 x!2 ~@2", D: "~@4 x ~@5 x!3 ~@3",
  E: "~@2 x ~ x!2 ~@2 x ~@2 x!2 ~@3", F: "~@4 x ~@4 x ~@2 x ~ x!2", G: "~@4 x ~@7 x!2 ~@2",
  H: "~@4 x ~@4 x ~@2 x ~@2 x", I: "~@4 x!2 ~@3 x ~@2 x ~ x!2", J: "~ x ~@2 x ~@2 x ~@2 x ~ x ~@3",
  K: "~ x ~@2 x ~@4 x ~@2 x ~@3", L: "~ x ~@2 x ~@4 x ~@2 x ~@2 x", M: "~ x ~@2 x ~@4 x!2 ~ x ~ x!2",
  N: "~ x ~@2 x ~@4 x ~@2 x ~ x!2", O: "~@4 x!3 ~@5 x!2 ~@2", P: "~@4 x ~@4 x!4 ~@2 x", Q: "~@4 x ~@3 x ~@3 x ~@2 x",
  R: "~ x ~@2 x!2 ~@3 x ~@6", S: "~@2 x ~ x ~@7 x!2 ~@2", T: "~@4 x!2 ~@2 x ~@3 x ~@3", U: "~ x ~@2 x ~@3 x!8",
  V: "~@2 x ~@2 x!2 ~", W: "~@4 x ~@4 x!2 ~ x ~ x!2", X: "~@2 x!2 ~@2 x ~", Y: "~@2 x ~ x ~@5 x ~ x!2 ~@2",
  Z: "~@4 x ~ x ~@2 x ~@2 x!2 ~@2", AA: "x!2 ~@2 x!12", AB: "~@4 x!2 ~@6 x!2 ~@2", AC: "~@2 x ~ x ~@4 x ~@2 x ~@3",
  AD: "~@4 x!2 ~@6 x ~@3", AE: "~@2 x ~ x ~@3 x!8", AF: "~ x ~@2 x ~@7 x ~@3", AG: "~ x ~@2 x ~@4 x!4 ~@3",
  AH: "~@4 x!2 ~@3 x ~@2 x ~@2 x", AI: "~@4 x ~@3 x!8", AJ: "~@4 x!2 ~@2 x ~@2 x!2 ~ x!2", AK: "~@4 x ~@4 x!7",
  AL: "~ x ~@2 x ~@7 x!2 ~@2", AM: "~@4 x ~@4 x!2 ~ x!3 ~", AN: "~ x ~@2 x ~ x!2 ~@4 x!2 ~@2",
  AO: "~@4 x ~ x ~@2 x ~@2 x ~@3", AP: "~@4 x!2 ~@2 x ~ x!3 ~ x!2", AQ: "~ x ~@2 x ~@7 x!4", AR: "~ x!2 ~ x!3 ~@2 x!7",
  AS: "~@2 x!3 ~@4 x ~@2 x ~ x!2", AT: "~@2 x ~ x!2 ~@6 x ~@3", AU: "~@2 x!8 ~ x!5", AV: "x!2 ~@2 x!4 ~@8",
})).gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@27 [~@3 x] ~@147>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A@7 B A@11 B A@7 B A@15 B A@39 B A@16 ~@2 A@7 B A@23 B ~@4 A@11 B A@15 C ~
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A@7 B A@11 B A@7 B A@15 B A@39 B A@16 ~@2 A@7 B A@23 B ~@4 C@4 A@7 B A@15 D ~
>`.pickRestart({
  A: "~ x!3 ~ x!3 ~ x!3 ~ x!3", B: "~ x!3 ~ x!3 ~ x!3 ~@4", C: "~ x ~ x ~ x ~ x", D: "~ x!3 ~ x!3 ~@8",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 [~@3 x] ~@159>").gain(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@35 A ~@55 A ~@25 A ~@23 A ~@15 A ~@17>".pickRestart({
  A: "~@3 x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@44 [x!9 ~ x!6] [x!16]!3 [x!5 ~ x!10] [x!13 ~ x!2] [x!16] [x!12 ~@4] ~@123>")
  .gain(0.42)

stack(
  bass, pad_new_age, synth_drum, synth_strings_1, pad_poly, synth_strings_1_2, kick, snare, clap, hihat, open_hat,
  mid_tom, high_tom, tambourine
)

More by Culture Beat