Strudelify

Build Me Up Buttercub

Foundations The

KeyC majorTempo142 bpm
0:00/0:00
// Build Me Up Buttercub — Foundations The
// 142 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 104 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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 · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L M J K L M N O P Q R S T U V W X Y Z AA AB AC@2 AD@2 AE@2 AF AG AH@2 I J K L M J K L M N O P Q
  R S T U V W X Y Z AA AB AC@2 AD@2 AE@2 AF AG AH@2 I J K L M J K L M N O P Q R S P AI AJ R AK O AL P AM@3 AN AO
>`.pickRestart({
  A: "c2@6 ~@4 c2 ~ c2@7 ~@3 e2@2", B: "~@4 e2@3 ~@3 e2 ~ e2@8 ~@4", C: "f2@6 ~@4 f2 ~ f2@6 ~@4 g2@2",
  D: "~@4 g2@2 ~@4 g2 ~ g2@9 ~@3", E: "c2@6 ~@4 c2 ~ c2@6 ~@4 e2@2", F: "~@4 e2@2 ~@4 e2 ~ e2@8 ~@4",
  G: "f2@6 ~@4 f2 ~ f2@9 ~@3", H: "~@4 g2 ~ g2 ~@3 g2 ~ g2 ~@3 g2 ~ g2 ~@3 g2 ~",
  I: "g2 ~@3 g2 ~ g2 ~@3 g2 ~ g2 ~@3 g2 ~ g2 ~@3 g2 ~", J: "c2@6 ~@4 c2 ~ c2@7 ~@3 e1@2",
  K: "~@4 e1@3 ~@3 e1 ~ e1@8 ~@4", L: "f1@6 ~@4 f1 ~ f1@6 ~@4 g1@2", M: "~@4 g1@2 ~@4 g1 ~ g1@9 ~@3",
  N: "c2@7 ~@3 c2 ~ c2@8 ~@2 c2 ~", O: "a#1@7 ~@3 a#1 ~ a#1@7 ~@3 a#1 ~", P: "a1@7 ~@3 a1 ~ a1@7 ~@3 a1 ~",
  Q: "g#1@7 ~@3 g#1 ~ g#1@7 ~@3 g#1 ~", R: "c2@7 ~@3 c2 ~ c2@7 ~@3 c2 ~", S: "g1@7 ~@3 g1 ~ g1@7 ~@3 g1 ~",
  T: "f1@3 ~ f2@7 ~ e2@3 ~@3 d2@4 ~@2", U: "c2@2 ~@2 g1 ~ g1@2 ~@2 g1 ~ g1@2 ~@2 g1 ~ g1@2 ~@2 g1 ~",
  V: "c2@3 ~ c2@3 ~@3 c2@2 g1@3 ~ g1@3 ~@3 g1 ~", W: "a#1@3 ~ a#1@3 ~@3 a#1@2 f1@3 ~ f1@3 ~@3 f1 ~",
  X: "c2@3 ~ c2@3 ~@3 c2 ~ c2@3 ~ c2@3 ~@3 c2 ~", Y: "f1@2 ~@2 f1@3 ~@3 f1 ~ f1@3 ~ f1@3 ~@3 f1 ~",
  Z: "c2@3 ~ c2@3 ~@3 c2 ~ g1@3 ~ g1@2 ~@4 g1 ~", AA: "a#1@3 ~ a#1@2 ~@4 a#1 ~ f1@2 ~@2 f1@3 ~@3 f1 ~",
  AB: "c2@3 ~ c2@2 ~@4 c2 ~ c2@3 ~ c2@3 ~@3 c2 ~",
  AC: "[f1@3 ~ f1@3 ~@3 f1 ~ f1@2 ~@2 e1@3 ~@3 d2@12 ~@2 d2@8 ~@2 d2 ~]/2",
  AD: "[g2@8 ~@2 g2 ~ g2@2 ~@2 f2@3 ~@3 e2@12 ~@2 e2@8 ~@2 e2 ~]/2",
  AE: "[a2@9 ~@3 a2@2 ~@2 g2@3 ~@3 f2@13 ~ f2@9 ~ f2@2]/2", AF: "d2@11 ~ d2@8 ~@2 d2 ~",
  AG: "g2@9 ~ g2 ~ g2@4 ~@2 g2@4 ~@2", AH: "g2@7 ~@3 g2 ~ g2@8 ~@4",
  AI: "a1@2 ~@2 a2@3 ~ a2@2 ~@2 a2@2 ~@2 a2@2 ~@2 a2@2 ~@2", AJ: "d2@7 ~@3 d2 ~ d2@8 ~@2 d2 ~",
  AK: "b1@7 ~@3 b1 ~ b1@7 ~@3 b1 ~", AL: "d2@7 ~@3 d2 ~ d2@7 ~@3 d2 ~", AM: "g1@3 ~ g2@7 ~ f#2@3 ~@3 e2@4 ~@2",
  AN: "d2@2 ~@2 a1 ~ a1@2 ~@2 a1 ~ a1@2 ~@2 a1 ~ a1@2 ~@2 a1 ~", AO: "d2@5 ~ d1@4 ~@14",
})).s("gm_acoustic_bass").gain(0.64)

// other · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@29 A B C D@2 ~@29 A B C D@2 ~@36>".pickRestart({
  A: "e7@11 ~ g7@11 ~", B: "d7@10 ~@2 f7@11 ~", C: "e7@17 ~ c8@5 ~", D: "[a7@11 ~ a7@2 ~@2 g7@4 ~@2 f7@24 ~@2]/2",
})).s("gm_percussive_organ").gain(0.76)

// chords · french horn · "FR.HORN"
const french_horn = note(`<
  ~@8 A B C D E B C D E F ~ G H I ~ J K ~@7 L@6 M N ~@2 A B C D E B C D E F ~ G H I ~ J K ~@7 L@6 M N ~@2 A B C D E B C
  D E F ~ G H I ~@2 O P ~ Q R S ~ T@3 U V
>`.pickRestart({
  A: "~@4 g4 ~ g4@2 ~@2 g4 ~ g4@2 ~@2 g4 ~ g4@3 ~ g4@2", B: "~@10 [c5,f5]@5 ~ [c5,e5] ~ [c5,e5]@4 ~@2",
  C: "~@4 [g#4,b4]@3 ~@3 [g#4,b4]@4 ~@2 [g#4,b4]@4 ~@4", D: "~@10 [b4,d5]@4 ~@2 [a4,c5] ~ [a4,c5]@3 ~@3",
  E: "[f5,a5] ~@3 [f5,a5] ~ [f5,a5]@2 ~@2 [e5,g5]@3 ~@3 [d5,f5]@3 ~@5", F: "~@4 [c5,e5]@2 [d5,f5]@3 ~ [e5,g5]@5 ~@9",
  G: "[a4,c5]@11 ~", H: "[g#4,c5]@11 ~", I: "~@10 [d5,f5]@5 ~ [c5,e5] ~ [c5,e5]@3 ~@3",
  J: "~@4 [c5,f5]@7 ~ [c5,e5]@3 ~@3 [b4,d5]@3 ~@3", K: "c5 ~@3 g4 ~ g4 ~@3 g4 ~ g4@2 ~@2 g4 ~ g4 ~@3 g4 ~",
  L: "[~@12 [a4,d5]@2 ~@2 [c5,e5]@3 ~@3 [d5,f5]@35 ~@3 [c5,e5]@2 ~@2 [d5,f5]@3 ~@3 [e5,g5]@31 ~@7 [d5,f5]@2 ~@2 [e5,g5]@3 ~@3 [f5,a5]@24 ~@2]/6", // D5 C Dm C Dm Em Dm Em …
  M: "[f#5,a5]@11 ~", N: "[g5,b5]", O: "~@2 [e5,a5] ~ [e5,a5] ~ [e5,a5] ~ [e5,a5] ~ [e5,a5] ~",
  P: "~@4 [d5,f#5]@2 [e5,g5]@3 ~ [f#5,a5]@5 ~@9", Q: "[g4,b4]@11 ~ [b4,d5]@10 ~@2", R: "[d5,g5]",
  S: "~@10 [e5,g5]@5 ~ [d5,f#5] ~ [d5,f#5]@3 ~@3", T: "~@4 [d5,g5]@7 ~ [d5,f#5]@3 ~@3 [c#5,e5]@3 ~@3",
  U: "d5 ~@3 a4 ~ a4 ~@3 a4 ~ a4@2 ~@2 a4 ~ a4 ~@3 a4 ~", V: "[a4,d5]@3 d4@2 ~@7",
})).s("gm_french_horn").gain(0.25)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D E@3 F G H I J K H I J K L ~ M N O@2 P Q R S T U V S W X@2 Y@2 Z@2 AA AB ~@2 G H I J K H I J K L ~ M N O@2 P Q
  R S T U V S W X@2 Y@2 Z@2 AA AB ~@2 G H I J K H I J K L ~ M N O@2 AC AD AE ~ AF AG AH@2 AI@3 AJ AK
>`.pickRestart({
  A: "c3@6 ~@4 c3 ~ c3@7 ~@3 e3@2", B: "~@4 e3@3 ~@3 e3 ~ e3@8 ~@4", C: "f3@6 ~@4 f3 ~ f3@6 ~@4 g3@2",
  D: "~@4 g3@2 ~@4 g3 ~ g3@9 ~ [d5,f5,d6,f6] ~", // Dm
  E: "[[d5,f5,d6,f6]@2 ~@2 [c5,e5,c6,e6] ~ [c5,e5,c6,e6]@4 ~@12 [d5,f5,d6,f6]@5 ~ [c5,e5,c6,e6] ~ [c5,e5,c6,e6]@3 ~ [b4,d5,b5,d6]@5 ~ [c5,e5,c6,e6]@4 ~@2 [b4,d5,b5,d6]@4 ~@2 [a4,c5,a5,c6] ~ [a4,c5,a5,c6]@4 ~@14]/3", // Dm C Dm C Bm C Bm Am
  F: "~@4 g3 ~ g3 ~@3 g3 ~ g3 ~@3 g3 ~ g3 ~@3 g3 ~", G: "g3 ~@3 g3 ~ g3 ~@3 g3 ~ g3 ~@3 g3 ~ g3 ~@3 g3 ~",
  H: "~@10 [c5,f5]@5 ~ [c5,e5] ~ [c5,e5]@2 ~@2 [c5,f5]@2", I: "~@4 [c5,e5] ~ [c5,e5]@2 ~@2 [b4,d5]@4 ~@2 [c5,e5]@4 ~@4",
  J: "~@10 [b4,d5]@4 ~@2 [a4,c5] ~ [a4,c5]@4 ~@2", K: "~@2 [f4,g4] ~@3 [f4,g4] ~",
  L: "[g4,c5]@4 [c5,e5]@2 [d5,f5]@3 ~ [e5,g5]@6 ~@8, ~@6 b4 ~@17", M: "[c5,f5]@11 ~", N: "[c5,f5]@7 ~",
  O: "[~@10 c5@2 c5@2 ~@2 e5 ~ [c5,e5]@3 ~ [c5,e5]@5 ~ [b4,d5] ~ [b4,d5]@3 ~@15, ~@10 f5@5 ~@33]/2", // C Bm
  P: "~@4 [a4,c5]@7 ~ [g4,c5]@3 ~@3 [f4,g4]@3 ~@3", Q: "[g4,c5] ~@3 g4 ~ g4@2 ~@2 g4 ~ g4 ~@3 g4 ~ g4 ~@3 g4 ~",
  R: "~@3 [g4,c5,e5] ~@5 [g4,b4,d5] ~@2", S: "~@3 [f4,a#4,d5] ~@5 [f4,a4,c5] ~@2",
  T: "~@6 [c5,g5] ~@3 [e5,g5]@2 ~@6 [c5,e5] ~@5, ~@6 e5@2 ~@2 c5 ~@13", // C5 Em C
  U: "~@6 [a4,c5,f5] ~@3 [a4,c5] ~@7 [a4,c5] ~@5, ~@5 f5 ~@6", V: "~@6 [g4,c5,e5]@3 ~@9 [g4,b4,d5]@2 ~@4",
  W: "~@6 [e5,g5]@2 ~@2 [c5,e5] ~@7 [c5,e5] ~@5, ~@6 c5 ~@3 g5@2 ~@12", // Em C
  X: "[~@6 [a4,c5,f5] ~@3 [c5,f5]@2 [a4,d5,f5]@3 ~ [g4,c5,e5]@3 ~@3 [f4,a4,d5]@24 ~@2, ~@10 a4 ~@37]/2", // F F5 Dm C Dm
  Y: "[~@12 [g4,c5,e5]@2 ~@2 [a4,d5,f5]@3 ~@3 [b4,e5,g5]@25 ~]/2", // C Dm Em
  Z: "[~@12 [d5,f5]@2 ~@2 [b4,e5,g5]@2 ~@4 [c5,f5,a5]@25 ~, ~@12 a4 ~@35]/2", AA: "[d5,f#5,a5]@23 ~",
  AB: "[f5,g5,b5]@23 ~", AC: "~@6 [a4,c#5]@11 ~ [a4,c#5]@6",
  AD: "~@4 [c#5,e5]@2 ~@2 [c#5,e5]@2 ~@2 [c#5,e5]@2 ~@2 [c#5,e5]@2 ~@2 [c#5,e5]@3 ~", // C#m
  AE: "[a4,d5]@4 [d5,f#5]@2 [e5,g5]@3 ~ [f#5,a5]@6 ~@8, ~@6 c#5 ~@17", AF: "[d5,g5]@11 ~", AG: "[d5,g5]@7 ~",
  AH: "[~@10 d5@2 d5@2 ~@2 f#5 ~ [d5,f#5]@3 ~ [d5,f#5]@5 ~ [c#5,e5] ~ [c#5,e5]@3 ~@15, ~@10 g5@5 ~@33]/2", // D C#m
  AI: "~@4 [b4,d5]@7 ~ [a4,d5]@3 ~@3 [g4,a4]@3 ~@3", AJ: "[a4,d5] ~@3 a4 ~ a4@2 ~@2 a4 ~ a4 ~@3 a4 ~ a4 ~@3 a4 ~",
  AK: "[a4,d5]@6 [d4,f#4]@5 ~@13", // D5 D
})).s("gm_piano").gain(0.55)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@4 A@2 B C D E F G@2 E F G@2 H I J K H L M N O P Q J O P R S T U V W X@2 Y ~@2 D E F G@2 E F G@2 H I J K H L M N O P
  Q J O P R S T U V W X@2 Y ~@2 D E F G@2 E F G@2 H I J K H L Z AA AB AC AD I AB AE AF@3 AG ~
>`.pickRestart({
  A: "[[e4,g4]@20 ~@2 [e4,g#4]@14 [e4,g#4]@5 ~ [e4,g#4]@5 ~]/2", B: "[f4,a4]@12 [f4,a4]@5 ~ [f4,a4]@6",
  C: "~@4 [f4,g4] ~ [f4,g4]@3 ~ [f4,g4] ~ [f4,g4]@2 ~@2 [f4,g4] ~ [f4,g4]@2 ~@2 [f4,g4] ~", // Fsus2
  D: "[f4,g4]@2 ~@2 [f4,g4] ~ [f4,g4]@2 ~@2 [f4,g4] ~ [f4,g4]@2 ~@2 [f4,g4] ~ [f4,g4]@2 ~@2 [f4,g4]@2", // Fsus2
  E: "[e4,g4]@5 ~ [e4,g4]@11 ~ [e4,g4]@5 ~", F: "[e4,g#4]@5 ~ [e4,g#4]@11 ~ [e4,g#4]@5 ~",
  G: "[[f4,a4]@5 ~ [f4,a4]@10 ~@2 a4@4 ~@2 g4@6 [f4,g4]@5 ~ [f4,g4]@5 ~ [f4,g4]@4 ~@2, ~@3 f4@2 ~@3]/2", // F Fsus2
  H: "~@2 [g4,c5] ~@3 [g4,c5] ~", I: "~@2 [g4,a#4] ~@3 [g4,a#4] ~", J: "~@2 [f4,a4] ~@3 [f4,a4] ~",
  K: "~@2 [f4,g#4] ~@3 [f4,g#4] ~", L: "~@3 [g4,b4] ~@5 [g4,b4]@2 ~",
  M: "~@4 [a4,c5]@6 ~@2 [g4,b4]@3 ~@3 [f4,a4]@3 ~@3", // Am G F
  N: "[g4,c5]@2 ~@2 [f4,g4] ~ [f4,g4] ~@3 [f4,g4] ~ [f4,g4]@2 ~@2 [f4,g4] ~ [f4,g4]@2 ~@4", // C5 Fsus2
  O: "~@3 [g4,c5] ~@5 [g4,b4] ~@2", P: "~@3 [f4,a#4] ~@5 [f4,a4] ~@2", Q: "~@6 [g4,c5]@3 ~@9 [g4,c5]@2 ~@4",
  R: "~@3 [g4,c5] ~@5 [g4,c5] ~@2", S: "~@3 [f4,a4] ~@8", T: "~@6 [f4,a4] ~@11 [f4,a4]@2 ~@4", U: "~@3 [g4,b4] ~@8",
  V: "~@6 [g4,b4] ~@11 [g4,b4]@2 ~@4", W: "~@3 [a4,c5] ~@8", X: "~@3 [a4,c5] ~@5 [a4,c5] ~@2",
  Y: "~@6 [b4,d5] ~@11 [b4,d5] ~@5", Z: "a4@5 ~ a4@5 ~ a4@5 ~ a4@5 ~, e4",
  AA: "a4@2 ~@2 [a4,c#5]@3 ~ [a4,c#5]@2 ~@2 [a4,c#5]@2 ~@2 [a4,c#5]@2 ~@2 [a4,c#5]@2 ~@2", // A
  AB: "~@2 [a4,d5] ~@3 [a4,d5] ~", AC: "~@2 [a4,c5] ~@3 [a4,c5] ~", AD: "~@2 [g4,b4] ~@3 [g4,b4] ~",
  AE: "~@3 [a4,c#5] ~@5 [a4,c#5]@2 ~", AF: "~@4 [b4,d5]@6 ~@2 [a4,c#5]@3 ~@3 [g4,b4]@3 ~@3",
  AG: "[a4,d5]@2 ~@2 [g4,a4] ~ [g4,a4] ~@3 [g4,a4] ~ [g4,a4]@2 ~@2 [g4,a4] ~ [g4,a4]@2 ~@4", // D5 Gsus2
})).s("gm_acoustic_guitar_steel").gain(0.5)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@3 B C A@14 D B A@7 E A E A E A@2 F ~@2 G A@14 D B A@7 E A E A E A@2 F ~@2 G A@15 H A@6 I J K L ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x!2 ~ x!2 ~ x!2 ~ x", C: "x ~ x!2 ~ x!2 ~ x!2 ~ x", D: "~@2 x ~@3 x ~@2 x ~@2", E: "~ x ~@2",
  F: "~ x!11", G: "x ~@2 x", H: "~ x!5", I: "~@2 x ~@3 x ~@2 x ~ x", J: "~@2 x ~@3 x ~@2 x!3",
  K: "~@2 x ~@3 x!2 ~ x!2 ~", L: "~@2 x!2 ~ x!2 ~ x!4",
})).gain(0.78)

// drums · low tom
const low_tom = s("lt").struct("<~@42 [~@8 x ~@2 x] ~@33 [~@8 x ~@2 x] ~@26 [~@5 x ~@18]>").gain(0.78)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@42 [~@5 x!2 ~@5] ~@33 [~@5 x!2 ~@5] ~@26 [~ x ~@4]>").gain(0.78)

// drums · open hat
const open_hat = s("oh").struct("<~@28 [~@2 x] ~@33 [~@2 x] ~@41>").gain(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@42 [~@2 x!2 ~@8] ~@33 [~@2 x!2 ~@8] ~@27>").gain(0.78)

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

// drums · ride
const ride = s("rd").struct("<A@23 ~ A ~@17 A@15 ~ A ~@17 A@15 B ~ A@6 ~@3 A ~>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.7)

// drums · congas
const congas = s("conga:13").struct(`<
  A B C D B ~@6 B ~ B ~ B ~@17 E A E A E F G H@2 ~@3 B ~ B ~ B ~@17 E A E A E F G H@2 ~@3 B ~ B ~ B ~@20
>`.pickRestart({
  A: "~@2 x", B: "x", C: "~@8 x!4", D: "x ~ x", E: "~@8 x!2 ~ x", F: "~@9 x ~ x", G: "~@3 x", H: "x!6 ~@6",
})).gain(2.48)

// drums · congas
const congas_2 = s("conga:18").struct("<A B C A ~@29 D E D E D E@2 F@2 ~@25 D E D E D E@2 F@2 ~@28>".pickRestart({
  A: "~@9 x ~ x", B: "~@8 x!4", C: "x", D: "~@2 x!2 ~ x ~@6", E: "~ x ~@2", F: "~@6 x!6",
})).gain(2.48)

stack(
  bass, percussive_organ, french_horn, piano, acoustic_guitar_steel, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash, ride, congas, congas_2
)