Strudelify

Surf's Up

The Beach Boys

KeyD minorTempo84 bpm
0:00/0:00
// Surf's Up — The Beach Boys
// 84 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 33, 4/4 at bar 35, 2/4 at bar 52, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 84 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(84/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 · fretless bass · "Bass"
const bass = note(`<
  A B C D E B F D G H I J K L@3 A B C D E B F D G H I J K M@3 N O@8 P@4 Q@2 R@6 ~@11 S T U V W X Y Z@8 AA AB@3 ~
>`.pickRestart({
  A: "d2@3 d2@3 ~ d2", B: "d2@3 d2@4 d2", C: "g2@3 g2@4 g2", D: "g2@3 g2@2 g2@2 g2", E: "d2@2 ~ d2@4 d2",
  F: "g2@3 g2 g2@3 g2", G: "bb1@3 bb1 a1@3 a1", H: "c2!2", I: "c2@3 c2@2 c2@2 c2", J: "d2@3 d2 d2@3 d2",
  K: "g2@2 ~ g2 g2@3 g2", L: "[a2@3 a2 a2@19 ~]/3", M: "[a2@18 a2@6 a2@61 ~@12 e2@25 f2@22, ~@85 a2@53 ~@6]/3",
  N: "~ gb2@47", O: "[~@24 ab1@73 ~@7 bb1@74 ~@7 ab1@80 ~@2 bb1@73 ~@7 d2@37]/8",
  P: "[~@2 c2@41 ~ f2@78 ~@6 d2@30 ~@3 c2@31]/4", Q: "[~@3 e1@6 f1@52 ~@4 d1@31]/2",
  R: "[~ g1@41 f1@68 ~@11 d1@39 c2@41 f1@56 ~@31]/6", S: "~@5 f2@11", T: "~@17 eb2@31", U: "~@5 bb1@7", V: "~@11 c2@13",
  W: "~ f2", X: "~@13 eb2@11", Y: "~@29 bb1@19", Z: "[~@31 c2@50 ~ f2@50 eb2@50 ~ bb1@50 c2@50 f2@51 eb2@50]/8",
  AA: "bb1", AB: "[~@3 c2@50 f2@51 ~@40]/3",
})).s("gm_fretless_bass").gain(0.48)

// chords · piano
const piano = note(`<
  A@2 B@2 A@2 B@2 C D E F G H@4 A B@2 A@2 B@2 C D E F G I@4 J@8 K@6 L@2 M@5 N@8 O P Q R S@3 T U@4 V W@4 X Y@3 ~
>`.pickRestart({
  A: "[g4,bb4,d5,f5]!4", B: "[f4,a4,d5,f5]!4", C: "[bb4,d5,f5]!3 [g4,bb4,d5,f5], ~@4 g4 ~@3",
  D: "[f4,a4,c5]!2 [e4,g4,c5]!2", E: "[d4,gb4,a4]!4", F: "[g4,b4,d5]!4",
  G: "[a4,db5,e5]@2 [a4,db5,e5]@2 [a4,db5,e5]@2 [db5,e5] ~, ~@3 a4", // A Dbm
  H: "[[d5,gb5]@7 ~ d5@6 ~@2 a4@8 [g4,bb4,d5,f5]@2 [g4,bb4,d5,f5]@2 [g4,bb4,d5,f5]@2 [g4,bb4,d5,f5]@2, a4@6 ~ a4@6 ~ d5@10 ~@8, ~ gb5@3]/4", // D Gm7
  I: "[[d5,gb5]@7 ~ d5@6 ~@2 a4@8 ~@8, a4@6 ~ a4@6 ~@19, ~ gb5@3, ~@4 f5 ~@2 d5@5 ~@4]/4", // D
  J: "[~@24 [f4,ab4,c5,eb5]@9 ~@2 eb5@7 ~@2 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@9 ~ [f4,ab4,c5,eb5]@7 ~@14 [g4,c5]@8 ~@2 [c4,eb4,g4,c5]@9 ~ [c4,eb4,g4,c5]@8 ~@2 [c4,eb4,g4,c5]@8 ~@2 [c4,eb4,g4,c5]@8 ~@2 [c4,eb4,g4,c5]@9 ~@2 g4@7 ~@3 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@8 ~@2 [f4,c5,eb5]@8 ~@2 [f4,c5,eb5]@7 ~@3 [c5,eb5]@6 ~@4 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@6 ~@4 [c4,eb4,g4,c5]@8 ~@2 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@8 ~@2 [c4,eb4,g4,c5]@8 ~@3 c5@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [a4,c5]@8 ~@2 [d4,a4,c5]@8 ~@2 [a4,c5]@7 ~@3 [d4,f4,a4,c5]@7, ~@24 ab2@78 ~@3 bb2@80 ~ ab2@81 ~@59 [c4,eb4,g4]@8 ~@12 [d4,f4]@8 ~@2 f4@8 ~@2 [d4,f4]@7 ~@11, ~@34 [f4,ab4,c5]@9 ~@61 [c4,eb4,g4,c5]@8 ~@2 [c4,eb4]@8 ~@53 [c4,eb4,c5]@8 ~@22 ab4@8 ~@2 ab4@7 ~@3 [f4,ab4]@7 ~@34 bb2@80 ~ d3@37]/8", // Fm7 C5 Cm Fm7 F7 Cm Fm7 Cm …
  K: "[~@3 [g4,bb4,d5,f5]@8 ~@2 [g4,bb4,d5,f5]@7 ~@3 [c4,e4,g4,bb4]@7 ~@3 [c4,e4,g4,bb4]@9 ~ [f4,a4,c5,f5]@8 ~@2 [f4,a4,c5,f5]@8 ~@2 [f4,a4,c5,f5]@7 ~@4 f5@7 ~@3 [a4,c5,f5]@7 ~@3 [f4,a4,c5,f5]@9 ~@3 [f4,a4,c5,f5]@9 ~ [f4,a4,c5]@8 ~@5 c5@4 ~@3 [d4,f4,a4,c5]@6 ~@3 c5@5 ~@4 c5@5 ~@3 [bb4,f5]@6 ~@3 [d4,g4,f5]@9 [c4,e4,g4]@8 ~@2 [c4,e4,g4]@8 ~@15 [f4,a4,c5]@25 ~@26 [d4,c5]@7 ~@2 c5@5 ~@2 [d4,f4,a4,c5]@7 ~, ~@3 g2@20 c2@20 f2@78 ~@7 d3@31 ~@2 c3@39 ~ f2@44 ~@9 [d4,f4,a4]@7 ~@2 [f4,a4]@6 ~@3 [d4,f4,a4]@6 ~@10, ~@73 [f4,a4,c5]@8 ~@2 f4@8 ~@37 [d4,f4,a4]@5 ~@11 [d4,f4,a4]@6 ~@3 [d4,f4,a4]@5 ~@3 [d4,g4]@7 ~@3 bb4@5 ~@24 [f4,a4,c5]@10 ~@43 c5@9 ~@26, ~@255 d3@32 ~]/6", // Gm7 C7 F Dm7 Bb5 G7 C F …
  L: "[~ [d4,g4,bb4,f5]@8 ~@2 [d4,g4,bb4]@6 ~@4 [g4,bb4]@7 ~@4 bb4@8 ~@3 [f4,a4,c5]@9 [f4,a4,c5]@9 ~ c5@8 ~ [f4,c5]@7 ~@2 [f4,a4,c5]@7 ~@3 [f4,a4,c5]@6, ~ c3@38 ~@3 f2@35 ~@19, ~@10 f5@7 ~@3 [c4,e4]@8 ~@3 [c4,e4,g4]@7 ~@23 [f4,a4]@9 a4@7 ~@19]/2", // Gm7 Gm F F5 F C F
  M: "[~@4 [f4,a4,c5]@7 ~@4 [f4,a4,c5]@4 ~@7 [d4,f4,a4,c5]@6 ~@3 [d4,f4,a4]@6 ~@3 [d4,f4,a4,c5]@7 ~@3 [d4,f4,a4,c5]@6 ~@4 [g4,f5]@8 ~@2 [d4,g4,bb4,f5]@7 ~@4 bb4@6 ~@4 bb4@9 ~@5 c5@43 ~@23 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@5, ~@25 d3@39 c3@42 f2@77 ~@57, ~@34 c5@7 ~@22 [d4,bb4]@8 ~@13 [c4,e4,g4]@8 ~@2 [c4,e4,g4]@8 ~@4 f4@46 ~@23 ab2@65, ~@107 a4@45 ~@88]/5", // F Dm7 Dm Dm7 G7 Gm7 Fm7 Gm …
  N: "[~@5 [f4,ab4,c5,eb5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@8 ~@2 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5]@8 ~@2 [f4,ab4,c5,eb5]@7 ~@3 [c4,eb4,g4,c5]@8 ~@2 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4]@8 ~ [c4,eb4,g4,c5]@8 ~@3 [c4,eb4,g4,c5]@7 ~@3 [eb4,g4,c5]@7 ~@3 [c4,f4,ab4,c5]@8 ~@2 [c4,f4,ab4,c5]@7 ~@3 [c4,f4,ab4,c5]@7 ~@3 [c4,f4,ab4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4]@7 ~@2 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [f4,ab4,c5,eb5]@7 ~@3 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@8 ~@2 [f4,ab4,c5,eb5]@7 ~@3 [c4,eb4,g4,c5]@8 ~@2, ~@15 bb2@80 ab2@77 ~@3 bb2@75 ~@134, ~@155 eb5@5 ~@55 c5@5 ~@24 c4@5 ~@55 c5@7 ~@73]/8", // Fm7 Cm Fm7 Fm Fm7 Cm Fm Cm …
  O: "[c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4]@5 ~@5 [bb3,d4,f4]@7 ~@3 [bb3,d4,f4]@8, ~@5 c5@2 ~@5", // Cm Bb
  P: "~@2 [bb3,d4]@8 ~@2 [bb3,d4,f4]@5 ~@5 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@7 ~@3 [c4,eb4,g4,c5]@6, ~@2 f4@5 ~@41", // Bb Cm
  Q: "~@4 [c4,eb4,g4,c5]@8 ~@2 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@4 [c4,f4,ab4]@2 ~@4 [c4,f4,ab4]@2 ~@5 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@2, ~@14 f3@6 ~@7 f3@6 ~@7 f3@6 ~@2", // Cm Fm
  R: "~@4 [c4,f4,ab4]@3 ~@4 [c4,ab4]@2 ~@4 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@2 ~@5 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@3, ~@4 f3@12 ~ c3@10 ~@3 c3@6 ~@6 c3@6, ~@11 f4 ~@36", // Fm Cm
  S: "[~ [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@3 ~@3 [c4,eb4]@2 ~@5 [bb3,d4]@2 ~@4 [d4,f4] ~@5 [bb3,d4]@3 ~@3 [bb3,d4]@3 ~@4 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@3 ~@4 [bb3,d4,f4]@2 ~@4 [c4,eb4,g4]@2 ~@4 [c4,g4]@2 ~@5 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@2 ~@4 [c4,g4]@2 ~@5 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@4 [c4,f4,ab4]@3 ~@4 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@2 ~@4 [c4,f4,ab4]@2 ~@3, ~@7 c3@13 bb2@11 ~ bb2@11 ~@2 bb2@6 ~@6 bb2@13 c3@6 ~@7 c3@10 ~@2 c3@6 ~@7 c3@6 ~@6 f3@7 ~@6 f3@6 ~@5, ~@13 g4 ~@6 f4 ~@5 bb3@2 ~@4 f4 ~@5 f4 ~@37 eb4 ~@24 eb4 ~@42]/3", // Cm Bb Dm Bb Cm C5 Cm C5 …
  T: "~@2 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@3 [c4,ab4]@2 ~@5 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@4 [c4,eb4,g4]@2, ~@2 f3@10 ~@2 f3@12 ~ c3@10 ~@2 c3@7 ~@2, ~@20 f4 ~@27", // Fm Cm
  U: "[~@4 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@3 ~@4 [c4,eb4,g4]@3 ~@3 [c4,eb4]@2 ~@4 [bb3,d4]@2 ~@4 [d4,f4] ~@6 [bb3,d4]@3 ~@3 [bb3,d4]@3 ~@3 [bb3,d4,f4]@3 ~@4 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@2 ~@5 [c4,eb4,g4]@2 ~@4 [c4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@5 [c4,eb4,g4]@2 ~@4 [c4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@4 [c4,eb4,g4]@2 ~@4 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@4 [c4,f4,ab4]@2 ~@4 [c4,f4,ab4]@2 ~@4 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@4 [c4,f4,ab4]@3 ~@3 [c4,ab4]@2 ~@4 [c4,eb4,g4]@2 ~@5 [c4,eb4,g4]@2 ~@3, ~@4 c3@6 ~@7 c3@12 f4 ~@5 bb3@2 ~@5 f4 ~@5 f4 ~@37 eb4 ~@24 eb4 ~@62 f4 ~@17, ~@23 g4 ~@5 bb2@11 ~@2 bb2@11 ~ bb2@7 ~@6 bb2@13 c3@6 ~@6 c3@10 ~@3 c3@6 ~@6 c3@7 ~@6 f3@6 ~@7 f3@6 ~@6 f3@10 ~@3 f3@12 c3@7 ~@5]/4", // Cm Bb Dm Bb Cm C5 Cm C5 …
  V: "~ [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@5 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@3 ~@3 [c4,eb4]@2 ~@5 [bb3,d4]@2 ~@4 [d4,f4] ~@2, ~ c3@6 ~@7 c3@6 ~@6 c3@13 bb2@6 ~@3, ~@32 g4 ~@6 f4 ~@5 bb3@2 ~", // Cm Bb Dm
  W: "[~@3 [bb3,d4]@3 ~@4 [bb3,d4]@3 ~@3 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@3 ~@4 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@2 ~@4 [c4,eb4,g4]@2 ~@4 [c4,g4]@2 ~@5 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@2 ~@5 [c4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@5 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@2 ~@4 [c4,f4,ab4]@2 ~@5 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@4 [c4,ab4]@2 ~@4 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@2 ~@5 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@3 ~@4 [c4,eb4,g4]@3 ~@3 [c4,eb4]@2 ~@4, ~@3 bb2@11 ~@2 bb2@6 ~@7 bb2@13 ~@12 c3@10 ~@2 c3@7 ~@6 c3@6 ~@7 f3@6 ~@6 f3@6 ~@7 f3@10 ~@2 f3@12 ~ c3@10 ~@3 c3@6 ~@6 c3@6 ~@7 c3@12, ~@3 f4 ~@6 f4 ~@30 c3@6 eb4 ~@25 eb4 ~@62 f4 ~@49 g4 ~@5]/4", // Bb Cm C5 Cm C5 Cm Fm Cm
  X: "[bb3,d4]@2 ~@5 [d4,f4] ~@5 [bb3,d4]@3 ~@3 [bb3,d4]@3 ~@4 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@2 ~@2, bb2@11 ~@2 bb2@11 ~@2 bb2@6 ~@6 bb2@10, f4 ~@6 bb3@2 ~@4 f4 ~@5 f4 ~@28", // Bb Dm Bb
  Y: "[~@3 [c4,eb4,g4]@2 ~@4 [c4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@4 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@2 ~@4 [c4,g4]@2 ~@5 [c4,eb4,g4]@3 ~@3 [c4,eb4,g4]@2 ~@4 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@4 [c4,f4,ab4]@2 ~@4 [c4,f4,ab4]@2 ~@4 [c4,f4,ab4]@3 ~@4 [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@3 ~@3 [c4,ab4]@2 ~@45, ~@3 c3@6 eb4 ~@5 c3@7 ~@6 c3@6 eb4 ~@6 c3@6 ~@6 f3@6 ~@7 f3@6 ~@6 f3@7 ~@6 f3@12 ~@41, ~@97 f4 ~@46]/3", // Cm C5 Cm C5 Cm Fm
})).s("gm_piano").gain(0.38)

// other · glockenspiel · "Glock"
const glockenspiel = note("<~@6 A B C ~@13 A B C ~@59>".pickRestart({
  A: "~@12 g7@2 ~ g7@2 ~ f7 ~@2 f7 ~@2 e7@2 e7@2 ~@2 d7 ~ d7 ~@3 c7 ~@2 c7 ~@2 b6 ~@2 b6@2 ~",
  B: "a6 ~ a6@2 ~@2 g6 ~ g6 ~@3 f6 ~ f6@2 ~@2 e6 ~ e6@2 ~@2 d6 ~@2 d6 ~@5 d6 ~@2 d6@4 ~@2 d6@3 e6 ~@2", C: "f6@11 ~@13",
})).s("gm_glockenspiel").gain(0.19).pan(0.4)

// chords · percussive organ · "Organ"
const percussive_organ = note("<A@8 B C D E F G@2 ~ A@8 B C D E F G@2 ~@33 H@2 I J K L@2 M@8 N O@3 ~>".pickRestart({
  A: "[~ g4@94 ~ [f4,a4]@92 ~@4 f4@4 ~@92 [f4,a4]@95 [bb4,f5], [d5,f5]@383 ~, bb4@93 ~@98 [g4,bb4]@94 ~@99]/8", // F Bb5 Dm Gm
  B: "d5 [g4,bb4,d5,f5]", C: "[f4,a4]@11 ~ [e4,g4]@11 ~, c5@15 ~", D: "[d4,gb4,a4]", E: "[g4,b4,d5]@15 ~",
  F: "[a4,db5,e5]", G: "[d5@42 ~@5 d5@47 ~@2]/2", H: "[~@14 [c4,f4,ab4,eb5]@51 [c4,eb4,g4,c5]@31]/2",
  I: "~@5 [bb3,d4,f4,bb4]@7", J: "~@11 [c4,eb4,g4,c5]@13", K: "~ [c4,f4,ab4,eb5]",
  L: "[~@27 [c4,g4,c5]@50 [bb3,d4,f4,bb4]@19, ~@27 eb4@44 ~@25]/2", // C5 Bb
  M: "[~@32 [c4,eb4,g4,c5]@50 [c4,f4,ab4,eb5]@50 [c4,c5]@50 ~ [bb3,d4,f4,bb4]@50 [c4,eb4,g4,c5]@50 ~ [c4,f4,ab4,eb5]@50 [c4,g4,c5]@50, ~@66 [eb4,g4]@22 ~@79 eb4@22 ~@3]/8", // Cm Fm7 C Bb Cm Fm7 C5 Eb
  N: "[bb3,d4,f4]@11 ~, bb4", O: "[~@3 [c4,eb4,g4,c5]@50 [c4,f4,ab4,eb5]@50 ~@41]/3",
})).s("gm_percussive_organ").gain(0.2)

// other · french horn
const french_horn = note(`<
  ~@8 A B C D@2 E F ~@9 A B C D@2 E F ~@33 G H I J@2 K L M N@2 O P Q R@2 S T U ~@2
>`.pickRestart({
  A: "~ [d4,f4]@22 ~ [bb3,d4]@24", B: "[a3,c4]@23 ~@2 c4@23, ~@24 g3@23 ~", C: "d4 [a3,d4]@46 ~, gb4@23 ~",
  D: "[[d4,g4]@23 ~ [a3,e4]@24, ~@47 db4@48 ~]/2", E: "[gb3,a3,d4]@11 ~", F: "[gb3,a3,d4]",
  G: "~@14 ab2@4 ~@8 ab2@5 ~@7 ab2@6 ~@4", H: "~@4 ab2@6 ~@7 g2@5 ~@7 g2@5 ~@8 g2@5 ~",
  I: "~@6 g2@4 ~@9 f2@5 ~@8 f2@4 ~@8 f2@4",
  J: "[~@9 f2@5 ~@8 g2@5 ~@7 g2@4 ~@9 g2@4 ~@8 g2@4 ~@9 ab2@4 ~@9 ab2@5 ~@6]/2",
  K: "~ ab2@5 ~@8 ab2@6 ~@6 g2@6 ~@7 g2@5 ~@4", L: "~@4 g2@6 ~@6 g2@5 ~@8 f2@6 ~@7 f2@6",
  M: "~@6 f2@6 ~@6 f2@6 ~@7 g2@6 ~@7 g2@4",
  N: "[~@8 g2@6 ~@7 g2@6 ~@7 ab2@4 ~@8 ab2@5 ~@7 ab2@6 ~@7 ab2@6 ~@7 g2@5 ~@7]/2",
  O: "~ g2@5 ~@7 g2@5 ~@8 g2@4 ~@8 f2@5 ~@5", P: "~@3 f2@4 ~@8 f2@4 ~@9 f2@5 ~@8 g2@5 ~@2",
  Q: "~@5 g2@4 ~@9 g2@4 ~@8 g2@4 ~@9 ab2@4 ~",
  R: "[~@8 ab2@5 ~@7 ab2@5 ~@8 ab2@6 ~@7 g2@6 ~@6 g2@5 ~@8 g2@6 ~@6 g2@5 ~@8]/2",
  S: "f2@6 ~@7 f2@6 ~@6 f2@6 ~@7 f2@6 ~@4", T: "~@2 g2@6 ~@7 g2@6 ~@7 g2@6 ~@6 g2@6 ~@2",
  U: "~@5 ab2@4 ~@8 ab2@5 ~@7 ab2@6 ~@7 ab2@6",
})).s("gm_french_horn").gain(0.32).pan(0.7)

// chords · piano · "Piano 2"
const piano_2 = note("<A@2 B C A@2 B@2 D E F G H I@4 A B C A@2 B@2 D E F G H J K@3 ~@51>".pickRestart({
  A: "[d3,g4,bb4,d5,f5]!4", B: "[g3,f4,a4,d5,f5]!4", C: "[g3,f4,a4,d5,f5]!3 [f4,a4,d5,f5], ~@6 g3 ~",
  D: "[bb3,bb4,d5,f5]!2 [g3,bb4,d5,f5] [g3,g4,bb4,d5,f5], ~@4 g4 ~@3", // Bb Gm7
  E: "[f3,f4,a4,c5]@2 [f3,f4,a4,c5]@2 [e4,g4,c5]@2 ~ c3, ~@4 c3@3 ~, ~@3 [e4,g4,c5]", // F C
  F: "[d3,d4,gb4,a4] [d4,gb4,a4] ~ [d4,gb4,a4], ~@2 d3@3 d3@2 ~, ~@2 [d4,gb4,a4] ~", // D
  G: "[g3,g4,b4,d5]!3 [g4,b4,d5], ~@6 g3 ~", H: "[a3,a4,db5,e5]!3 [a3,a4], ~@6 [db5,e5] ~",
  I: "[[d5,gb5]@7 ~@7 d5@10 [d3,g4,bb4,d5,f5]@2 [d3,g4,bb4,d5,f5]@2 [d3,g4,bb4,d5,f5]@2 [d3,g4,bb4,d5,f5]@2, a4@6 ~ a4@5 [a3,d4,gb4]@3 ~@17, d3@5 ~@3 gb5@24, ~@4 d3@7 ~@5, ~@4 d5@3 ~@9]/4", // D Gm7 D
  J: "[d4,gb4]@20 ~@5 [d4,gb4,a4]@17 a4@6, [d5,gb5]@7 ~, d3@5 ~@3, a4@25 ~@23", // D
  K: "[[d4,gb4]@19 ~@5 [d4,gb4] ~@25 [e4,g4,b4]@16 ~@7 bb4@18 ~@6 [d4,gb4,a4]@46 ~, gb5, d3@7 ~@5, d5@25 [d4,gb4,a4]@11 d5@36 d5@24 ~@48, a4@24 a3@18 ~@30 g4@19 ~@53]/3", // D Em D
})).s("gm_piano").gain(0.18).pan(0.6)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x ~ x ~ x]!13 ~@3 [~ x ~ x ~ x ~ x]!13 ~@55>").gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@13 x ~@15 x ~@54>").gain(0.24)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@13 B ~@2 A@13 B ~@34 C D E F G H I J K G L M N O P Q R S T ~>".pickRestart({
  A: "x!8", B: "x", C: "~@20 x ~@12 x ~@12 x ~", D: "~@11 x ~@11 x ~@12 x ~@11", E: "~ x ~@11 x ~@12 x ~@11 x ~@9",
  F: "~@3 x ~@12 x ~@12 x ~@11 x ~@6", G: "~@5 x ~@12 x ~@11 x ~@12 x ~@4", H: "~@8 x ~@12 x ~@11 x ~@11 x ~@2",
  I: "~@10 x ~@12 x ~@11 x ~@12", J: "x ~@12 x ~@11 x ~@12 x ~@9", K: "~@3 x ~@11 x ~@12 x ~@11 x ~@7",
  L: "~@7 x ~@12 x ~@12 x ~@11 x ~@2", M: "~@10 x ~@11 x ~@12 x ~@12", N: "x ~@11 x ~@11 x ~@12 x ~@10",
  O: "~@2 x ~@11 x ~@12 x ~@12 x ~@7", P: "~@5 x ~@10 x ~@13 x ~@11 x ~@5", Q: "~@7 x ~@11 x ~@12 x ~@11 x ~@3",
  R: "~@9 x ~@12 x ~@11 x ~@12 x", S: "~@11 x ~@12 x ~@12 x ~@10", T: "~ x ~@46",
})).gain(1.62)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<[x!4]!13 x ~@2 [x!4]!13 x ~@54>").gain(1.04)

stack(bass, piano, glockenspiel, percussive_organ, french_horn, piano_2, hihat, open_hat, cabasa, jingle_bells)

More by The Beach Boys