Strudelify

You Gotta Be

Des'ree

KeyC majorTempo89 bpm
0:00/0:00
// You Gotta Be — Des'ree
// 89 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/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 · acoustic bass · "GMIDI #33 A. Bass"
const bass = note(`<
  ~@2 A B C B D B E F G H I H J H K A L A B C B D B E F H I H J H K E F A B C B D B E F M N O P Q N R S T U H I H J H K
  E F A B C B D B E F A B C B D B E F A B C B D B E F A B C B D B E F V W X
>`.pickRestart({
  A: "f1@3 ~ f1@2 ~ f1 ~ c1 f1@4 f1 ~", B: "g1@3 ~ g1@3 c2!2 g1 c2@3 ~ c2@2", C: "f1@3 ~ f1@2 ~ f1 ~ e2 f1@4 f2 ~",
  D: "f1@3 ~ f1@2 ~ f1 ~ e1 f1@3 ~ f1 ~", E: "d#2@3 ~ d#2@3 c#2!3 c#2@3 ~ c#2@2", F: "a#1@3 ~ a#1@3 c2!3 c2@3 ~ c2@2",
  G: "c2@3 ~ c2@2 ~ c2 ~ c2 c2@3 ~ c2 ~", H: "f1@3 ~ f1@2 e1 f1 ~ e1 f1 ~ f1@2 d1@2",
  I: "g1@3 ~ g1@2 e1 a1 ~ e1 a1 ~ a1@2 a1 ~", J: "g1@3 ~ g1@4 c2@4 g1@3 ~", K: "g1@3 ~ g1@2 e1 a1 ~ e1 a1 ~ a1@2 g1@2",
  L: "g1@3 ~ g1@3 c2!2 g1 c2@3 ~@3", M: "d2@3 ~ d2@2 ~ d2 ~ c2 d2@4 d2 ~", N: "e2@5 ~ e2 ~ e2@5 ~ e2!2",
  O: "f2@3 ~ f2@3 c2 e2 c2 e2@3 ~ e2@2", P: "e2@3 ~ d2@3 ~ d2@6 e2@2", Q: "d2@5 ~ d2 ~ d2@5 ~ d2!2",
  R: "f2@6 ~@2 c2 f2@4 ~@2 g2", S: "f2@4 ~@2 e2 ~ f2 ~ c2 f2 ~ c2 f2 ~, g2 ~@15", T: "f2@10 ~@3 c2 a1 ~", U: "f1@5 ~@3",
  V: "g2@3 ~ g2@3 g2!2 f2 g2@3 ~ g2@2", W: "a#1@3 ~ a#1@3 f2 c2!2 c2@3 ~ c2@2", X: "c2@15 ~",
})).s("gm_acoustic_bass").gain(0.56)

// chords · epiano2 · "GMIDI #6 Chorused E.Piano"
const epiano2 = note(`<
  ~@2 A B C D E F G H I A B C D A B C D A B C D E F G J A B C D K B G H A B C D E F G H L M N O P Q R S ~@2 A B C D K B
  T U A B C D E F G J A B C D E F T U A B C D E F T U A B C D E F T U T U V
>`.pickRestart({
  A: "f4@10 [f4,f5]@5 ~, [d3,c4,a4]@15 ~", B: "[g3,b3,d4]@6 [c4,e4,g4,a4]@7 ~@3", C: "[c4,d4,f4,a4]",
  D: "[g3,b3,d4]@7 [g3,c4,e4]@6 ~@3", E: "~@13 a4@3, [d3,c4], f4@7 ~, ~@5 a3@3", F: "[g3,b3,d4]@7 [c4,e4,g4,a4]@6 ~@3",
  G: "[a#3,d#4,g4]@7 [g#3,c#4,f4]@6 ~ [c3,c4]@2", H: "~@4 f4@2 [g3,c4,e4]@7 ~@3, [d3,a#3,d4]@3 ~@5",
  I: "[c3,c4,e4]@7 ~@9", J: "~@4 f4@2 [g3,c4,e4]@7 ~@3, [f3,a#3,d4]@3 ~@5",
  K: "~@13 a3@3, [f3,a3]@3 f3, [d4,g4]@5 g4@3, ~@7 a2@9", L: "~@13 a3@3, [f3,a3]@3 f3, [e4,a4]@5 g4@3, ~@7 f2@9",
  M: "[b3,d4,e4,a4]@4 [b3,d4,e4,g4]@3 ~", N: "[c4,d4,f4,a4]@6 [b3,d4,e4,g4]@5 ~@5", O: "[e3,g3,e4]@6 [g3,b3,d4]@5 ~@5",
  P: "[a3,e4,a4]@7 ~@3 [e4,e5]@4 ~@2, f2@7 ~", Q: "[b3,d4,e4,a4]@4 ~@3 b4, ~@8 g3@7 ~, ~@11 d4@5, ~@13 e4@3",
  R: "[c4,d4,f4,a4]@3 [b3,d4,e4,g4]@3 ~@2", S: "[g3,c4,e4]@3 [b3,d4,g4]@3 ~@2", T: "[a#3,d#4,g4]@7 [g#3,c#4,f4]@6 ~@3",
  U: "[f3,a#3,d4]@6 ~ [g3,c4,e4]@7 ~@2", V: "[c3,e3,g3,c4,e4]@15 ~",
})).s("gm_epiano2").gain(0.4).pan(0.2)

// chords · piano · "GMIDI #1 A. Grand Piano"
const piano = note("<~@43 A B C@2 D E F G H I ~@43>".pickRestart({
  A: "~@6 g4 c5@2 g4 c5@2 g4 c5@2 ~", B: "[g4,c5,e5]@5 ~@5 [g4,c5,e5]@3 ~ [g4,c5,e5]@2",
  C: "[~@2 e5@4 ~@2 c5@4 ~@2 g4@2 [g4,c5]@2 ~@2 [g4,c5,e5]@2 [g4,b4,d5]@7 ~@3, g4@5 ~ e4@6 c4@6 ~@14, ~ c5@5 ~ a4@6 e4@5 ~@14]/2", // C5 C G
  D: "a5@4 ~@2 g4 c5@2 g4 c5@2 g4 c5@2 ~, ~@3 g5@2 ~@3", E: "[g4,c5,e5]@5 ~@5 [g5,c6]@3 ~ [g5,c6,e6]@2", F: "a5 g5!3",
  G: "[c5,g5]@2 [c5,f5]@3 ~@3 c6 ~@2 [e5,g5,c6] ~@2 c6@2, ~@14 g5 ~", H: "[e5,g5,c6]@5 ~@3",
  I: "~@3 c5@2 ~@6 a3@2 ~@2 f3, d5@2 d5@3 d5@4 g4 c4@3 c4 a3@2, ~ e5@15, ~@5 g4@3 f4@8, ~@3 c5@5",
})).s("gm_piano").gain(0.38).pan(0.6)

// other · synth brass 2 · "GMIDI #64 Synth Brass 2"
const synth_brass_2 = note(`<
  ~@2 A B C D E F G H I ~@8 J K J K L M N H ~@8 J K L K L M N H ~@18 J K L K L M N O J K L K L M N H J K L K L M N H J K
  L K L M N H N H ~
>`.pickRestart({
  A: "c4@3 ~@3 c4@4 ~@2 c4@2 ~@2", B: "b3@5 ~ c4@8 ~@2", C: "c4 ~@2 c4@5", D: "b3@3 c4@4 ~", E: "c4 ~@5 c4@10",
  F: "b3@6 c4@7 ~@3", G: "d#4@5 ~ c4@6 ~@2 c4@2", H: "d4 ~@3 f4@2 e4@9 ~", I: "e4@9 ~@7", J: "d4@2 ~@4 d4@9 ~",
  K: "b3@4 ~@2 c4@7 ~@3", L: "d4@2 ~@4 c4@9 ~", M: "b3@4 ~@2 c4@5 ~@5", N: "d#4@2 d4 c4@3 ~@2", O: "~@4 f4@2 e4@9 ~",
})).s("gm_synth_brass_2").gain(0.22).pan(1)

// chords · string ensemble 1 · "GMIDI #49 Strings"
const string_ensemble_1 = note(`<
  ~@2 A B C D A E F G H ~@8 A B C D A E F G ~@6 F G A B C D A E F G I J K L I M N@3 ~@7 F G A B C D A E F G A B C D A E
  F G A B C D A E F G A B C D A E F G O G ~
>`.pickRestart({
  A: "~@12 a4@3 ~, [f4,c5]@15 ~", B: "~@5 b3@3 ~@5 g3@3, g4 c4", C: "~@6 c4 ~, ~ c4@5 ~@2, ~@4 f4@11 ~, ~@6 a4@9 ~",
  D: "[g4,g5]@7 ~@6 g3@3, ~@7 e4@8 ~", E: "~@5 b3@3 [c4,a4]@8, g4 ~", F: "~@5 g3@3 ~@5 g#3@3, d#4 f4",
  G: "[d4,d5]@8 ~@5 g3@3, ~ e4", H: "~@4 g4@9 ~@3, c4@7 ~, ~ e4@6 ~", I: "~@5 e5@2 ~, e4@7 ~, ~ g4@6 ~, ~@4 c5@9 ~@3",
  J: "~@3 e4@2 g3@2 ~, b4, d4@3 ~", K: "a4@3 g4@4 ~, d4 ~", L: "~@3 [g4,g5]@4 ~, [e4,e5] ~",
  M: "~@3 e4@2 c5@2 ~, d4@3 ~, b4@5 ~@3", N: "[d4@2 d4@2 g4@5 ~@3, a4@35 ~@13]/3", O: "~@5 g4@3 ~@5 g#4@3, d#5 f5",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.7)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D@2 E D@2 E D F C D E G C D@2 H C E@2 D E@3 D C E@2 G C E@3 C E D E@4 I C D@2 H C E@3 G@2 C E D H C E D E C D@2
  E D E@2 H C E D E D E D@2 C E@3 D E D E C E D E D E@3 H C ~
>`.pickRestart({
  A: "x!2", B: "x!4", C: "~ x!3 ~ x!5 ~@3 x ~@2", D: "x!3 ~@2 x!3 ~ x ~@3 x ~@2", E: "x!4 ~ x!5 ~@3 x ~@2",
  F: "~@2 x ~@2 x!2 ~@6 x ~@2", G: "x!4 ~ x!5 ~@6", H: "x!2 ~ x ~ x!2 ~ x ~@2 x!2 ~@3", I: "x!4 ~ x!5 ~@3 x!2 ~",
})).gain(0.52)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A@8 B A@3 C A@3 D A@9 D A C A@11 E A@3 D A@4 C@2 A@3 D A F G A@8 D A@3 F A@14 G F A@4 D A ~
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x", C: "~@5 x ~@2", D: "~@7 x", E: "~@10 x ~@4 x", F: "~@10 x ~@3 x!2", G: "~@10 x!2 ~@2 x ~",
})).gain(0.59)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@7 B A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@5 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@8 A@2
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.59)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@2 A@8 B A@3 B A@3 B A@11 B A@15 B A@4 B@2 A@3 B A@11 B A@24 B A C
>`.pickRestart({
  A: "x!7 ~ x!3 ~ x!4", B: "x!8", C: "x",
})).gain(2.25)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~@2 A@8 ~ A@3 ~ A@3 ~ A@11 ~ A@15 ~ A@4 ~@2 A@3 ~ A@11 ~ A@24 ~ A ~
>`.pickRestart({
  A: "~@7 x ~@3 x ~@4",
})).gain(1.5)

stack(bass, epiano2, piano, synth_brass_2, string_ensemble_1, kick, snare, hihat, open_hat, crash, cabasa, cabasa_soft)

More by Des'ree