Strudelify
Good Vibrations cover art

1967 · 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: edit a riff to change every repeat.

// chords · piano · "HONKY TONK"
const piano = note("<~@64 A B A B A B A C A C D C E F E G A B A C ~@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: "bb2@4 bb3@2 [d4,f4]@4 bb3@2 bb2@6 [eb4,g4]@5 ~", D: "bb2@2 ~ [f4,ab4]@3 bb2@3 [eb4,g4]@3, ~ bb3 ~@4",
  E: "eb3@2 eb4 [bb4,db5]@3 eb3@3 [ab4,c5]@3", F: "eb3@2 eb4 [g4,bb4]@2 eb4 eb3@3 [ab4,c5]@3",
  G: "eb3@4 eb4@2 [g4,bb4]@4 eb4@2 eb3@6 [ab4,c5]@5 ~", // Gm Ab
})).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 K L M L N O P O Q ~@8 A B C D E F G H I J I J I J I K L M L N O P O Q R S@9 T S U@4
  S@4 ~@7 V W X Y Z AA AB AC AD AE AF AG AH AF AI AJ ~ O Q O P L M L N I K AK@2 AL@2 S@2 AL@2 AM@2 AN AO AN AO AN AO ~
>`.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: "gb1@6 ab1@6 b1@6 db2@5 ~", L: "ab1@3 ab2@3 gb2@2 gb2 f2@3", M: "ab1 bb1 db2 eb2",
  N: "ab1@6 bb1@6 db2@6 eb2@5 ~", O: "bb1@3 bb2@3 ab2@2 ab2 g2@3", P: "bb1@6 c2@6 eb2@6 f2@5 ~", Q: "bb1 c2 eb2 f2",
  R: "bb1@7 ~@5 bb1@7 ~@5", S: "bb1 ~ bb1 ~", T: "bb1@7 ~@5 bb1@6 ~@6", U: "eb2 ~ eb2 ~", V: "~@8 c2 c2@3",
  W: "f2@5 ~ f2@4 ~@2 f2@4 ~@2 f2@4 ~@2", X: "f2@4 ~@2 f2@5 ~ f2@5 ~ f2@5 ~", Y: "g2@5 ~ g2@5 ~ g2@5 ~ g2@5 ~",
  Z: "c2@5 ~ c2@5 ~ c2@4 ~@2 c2@5 ~", AA: "f2@4 ~@2 f2@5 ~ f2@4 ~@2 f2@5 ~", AB: "f2@5 ~ f2@4 ~@2 f2@4 ~@2 f2@5 ~",
  AC: "g2@5 ~ g2@4 ~@2 g2@5 ~ g2@5 ~", AD: "c2@5 ~ c2@4 ~@2 c2@4 ~@2 c2@5 ~", AE: "f2@4 ~@2 f2@3 ~@3 f2@5 ~ f2@5 ~",
  AF: "f2@4 ~@2 f2@4 ~@2 f2@4 ~@2 f2@5 ~", AG: "g2@5 ~ g2@4 ~@2 g2@4 ~@2 g2@5 ~", AH: "c2@4 ~@2 c2@4 ~@2 c2@5 ~ c2@5 ~",
  AI: "f2@4 ~@2 f2@4 ~@2 f2@4 ~@2 f2@3 ~@3", AJ: "f2@4 ~@2 f2@5 ~ f2@4 ~@2 f2@4 ~@2", AK: "gb1 ~ gb1 ~",
  AL: "ab1 ~ ab1 ~", AM: "ab2@3 ab2@2 ab2 ab2@3 ab2@2 ab2", AN: "ab1@2 ab1 ab2@3 gb2@3 f2@3",
  AO: "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 B C@2 D E F G B H I J K L M N ~@16 A B C@2 D E F G B H I J K L M N ~@36 O@2 P Q O@2 P Q O@2 P Q O@2 P Q O@2 P Q R@4
  ~@27
>`.pickRestart({
  A: "[eb5,gb5,bb5] ~@5 [eb5,gb5,bb5]@2 ~@4 [eb5,gb5,bb5]@2 ~@4 [eb5,gb5,bb5]@2 ~@4", // Ebm
  B: "[eb5,gb5,bb5] ~@2 [eb5,gb5,bb5] ~@2 [eb5,gb5,bb5] ~@2 [eb5,gb5,bb5] ~@2", // Ebm
  C: "[db5,f5,ab5,bb5] ~@2 [db5,f5,ab5,bb5] ~@2 [db5,f5,ab5,bb5] ~@2 [db5,f5,ab5,bb5] ~@2", // Bbm7
  D: "[b4,eb5,gb5,ab5] ~@2 [b4,eb5,gb5,ab5] ~@2 [b4,eb5,gb5,ab5] ~@2 [b4,eb5,gb5,ab5] ~@2", // Abm7
  E: "[b4,eb5,gb5,ab5]@3 ~@3 [b4,eb5,gb5,ab5]@3 ~@3 [b4,eb5,gb5,ab5]@2 ~@4 [b4,eb5,gb5,ab5]@2 ~@4", // Abm7
  F: "[bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@3 ~@3", // Bb
  G: "[bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@2 ~@4", // Bb
  H: "[eb5,gb5,bb5]@2 ~@4 [eb5,gb5,bb5]@2 ~@4 [eb5,gb5,bb5]@3 ~@3 [eb5,gb5,bb5]@2 ~@4", // Ebm
  I: "[db5,f5,ab5,bb5]@3 ~@3 [db5,f5,ab5,bb5]@3 ~@3 [db5,f5,ab5,bb5]@2 ~@4 [db5,f5,ab5,bb5]@2 ~@4", // Bbm7
  J: "[db5,f5,ab5,bb5]@2 ~@4 [db5,f5,ab5,bb5]@2 ~@4 [db5,f5,ab5,bb5]@3 ~@3 [db5,f5,ab5,bb5]@2 ~@4", // Bbm7
  K: "[b4,eb5,gb5,ab5] ~ [b4,eb5,gb5,ab5] ~ [b4,eb5,gb5,ab5] ~ [b4,eb5,gb5,ab5] ~", // Abm7
  L: "[b4,eb5,gb5,ab5]@3 ~@3 [b4,eb5,gb5,ab5]@3 ~@3 [b4,eb5,gb5,ab5]@3 ~@3 [b4,eb5,gb5,ab5]@2 ~@4", // Abm7
  M: "[bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@2 ~@4", // Bb
  N: "[ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~", O: "[f3,a3,c4,f4]/2", P: "[g3,bb3,d4,g4]",
  Q: "[c3,bb3,e4,g4]", R: "[[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@2 B@2 C@4 D@4 E@2 F@2 ~@16 A@2 B@2 C@4 D@4 E@2 F@2 ~@62 D@4 G@2 H@2 ~>".pickRestart({
  A: "[db5 b5@7]/2", B: "[db5@6 b5@41 ~]/2", C: "[db5@6 b5@41 db5@7 b5@42]/4", D: "[eb5@6 db6@41 eb5@6 db6@42 ~]/4",
  E: "[f5 eb6@7]/2", F: "[f5@6 eb6@41 ~]/2", G: "[eb5@6 db6@41 ~]/2", H: "[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 I J C K L M N O ~@16 A B C D E F G H I J C K L M N O ~@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: "~@2 bb3 eb3@3 bb3@3 ~@2 eb3", J: "f3@3 gb3@5 ~@4", K: "eb3@3 f3@5 ~@4",
  L: "~@2 gb3 b2@3 gb3@3 ~@2 b2", M: "db3@6 eb3@7 ~@11", N: "bb3@2 ~@4 bb3@3 ~@3 bb3@3 ~@3 bb3@3 ~@3",
  O: "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