Strudelify

Do It Again

The Beach Boys

KeyE♭ majorTempo120 bpm
0:00/0:00
// Do It Again — The Beach Boys
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "bass-2"
const bass = note(`<
  ~@3 A@2 B A C D A B A E A E F G H I C J K L M G F N O A@3 F D P B A@2 B E Q R B A S J K L M G F N O A@3 F D P B A@2 B
  E Q R B A T R B A T R B U ~
>`.pickRestart({
  A: "eb2@5 ~ eb2 ~ eb2@6 ~@2", B: "eb2@5 ~ eb2 ~ eb2@7 ~", C: "ab2@5 ~ ab2 ~ ab2@7 ~", D: "bb2@5 ~ bb2 ~ bb2@6 ~@2",
  E: "eb2@5 ~ eb2 ~ eb2@5 ~@3", F: "ab2@5 ~ ab2 ~ ab2@6 ~@2", G: "bb2@4 ~@2 bb2 ~ bb2@5 ~@3",
  H: "eb2@4 ~@2 eb2 ~ eb2@7 ~", I: "eb2@4 ~@2 eb2 ~ eb2@3 ~ eb2@2 ~@2", J: "bb2@5 ~ bb2 ~ bb2@3 ~ bb2@2 ~@2",
  K: "g2@5 ~ g2 ~ g2@4 ~@4", L: "f2@4 ~@2 f2 ~ f2@5 ~@3", M: "f2@5 ~ f2 ~ f2@5 ~@3",
  N: "bb2@5 ~ bb2 ~ ab2@3 ~ f2@2 ~@2", O: "eb2@4 ~@2 eb2 ~ eb2@6 ~@2", P: "eb2@6 eb2 ~ eb2@7 ~",
  Q: "ab2@5 ~ ab2 ~ ab2@5 ~@3", R: "bb2@5 ~ bb2 ~ bb2@5 ~@3", S: "ab2@5 ~ ab2 ~ ab2@7 ~, eb2@3 ~@13",
  T: "eb2@3 ~@3 ab2 ~ ab2@5 ~@3", U: "eb2",
})).s("gm_electric_bass_finger").gain(0.38)

// chords · piano · "piano-3"
const piano = note(`<
  ~@3 A@4 B C A@6 B C A@2 D E F G@2 H D G A@4 B C A@6 B C A@2 D E F G@2 H D G A@4 B C A@6 B C A@2 B C A@2 B C A I ~
>`.pickRestart({
  A: "[eb4,bb4]!2 c5!2 [eb4,bb4]!2 c5!2", B: "[ab4,eb5]!2 f5!2 [ab4,eb5]!2 f5!2", C: "[bb4,f5]!2 g5!2 [bb4,f5]!2 g5!2",
  D: "[ab4,c5,eb5]@3 [ab4,c5,eb5] [ab4,c5,eb5]@3 [ab4,c5,eb5]", // Ab
  E: "[bb4,d5,f5]@3 [bb4,d5,f5] [bb4,d5,f5]@3 [bb4,d5,f5]", F: "[c5,eb5,g5]@3 [c5,eb5,g5] [c5,eb5,g5]@3 [c5,eb5,g5]",
  G: "[f4,ab4,c5]@3 [f4,ab4,c5] [f4,ab4,c5]@3 [f4,ab4,c5]", H: "[g4,bb4,d5]@3 [g4,bb4,d5] [g4,bb4,d5]@3 [g4,bb4,d5]",
  I: "[eb5,g5,bb5,eb6]", // Eb
})).s("gm_piano").gain(0.3).pan(0.6)

// chords · electric guitar clean · "steel-4"
const electric_guitar_clean = note("<~@3 A@4 B@2 C@6 D@4 E@4 F G H@6 I@6 J@6 K@8 L@4 M@8 N@4 O@4 P@3 Q ~>".pickRestart({
  A: "[[eb4,g4,bb4,eb5]@12 ~@4 [g4,bb4,eb5]@12 ~@4 [g4,bb4,eb5]@13 ~@3 [g4,bb4,eb5]@10 ~@5 ab4, ~@15 eb4@13 ~@3 eb4@14 ~@2 eb4@10 ~@7]/4", // Eb
  B: "[[ab4,c5,eb5]@9 ~@7 [ab4,bb4,d5]@11 ~@5, ~@15 f4@11 ~@6]/2", // Ab Bb7
  C: "[~ eb5@9 ~@6 [g4,bb4,eb5]@10 ~@6 [g4,bb4,eb5]@8 ~@8 eb5@9 ~@7 eb5@9 ~@7 [g4,bb4,eb5]@6 ~@9 ab4, [eb4,g4,bb4]@9 ~@6 eb4@10 ~@6 eb4@9 ~@7 [eb4,g4,bb4]@10 ~@6 [eb4,g4,bb4]@9 ~@7 eb4@7 ~@10]/6", // Eb
  D: "[[ab4,c5,eb5]@8 ~@8 [ab4,bb4,d5]@8 ~@8 [g4,bb4,eb5]@7 ~@9 [g4,bb4,eb5]@10 ~@5 ab4, ~@15 f4@9 ~@7 eb4@8 ~@8 eb4@11 ~@6]/4", // Ab Bb7 Eb
  E: "[[ab4,c5,eb5]@9 ~@7 [bb4,d5]@7 ~@9 eb5@6 ~@10 c5@12 ~@3 f4, ~@15 f4@7 ~@9 [g4,c5]@7 ~@9 [f4,ab4]@12 ~@5]/4", // Ab Bb C5 Fm
  F: "[f4,ab4,c5]@8 ~@7 g4", G: "[g4,bb4,d5]@7 ~@8 ab4",
  H: "[[ab4,c5,eb5]@6 ~@10 [bb4,d5]@8 ~@8 [g4,bb4,eb5]@5 ~@11 [g4,bb4,eb5]@6 ~@10 eb5@6 ~@10 [g4,bb4,eb5]@6 ~@9 ab4, ~@15 f4@9 ~@7 eb4@6 ~@10 eb4@7 ~@9 [eb4,g4,bb4]@6 ~@10 eb4@7 ~@10]/6", // Ab Bb Eb
  I: "[[ab4,c5,eb5]@7 ~@9 [ab4,bb4,d5]@8 ~@8 [g4,bb4,eb5]@9 ~@7 [g4,bb4,eb5]@7 ~@9 [g4,bb4,eb5]@9 ~@7 eb5@7 ~@8 eb4, ~@15 f4@8 ~@8 eb4@10 ~@6 eb4@8 ~@8 eb4@10 ~@6 [eb4,g4,bb4]@7 ~@10]/6", // Ab Bb7 Eb
  J: "[[g4,bb4,eb5]@5 ~@11 [g4,bb4,eb5]@7 ~@8 ab4 [ab4,eb5]@8 ~@8 [ab4,bb4,d5]@9 ~@7 [bb4,eb5]@10 ~@6 [g4,bb4,eb5]@9 ~@6 ab4, ~@15 eb4@8 ~@8 c5@8 ~@8 f4@9 ~@7 [eb4,g4]@11 ~@5 eb4@10 ~@7]/6", // Eb Ab5 Bb7 Eb5 Eb
  K: "[[ab4,c5,eb5]@10 ~@6 d5@9 ~@6 g4 g4@9 ~@7 [ab4,c5]@14 ~ f4 f4@7 ~@8 g4 [g4,d5]@9 ~@6 ab4 ab4@10 ~@6 [bb4,d5]@13 ~@3, ~@15 [f4,bb4]@10 ~@6 [c5,eb5]@10 ~@6 f4@14 ~@2 [ab4,c5]@8 ~@8 bb4@9 ~@7 [c5,eb5]@11 ~@5 f4@14 ~@3]/8", // Ab G5 Bb Bb5 Cm Ab Cm
  L: "[~ eb5@10 ~@5 eb5@12 ~@4 [g4,bb4,eb5]@9 ~@7 [g4,bb4,eb5]@10 ~@5 ab4, [eb4,g4,bb4]@10 ~@5 [eb4,g4,bb4]@13 ~@3 eb4@10 ~@6 eb4@10 ~@7]/4", // Eb
  M: "[[ab4,c5,eb5]@9 ~@7 [ab4,bb4,d5]@10 ~@6 [g4,bb4,eb5]@11 ~@5 [g4,bb4,eb5]@11 ~@5 [g4,bb4,eb5]@9 ~@7 [bb4,eb5]@11 ~@5 [g4,bb4,eb5]@11 ~@5 [g4,bb4,eb5]@11 ~@4 ab4, ~@15 f4@10 ~@6 eb4@12 ~@4 eb4@12 ~@4 eb4@10 ~@6 [eb4,g4]@12 ~@4 eb4@12 ~@4 eb4@12 ~@5]/8", // Ab Bb7 Eb Eb5 Eb
  N: "[[ab4,c5,eb5]@9 ~@7 d5@9 ~@7 [g4,bb4,eb5]@10 ~@6 [g4,bb4,eb5]@11 ~@4 ab4, ~@15 [f4,ab4,bb4]@10 ~@6 eb4@10 ~@6 eb4@12 ~@5]/4", // Ab Eb Bb7
  O: "[[ab4,c5,eb5]@9 ~@7 d5@9 ~@7 eb5@12 ~@4 eb5@10 ~@5 ab4, ~@15 [f4,ab4,bb4]@9 ~@7 [eb4,g4,bb4]@13 ~@2 eb4@11 ~@7, ~@47 [g4,bb4]@11 ~@6]/4", // Ab Bb7 Eb Gm
  P: "[[ab4,c5,eb5]@5 ~@3 [bb4,d5]@5 ~@3 [g4,bb4,eb5]@6 ~@2, ~@15 [f4,ab4]@10 ~@6 eb4@13 ~@4]/3", // Ab Bb Eb Fm
  Q: "[eb4,g4,bb4,eb5]@7 ~", // Eb
})).s("gm_electric_guitar_clean").gain(0.27).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  [~@10 x!2 ~@4]
  [x!4]
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]
  [x!4]!15
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]
  [x!4]!55
  x
  ~
>`).gain(0.36)

// drums · snare
const snare = s("sd").struct("<A B C D@7 E D@7 C D@24 F@7 D@16 G D@3 G D@2 H I ~>".pickRestart({
  A: "~@3 x", B: "~@2 x ~@3 x!2", C: "~@4 x ~@4 x ~@2 x!2 ~@2", D: "~ x ~ x", E: "~@2 x ~@2 x!3", F: "~@2 x!2 ~@2 x!2",
  G: "~@2 x ~ x!4", H: "x!5 ~@3", I: "x",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~ A B A@15 B A@6 C D E A@14 F G@7 H A@7 F A@11 I A@2 J K ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~@2 x", C: "~@2 x!6", D: "x!8", E: "x!2 ~ x", F: "~@4 x ~@7 x ~ x!2",
  G: "~@2 x!2 ~@2 x!2", H: "~ x!7", I: "~@2 x ~ x!4", J: "x ~ x ~ x ~ x ~@3 x!2 ~@2 x ~", K: "x ~@14 x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<A B@13 C B C B@18 ~@7 D B@16 ~@7 E ~@3 E ~@2 B F ~>".pickRestart({
  A: "~ x!2 ~", B: "x!8", C: "x!7 ~", D: "~@7 x", E: "~@4 x!4", F: "x",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A ~@15 A ~@23 B ~@15 B ~@14 C D ~>".pickRestart({
  A: "~@7 x", B: "~@13 x ~@2", C: "~@9 x ~@2 x ~@3", D: "~@15 x",
})).gain(0.41)

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

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

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@34 [~@5 x ~ x] ~@41>").gain(2.59)

stack(bass, piano, electric_guitar_clean, kick, snare, low_tom, hihat, mid_tom, open_hat, crash, agogo_bells)

More by The Beach Boys