Strudelify
Good Vibrations cover art

1966 · Smiley Smile

Good Vibrations

The Beach Boys

KeyB♭ minorTempo148 bpm
0:00/0:00
// Good Vibrations — The Beach Boys
// 148 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 135 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(148/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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "HONKY TONK"
const piano = note("<~@64 A B A B A B A B A B A B C D C D A B A B ~@51>".pickRestart({
  A: "bb2@2 bb3 [f4,ab4]@3 bb2@3 [eb4,g4]@3", B: "bb2@2 bb3 [d4,f4]@2 bb3 bb2@3 [eb4,g4]@3",
  C: "eb3@2 eb4 [bb4,db5]@3 eb3@3 [ab4,c5]@3", D: "eb3@2 eb4 [g4,bb4]@2 eb4 eb3@3 [ab4,c5]@3",
})).s("gm_piano").gain(0.33)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@8 A B C D E F G H I J I J I J I J K L K L M N M N ~@8 A B C D E F G H I J I J I J I J K L K L M N M N O@12 P@4 O@4
  ~@7 Q R S T U R@2 T U R@2 T U R V R ~ M N M N K L K L I J W@2 X@2 O@2 X@2 Y@2 Z AA Z AA Z AA ~
>`.pickRestart({
  A: "eb2@7 ~@11 bb1@6", B: "eb2 ~@3", C: "db2 ~@2 ab2", D: "db2 ~@3", E: "b1 ~@2 gb2", F: "b1 ~@3",
  G: "bb1@5 ~ d2@5 ~ f2@5 ~ b2@5 ~", H: "bb2@4 ~@2 ab2@4 ~@2 gb2@5 ~ f2@5 ~", I: "gb1@3 gb2@3 e2@2 e2 eb2@3",
  J: "gb1 ab1 b1 db2", K: "ab1@3 ab2@3 gb2@2 gb2 f2@3", L: "ab1 bb1 db2 eb2", M: "bb1@3 bb2@3 ab2@2 ab2 g2@3",
  N: "bb1@6 c2@6 eb2@6 f2@5 ~", O: "bb1 ~ bb1 ~", P: "eb2 ~ eb2 ~", Q: "~@8 c2 c2@3",
  R: "f2@4 ~@2 f2@4 ~@2 f2@4 ~@2 f2@5 ~", S: "f2@4 ~@2 f2@5 ~ f2@5 ~ f2@5 ~", T: "g2@5 ~ g2@5 ~ g2@5 ~ g2@5 ~",
  U: "c2@5 ~ c2@5 ~ c2@4 ~@2 c2@5 ~", V: "f2@5 ~ f2@4 ~@2 f2@4 ~@2 f2@4 ~@2", W: "gb1 ~ gb1 ~", X: "ab1 ~ ab1 ~",
  Y: "ab2@3 ab2@2 ab2 ab2@3 ab2@2 ab2", Z: "ab1@2 ab1 ab2@3 gb2@3 f2@3", AA: "ab1@2 ab1 bb1@3 db2@3 eb2@3",
})).s("gm_acoustic_bass").gain(0.38)

// chords · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  A@2 B@2 C@2 D E A@2 B@2 F@2 D G ~@16 A@2 B@2 C@2 D E A@2 B@2 F@2 D G ~@36 H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J K@4
  ~@27
>`.pickRestart({
  A: "[eb5,gb5,bb5] ~@2 [eb5,gb5,bb5] ~@2 [eb5,gb5,bb5] ~@2 [eb5,gb5,bb5] ~@2", // Ebm
  B: "[db5,f5,ab5,bb5] ~@2 [db5,f5,ab5,bb5] ~@2 [db5,f5,ab5,bb5] ~@2 [db5,f5,ab5,bb5] ~@2", // Bbm7
  C: "[b4,eb5,gb5,ab5] ~@2 [b4,eb5,gb5,ab5] ~@2 [b4,eb5,gb5,ab5] ~@2 [b4,eb5,gb5,ab5] ~@2", // Abm7
  D: "[bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@3 ~@3", // Bb
  E: "[bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@2 ~@4", // Bb
  F: "[b4,eb5,gb5,ab5] ~ [b4,eb5,gb5,ab5] ~ [b4,eb5,gb5,ab5] ~ [b4,eb5,gb5,ab5] ~", // Abm7
  G: "[ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~", H: "[f3,a3,c4,f4]/2", I: "[g3,bb3,d4,g4]",
  J: "[c3,bb3,e4,g4]", K: "[[f3,a3,c4,f4]@25 ~@7]/4",
})).s("gm_drawbar_organ").gain(0.18).pan(0.6)

// chords · flute
const flute = note("<~@8 A@2 B@2 C@2 D@2 ~@24 A@2 B@2 C@2 D@2 ~@48 E@2 F G@3 F H I@4 ~@27>".pickRestart({
  A: "[bb4@4 ab4 gb4 f4 eb4, [gb5,bb5]]/2", B: "[ab4@11 ~ gb4@3 f4@3 eb4@3 db4@3, [f5,ab5]]/2",
  C: "[gb4@19 ~@5 f4@6 eb4@6 db4@6 b3@6, [eb5,gb5]]/2", // Ebm
  D: "[d5@24 f4@6 eb4@6 db4@5 b3@5 ~@2, f5@47 ~, f4@21 ~@3 db5@23 ~]/2", E: "f6/2", F: "g6",
  G: "[a6@4 g6 a6@5 ~ a6@5 ~ d6@6 f6@49, ~@5 g6 ~@2 g6 ~@27]/3", H: "a6@4 g6 ~ a6@4 g6 ~ a6@4 g6@2 d6@6",
  I: "[f6@37 ~@11]/4",
})).s("gm_flute").gain(0.14)

// other · whistle
const whistle = note("<~@16 A@4 B@4 C@4 D@4 ~@16 A@4 B@4 C@4 D@4 ~@62 C@4 E@4 ~>".pickRestart({
  A: "[db5 b5@7]/2", B: "[db5@6 b5@41 db5@7 b5@42]/4", C: "[eb5@6 db6@41 eb5@6 db6@42 ~]/4", D: "[f5 eb6@7]/2",
  E: "[eb5 db6@7]/2",
})).s("gm_whistle").gain(0.24).pan(0.7)

// other · cello
const cello = note("<~@16 A@8 B@4 C@4 ~@16 A@8 B@4 C@4 ~@44 C@4 B@4 A@2 D ~@7 B@8 ~>".pickRestart({
  A: "gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~",
  B: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~",
  C: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~", D: "gb2 ~@23",
})).s("gm_cello").gain(0.44)

// bass · electric bass pick · "PICK BASS"
const bass_2 = note("<A B C D E F G H A B C D E I J K ~@16 A B C D E F G H A B C D E I J K ~@87>".pickRestart({
  A: "~@4 bb3@2 eb3@6 bb3@7 ~@3 eb3@2", B: "f3@5 ~ gb3@9 ~@9", C: "~@4 ab3@2 db3@6 ab3@7 ~@3 db3@2",
  D: "eb3@3 f3@4 ~@5", E: "~@4 gb3@2 b2@6 gb3@7 ~@3 b2@2", F: "db3@3 eb3@5 ~@4", G: "~@4 f3@2 bb2@6 f3@7 ~@3 bb2@2",
  H: "c3@3 d3@4 ~@5", I: "db3@6 eb3@7 ~@11", J: "bb3@2 ~@4 bb3@3 ~@3 bb3@3 ~@3 bb3@3 ~@3",
  K: "db4@3 ~@3 db4@3 ~@3 db4@3 ~@3 db4@2 ~@4",
})).s("gm_electric_bass_pick").gain(0.27).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 A B A B A B A C B ~@23 A B A B A B A C B ~@86>".pickRestart({
  A: "~@3 x", B: "x", C: "x!4",
})).gain(0.33)

// drums · snare
const snare = s("sd").struct("<~@8 A B A B A B C D ~@24 A B A B A B C D ~@87>".pickRestart({
  A: "~@2 x!2 ~@2 x ~@5", B: "~@3 x", C: "~@2 x!2 ~@2 x ~@2 x ~@2", D: "x ~@2 x ~@2 x!6",
})).gain(0.33)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~ A ~ A ~ B ~@25 A ~ A ~ A ~ B ~@87>".pickRestart({
  A: "~@3 x", B: "x!2 ~@2",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A@16 ~@16 A@16 ~@44 A@10 B ~@7 A@8 ~>".pickRestart({
  A: "~@2 x!2 ~@8", B: "x",
})).gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@8 A ~ A ~ A ~@2 B@17 ~@8 A ~ A ~ A ~ A C B@16 ~@3 D E D E D E D E D F@8 B@23 E B@10 E D E D E D E G B@8 ~
>`.pickRestart({
  A: "~@8 x!2 ~@2", B: "x!4", C: "~ x!3", D: "~@18 x ~@2 x!3", E: "x", F: "x ~ x!2 ~ x!2 ~ x!2 ~ x", G: "~@16 x ~ x!6",
})).gain(0.22)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@67 A ~ A ~ A ~ A ~ A ~@8 B@23 ~@12 A ~ A ~ A ~@11>".pickRestart({
  A: "~@19 x!2 ~@3", B: "~ x ~ x ~ x ~ x",
})).gain(0.05)

// drums · shaker
const shaker = s("sh").struct("<~@84 [x!8]!23 x ~@27>").gain(0.16)

stack(
  piano, bass, drawbar_organ, flute, whistle, cello, bass_2, kick, snare, low_tom, mid_tom, tambourine, tambourine_soft,
  shaker
)

More by The Beach Boys