Strudelify

Anna Lee, the Healer

The Beach Boys

KeyD majorTempo96 bpm
0:00/0:00
// Anna Lee, the Healer — The Beach Boys
// 96 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/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.

// chords · electric guitar muted · "Guitar 1"
const electric_guitar_muted = note(`<
  ~ A@2 B@8 C D A@2 B@8 E F G H I@4 J@3 K I@4 L ~ M@2 B@4 E F G H I@4 J@3 K I@4 L ~ M N A@2 B@2 O P Q R S R S T ~
>`.pickRestart({
  A: "[~@6 [d4,d5] f#4 [d4,d5]@2 [a3,d5]@2 [a#3,d5]@2 [b3,d5]@8 [a#3,d5]@2 [b3,d5]@2 [a#3,d5]@2 [b3,d5]@2 [a#3,d5]@2]/2", // D D5 A# Bm A# Bm A# Bm …
  B: "[[a3,d5]@6 [d4,d5] f#4 [d4,d5]@2 [a3,d5]@2 [a#3,d5]@2 [b3,d5]@8 [a#3,d5]@2 [b3,d5]@2 [a#3,d5]@2 [b3,d5]@2 [a#3,d5]@2]/2", // D5 D D5 A# Bm A# Bm A# …
  C: "[a3,d5] ~", D: "~@2 g3 [a3,c#4]@5", E: "[a3,d5]@4 ~@3 g3", F: "[b3,e4]@2 g3 [a3,c#4]@5",
  G: "[a3,d4]@3 [a3,d4]@3 [a3,d4] [a3,d4,f#4]", H: "[a3,d4,f#4]@2 [a3,d4,f#4] ~@5",
  I: "~@3 [d4,g4,b4] ~@2 [d4,g4,b4] ~", J: "~@3 [a3,d4,f#4] ~@2 [a3,d4,f#4] ~",
  K: "~@2 [a3,d4,f#4] ~ [b3,d4,g4] ~ [d4,f#4,a4] ~", L: "~@3 [b3,e4,g#4] ~@2 [b3,e4,f#4,g#4] ~",
  M: "~@3 [c#4,e4,a4] ~@2 [c#4,e4,a4] ~", N: "~@3 [c#4,e4,a4] ~@2 [a3,c#4,g4] ~", O: "[a3,d5]@3 [b3,d5]@4 g3",
  P: "[b3,e4]@3 [a3,c#4]@5", Q: "~@6 [d4,d5] f#4 [d4,d5]@2 [a3,d5]@2 [a#3,d5]@4",
  R: "[b3,d5]@3 [a#3,d5] [b3,d5] [a#3,d5] [b3,d5] [a#3,d5]", S: "[a3,d5]@6 [d4,d5] f#4 [d4,d5]@2 [a3,d5]@2 [a#3,d5]@4",
  T: "~@3 [a#3,d5] [b3,d5] [a#3,d5] [b3,d5]@2", // A# Bm A# Bm
})).s("gm_electric_guitar_muted").gain(0.29).pan(0.2)

// chords · electric guitar muted · "Guitar 2"
const electric_guitar_muted_2 = note(`<
  ~ A B A B A B A B A B C D A B A B A B A B A B E D A F G@4 F@4 G@4 H@2 I@2 A B A B E D A F G@4 F@4 G@4 H@2 I@2 A B A B
  J K A B A B A B L
>`.pickRestart({
  A: "[d3,f#3,a3,d4]@3 [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]!3", B: "[b2,d3,f#3,b3]@3 [b2,d3,f#3,b3]@2 [b2,d3,f#3,b3]!3",
  C: "[d3,f#3,a3,d4]!4 [b2,d3,f#3,b3]!3 [b2,d3,f#3,b3,c4]", D: "[e3,g3,b3,e4]!4 [a2,c#3,e3,a3]!4",
  E: "[d3,f#3,a3,d4]!4 [b2,d3,f#3,b3]!4", F: "[d3,f#3,a3,d4]!8", G: "[g3,b3,d4,g4]!8", H: "[e3,g#3,b3,e4]!8",
  I: "[a2,c#3,e3,a3]!8", J: "[d3,f#3,a3,d4]@3 [d3,f#3,a3,d4] [b2,d3,f#3,b3]!4",
  K: "[e3,g3,b3,e4]@3 [e3,g3,b3,c#4,e4] [a2,c#3,e3,a3]!4", L: "[d3,f#3,a3,d4]",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.8)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~ A B C B A B A B A B D E C F A F A B A B A B G E H I J@3 K L@3 I J@3 M N O P Q A B A B G E H I J@3 K L@3 I J@3 M N O
  P R S B S B G T U V U V U V W
>`.pickRestart({
  A: "d2@3 a2 ~@4", B: "b1@3 f#2 ~@4", C: "d2@3 a2@3 ~@2", D: "f#2@3 b1@3 b1 d2", E: "e2@3 a2 ~@2 a2 e2",
  F: "b1@3 f#2@3 ~@2", G: "d2@3 b1@3 b1 d2", H: "d2@3 a2 ~@2 a2 c#2", I: "d2!2 e2 f#2", J: "g2@3 g2 ~@2 d2 f#2",
  K: "g2@3 g2 ~@2 a1 c#2", L: "d2@3 d2 ~@2 a1 c#2", M: "g2@3 g2 ~@2 b1 d2", N: "e2@3 e2 ~@2 b1 d2",
  O: "e2@3 e2 ~@2 e2 g2", P: "a2@3 a2@3 a2@2", Q: "a2!2 g2!2 f#2!2 e2!2", R: "a2@2 g2@2 f#2@2 e2 a1",
  S: "d2@3 a2 ~@2 d2 c#2", T: "e2@3 a2 ~ a1 c#2 e2", U: "d2@3 a2 ~@2 d2@2", V: "b1@3 f#2@3 a1 c#2", W: "d2",
})).s("gm_fretless_bass").gain(0.68).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~ A@18 B@7 ~ C@7 ~ C@7 ~ B@7 ~ C@7 ~ C@7 ~ B@11 C ~>".pickRestart({
  A: "x ~@6 x", B: "x ~@2 x ~@3 x", C: "x ~@2 x ~@4",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<A B@25 C B@7 D B@7 E B@7 C B@7 D B@7 F B@11 G ~>".pickRestart({
  A: "~@7 x", B: "~ x ~ x", C: "x ~ x!3 ~ x ~ x!3 ~ x ~ x ~", D: "x ~@2 x!10 ~ x ~", E: "x ~ x ~ x!9 ~ x ~",
  F: "x!13 ~ x ~", G: "~@2 x ~@3 x!2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~ [~@5 x ~@2]!25 ~@17 [~@5 x ~@2]!7 ~@17 [~@5 x ~@2]!11 ~@2>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@27 A@7 ~ A@7 ~@9 A@7 ~ A@7 ~@14>".pickRestart({
  A: "x!8",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@79 x>").gain(0.5)

stack(electric_guitar_muted, electric_guitar_muted_2, bass, kick, snare, hihat, open_hat, crash)

More by The Beach Boys