Strudelify

I'm Waiting for the Day

The Beach Boys

KeyF majorTempo120 bpm
0:00/0:00
// I'm Waiting for the Day — The Beach Boys
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · electric bass finger · "Bass"
const bass = note(`<
  A B C D E F G H I@2 J K L M N O P Q R S T U V W X Y J H Z M N O AA AB R S T U G W T U G AC AD AE N AF AG AH AI AJ A B
  J K A B G H AK AE AL AM AN AB R S A B G W I@2 AO W L AP N AQ AR AS AT AU AT AV AW ~
>`.pickRestart({
  A: "f2@3 ~ f2@2 ~@4 f2 ~ c3@3 ~ c3@2 f2@2 ~@4", B: "~@3 c2 f2 ~", C: "~@5 g2 d3 ~ d3 g2 ~@2",
  D: "~@5 c2 g2 ~ g2 c2 ~@2", E: "f2@3 ~ f2@2 ~@18", F: "~@10 f1 ~ a2@2 ~@2 c3@2 f3@3 ~@3",
  G: "g2@3 ~ g2@2 ~@4 g2@2 d3@3 ~ d3 ~ g2@2 ~@4", H: "c3@3 ~ c3@2 ~@2 c3@3 ~ g2 ~ e2 ~ c1@2 c2@2 ~@2 c1@2",
  I: "[f3@3 ~ f3@2 ~@2 f3@2 ~@2 c3@3 ~@3 a2@2 ~@2 f2@5 ~@9 c2@3 ~ f2@4 ~@4]/2", J: "g2@5 ~ bb2@2 ~@4 d3@2 ~@10",
  K: "c2@3 ~ c2@2 ~@2 c2@2 ~@2 c2@3 ~ e2@2 ~@2 g2@2 ~@2", L: "~@5 a1 e2 ~ e2 a1 ~@2", M: "~@5 d2 a2 ~ a2 d2 ~@2",
  N: "bb1@3 ~ bb1@2 ~@4 bb1@2 f2@3 ~ f2 ~ bb1@2 ~@4", O: "bb1@5 ~ db2@2 ~@4 f2@2 ~@10",
  P: "a1@2 ~@2 c2@2 e2@3 ~@3 d2@3 ~@3 d2@4 ~@2", Q: "g3 ~ d3 ~ g2 ~ c3 ~ g2 ~ c2 ~", R: "f2@2 a2 ~ c3 ~@3",
  S: "~@10 f2@2 c3@3 ~ c3@2 f2@3 ~@3", T: "f2@4 ~@2 f2@3 ~@15", U: "~@10 f1 ~ c2@2 ~@2 f2 ~ f2@2 ~@2 f1 ~",
  V: "g2@3 ~ g2@2 ~@2 g2@2 ~@2 g2@3 ~ bb2@2 ~@2 d3@2 ~@2", W: "c2@3 ~ c2@2 ~@4 c2@2 g2@3 ~ g2 ~ c2@2 ~@4",
  X: "f2@5 ~ f2@3 ~@15", Y: "~@6 f3@2 c3@2 a2@2 f2@5 ~@5 f1 ~", Z: "a1@3 ~ a1@2 ~@4 a1@2 e2@3 ~ e2 ~ a1@2 ~@4",
  AA: "a1@3 ~ a1@2 ~@4 a0 ~ d2@3 ~@3 d2@4 ~@2", AB: "g3@2 ~@2 d3@2 ~@2 g2@2 ~@2 c2@2 ~@2 e2@2 g2@3 ~@3",
  AC: "c2@5 ~ e2@2 ~@4 g2@2 ~@10", AD: "a1@5 ~ c2@2 ~@4 e2@2 ~@10",
  AE: "d2@3 ~ d2@2 ~@2 d2@2 ~@2 d2@3 ~ f2@2 ~@2 a2@2 ~@2", AF: "bb2@3 ~ bb2@2 ~@2 bb2@3 ~ f2@3 ~ db2@3 ~ bb1@3 ~",
  AG: "a1@3 ~@3 a1@4 ~@2 d2@3 ~ d2@2 ~@4 d1 ~", AH: "g2@3 ~ g2@2 ~@4 g1 ~ c2@3 ~ c2@2 ~@4 c1 ~",
  AI: "~@3 f2 ~@2 f2@2 ~@4", AJ: "~@12 c2@3 ~ f2@4 ~@4", AK: "a2@3 ~ a2@2 ~@2 a2@3 ~ e2@3 ~ c2@3 ~ a1@3 ~",
  AL: "bb1@5 ~ d2@2 ~@4 f2@2 ~@10", AM: "bb1@3 ~ bb1@2 ~@2 bb1@2 ~@2 bb1@3 ~ db2@2 ~@2 f2@2 ~@2",
  AN: "a1@3 ~ a1@2 ~@4 a0 ~ d3@2 ~@2 a2@2 ~@2 d2@2 ~@2", AO: "g3@3 ~ g3@2 ~@2 g3@3 ~ d3 ~ bb2 ~ g1@2 g2@2 ~@2 g1@2",
  AP: "d2@5 ~ f2@2 ~@4 a2@2 ~@10", AQ: "bb2@3 ~ bb2@2 ~@2 bb2@3 ~ f2 ~ db2 ~ bb0@2 bb1@2 ~@2 bb0@2",
  AR: "a2@2 ~@2 e2@2 ~@2 a1@2 ~@2 d2@2 ~@2 f2@2 a2@3 ~@3", AS: "g3@2 ~@2 d3@2 ~@2 g2@2 ~@2 c2@3 ~@3 c2@4 ~@2",
  AT: "a1@2 ~@2 c2@2 e2@3 ~@3 d2@2 ~@2 f2@2 a2@3 ~@3", AU: "g2@3 ~ g2@2 ~@4 g1 ~ c2@3 ~@3 c2@4 ~@2",
  AV: "g2@2 ~@2 bb2@2 d3@3 ~@3 c2@3 ~ c2@2 ~@4 c1 ~", AW: "~@5 f2 c3 ~ c3 f2 ~@2",
})).s("gm_electric_bass_finger").gain(0.32)

// chords · piano
const piano = note(`<
  ~@4 A B C D E@2 F G H I J K L M N O E@2 P Q A B R G S T U V W X E@2 Y E Z Q N O F G S T AA AB AC AD A B E@2 AE AF Y E
  P Q H T J AG AH AI Y E Y E C AF E@2 F Q AJ AK AL V AH AM L AN AO X AP ~
>`.pickRestart({
  A: "~@6 [a3,c4,f4]@3 ~ [a3,c4,f4]@2 ~@4 f3 ~ [a3,c4,f4]@2 ~@4", // F
  B: "~@4 f3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4] ~@5 f3 ~ [a3,c4,f4]@2 ~@4", // F
  C: "~@6 [d4,g4,bb4]@3 ~ [d4,g4,bb4] ~@5 g2 ~ [d4,g4,bb4]@3 ~@3", D: "~@6 [g3,c4,e4]@2 ~@8 c3 ~ [g3,c4,e4]@3 ~@3",
  E: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~", F: "~@6 [g3,bb3,d4]@3 ~ [g3,bb3,d4] ~@7 [g3,bb3,d4]@2 ~@4",
  G: "~@6 [g3,c4,e4]@3 ~ [g3,c4,e4] ~@5 c3 ~ [g3,c4,e4]@3 ~@3", H: "~@3 [a3,c4,e4] ~@5 [a3,c4,e4] ~@2",
  I: "~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~", J: "~@6 [bb3,d4,f4]@3 ~ [bb3,d4,f4] ~@7 [bb3,d4,f4]@2 ~@4",
  K: "~@2 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~", L: "[a3,c4,e4]@3 ~ a2@2 [a3,c4,e4]@2 ~@10 [c4,d4,f4,a4]@3 ~@3",
  M: "[g3,bb3,d4]@2 ~@4 [g3,bb3,d4]@2 ~@4 [g3,c4,e4]@3 ~ c3@2 [g3,c4,e4]@2 ~@4", // Gm C
  N: "~@6 [a3,c4,f4]@3 ~@7 f3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4] ~", O: "~@6 [a3,c4,f4]@2 ~@8 f3 ~ [a3,c4,f4]@2 ~@4",
  P: "~@6 [g3,bb3,d4]@3 ~ [g3,bb3,d4] ~@5 g2 ~ [g3,bb3,d4]@3 ~@3", // Gm
  Q: "~@6 [g3,c4,e4]@3 ~ [g3,c4,e4] ~@7 [g3,c4,e4]@2 ~@4", R: "~@2 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~",
  S: "~@6 [a3,c4,e4]@3 ~ [a3,c4,e4] ~@5 a2 ~ [a3,c4,e4]@3 ~@3", T: "~@6 [a3,d4,f4]@2 ~@8 d3 ~ [a3,d4,f4]@3 ~@3",
  U: "~@2 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~", V: "~@3 [bb3,db4,f4] ~@5 [bb3,db4,f4] ~@2",
  W: "~@6 [c4,d4,f4,a4]@3 ~@7 d3@2 [c4,d4,f4,a4]@2 ~@4", X: "~@2 [bb3,d4,f4,g4] ~@3 [g3,c4,e4] ~",
  Y: "~@6 [a3,c4,f4]@2 ~@10 [a3,c4,f4]@3 ~@3", Z: "~@6 [g3,bb3,d4]@2 ~@8 g2 ~ [g3,bb3,d4]@3 ~@3",
  AA: "~@6 [bb3,d4,f4]@3 ~ [bb3,d4,f4] ~@5 bb2 ~ [bb3,d4,f4]@3 ~@3", AB: "~@2 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~",
  AC: "~@4 a2@2 [a3,c4,e4]@2 ~@10 [c4,d4,f4,a4]@3 ~@3", AD: "~@2 g2 [bb3,d4,f4,g4]@2 ~@7",
  AE: "~@6 [d4,g4,bb4]@3 ~ [d4,g4,bb4] ~@7 [d4,g4,bb4]@2 ~@4", AF: "~@2 [g3,c4,e4] ~@3 [c4,e4,g4] ~",
  AG: "~@6 [bb3,db4,f4]@3 ~ [bb3,db4,f4] ~@7 [bb3,db4,f4]@2 ~@4", // Bbm
  AH: "[a3,c4,e4]@3 ~ a2@2 [a3,c4,e4]@2 ~@4 [c4,d4,f4,a4]@3 ~ d3@2 [c4,d4,f4,a4]@2 ~@4", // Am Dm7
  AI: "[g3,bb3,d4]@3 ~@3 [g3,bb3,d4]@3 ~@7 c3@2 [g3,c4,e4]@4 ~@2", // Gm C
  AJ: "~@6 [a3,c4,e4]@3 ~ [a3,c4,e4] ~@7 [a3,c4,e4]@2 ~@4", // Am
  AK: "~@6 [a3,d4,f4]@3 ~ [a3,d4,f4] ~@5 d3 ~ [a3,d4,f4]@3 ~@3", AL: "~@3 [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@2",
  AM: "~@4 g2@2 [bb3,d4,f4,g4]@4 ~@8 [g3,c4,e4]@3 ~@3", // Gm7 C
  AN: "~@6 [bb3,d4,f4,g4]@3 ~@3 [g3,c4,e4]@3 ~ c3@2 [g3,c4,e4]@2 ~@4", // Gm7 C
  AO: "~@6 [a3,c4,e4]@3 ~@3 [c4,d4,f4,a4]@3 ~ d3@2 [c4,d4,f4,a4]@2 ~@4", // Am Dm7
  AP: "~@6 [a3,c4,f4]@3 ~ [a3,c4,f4] ~@7 [a3,c4,f4]@2 ~@4", // F
})).s("gm_piano").gain(0.28)

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

// drums · rim
const rim = s("rim").struct("<~@20 A@3 B A C A B A D A@3 B A ~@17 A ~ A ~@13 A ~ A ~@17>".pickRestart({
  A: "~ x", B: "~@5 x ~@6", C: "x ~@4 x ~@3 x ~@2", D: "~ x ~ x ~@2",
})).gain(0.28)

// drums · snare
const snare = s("sd").struct(`<
  A@3 ~ A@5 B A B A@7 C ~@15 C A@15 C ~ D ~ C A E A@5 B A B A C ~ E ~ D A D A@5 B A@3 C A E ~@2
>`.pickRestart({
  A: "~ x", B: "~@6 x ~@4 x", C: "~@11 x", D: "x ~ x ~@2 x ~@6", E: "~@3 x",
})).gain(0.36)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@19 A ~@31 A ~@3 A ~@11 A ~@15 A ~@4>".pickRestart({
  A: "~ x!2 ~ x!2 ~@6",
})).gain(0.2)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A@2 B ~ A@7 C B A@2 ~ B A@2 ~ B A D A B C A@3 C A@2 D A@2 ~ A@4 B@2 A B@2 A@2 B A B@2 ~ B@3 ~ A@4 B ~ B A@2 C A ~ B@4
  A B A@2 B@3 A B A@2 ~ A@2 ~@2
>`.pickRestart({
  A: "~@2 x ~@8 x", B: "~@11 x", C: "~ x ~@4", D: "~ x!2 ~@8 x",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@2 A B ~@8 A ~@6 C ~@15 D ~@8 A ~@2 A ~@2 A C ~@3 C ~@6 A ~@4 C ~ E ~@7 A@2 ~@4 C ~@2 B ~
>`.pickRestart({
  A: "~@11 x", B: "~@3 x!4 ~@5", C: "~@2 x", D: "~@7 x!3 ~@2", E: "~@2 x!2 ~@2",
})).gain(0.32)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@2 A ~@37 A ~@3 A ~@31 A ~@3 A ~@7>".pickRestart({
  A: "~ x ~@10",
})).gain(0.16)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@15 B ~@15 C ~@15 B ~ B ~ B ~ D ~@9 B ~ E ~ B ~ B ~@9 B ~ D A ~>".pickRestart({
  A: "x!3 ~@6 x ~@2", B: "~@3 x", C: "~ x!3 ~ x ~@6", D: "x!4 ~@2", E: "x!3 ~@9",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@7 B ~@7 B ~@15 B ~@15 B ~ A ~ B ~ A ~@7 B ~ B ~ A ~ A ~ A ~@9 B ~ A ~ C
>`.pickRestart({
  A: "~@3 x", B: "~@11 x", C: "x",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@3 B A@15 ~@2 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B A@15 ~@2 B ~@2 A B A@9 ~@2 B ~ B A B A@9 ~ A B@2 ~
>`.pickRestart({
  A: "~ x ~ x", B: "x!2 ~@4",
})).gain(0.32)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@19 A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@16 A@2 ~ A@2 ~@11 A@2 ~ A ~@12 A ~@4
>`.pickRestart({
  A: "~@11 x",
})).gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!2]!87 ~>").gain(1.43)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<[~@5 x ~@5 x]!87 ~>").gain(0.81)

// drums · shaker
const shaker = s("sh").struct("<[x!4]!87 ~>").gain(0.28)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<[~@2 x ~@2 x ~@2 x ~@2 x]!87 ~>").gain(0.12)

stack(
  bass, piano, kick, rim, snare, snare_soft, hihat, hihat_soft, mid_tom, open_hat, open_hat_soft, high_tom, crash,
  tambourine, tambourine_soft, cabasa, cabasa_soft, shaker, shaker_soft
)

More by The Beach Boys