Strudelify

Little Deuce Coupe

The Beach Boys

KeyA♭ majorTempo126 bpm
0:00/0:00
// Little Deuce Coupe — The Beach Boys
// 126 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 63 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G H I J K L M N O P E F G H I J K L M N O P Q R S T Q U V W E F G H I J K L M N O P M N O P M N O P M N
  O P X ~
>`.pickRestart({
  A: "[eb4,ab4,c5]@2 ~@2 [eb4,c5] ~ [f4,c5]@2 ~@2 [eb4,ab4,c5] ~ [ab4,c5] ~@3 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~, ~@6 ab4 ~@5 eb4@2 ~@10", // Ab Cm F5 Ab Fm Ab
  B: "[eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [ab4,c5] ~@3 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~, ~@6 eb4 ~@5", // Ab Fm Ab Fm Ab
  C: "[eb4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [ab4,c5] ~@3 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~, ab4 ~@11 eb4@2 ~@10", // Cm Ab Fm Ab Fm Ab
  D: "[eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,c5]@2 ~@2 [ab4,c5] ~, ~@18 ab4 ~@5", // Ab Fm Ab F5 Ab
  E: "[eb4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,c5]@2 ~@2 [ab4,c5] ~, ab4 ~@17 a4 ~@5", // Cm Ab Fm Ab F5 Ab
  F: "[eb4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,c5]@2 ~@2 [eb4,ab4,c5] ~, ab4 ~@17 ab4 ~@5", // Cm Ab Fm Ab F5 Ab
  G: "[eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~", // Ab Fm Ab Fm Ab
  H: "[eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4] ~, ~@12 c5 ~@11", // Ab Fm Ab Ab5 Ab Fm Ab5
  I: "[f4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,bb4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,ab4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,bb4,db5]@2 ~@2 [f4,ab4,db5] ~, ab4 ~@23", // Db Bbm Db Bbm Db
  J: "[f4,ab4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,ab4,db5]@2 ~@2 [f4,ab4] ~ [f4,bb4] ~@3 [f4,db5]@2, ~@6 bb4 ~@9 db5@2 db5@2 ~@2 ab4 ~", // Db Fm Bb5 Db
  K: "[eb4,ab4,c5]@3 ~ [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~, ~@12 ab4 ~@11", // Ab Fm Ab Cm Ab Fm Ab
  L: "[eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4] ~, ~@12 ab4 ~@11", // Ab Fm Ab Cm Ab Fm Ab5
  M: "[eb4,g4,bb4]@2 ~@2 [eb4,g4,bb4] ~ [eb4,g4,bb4]@2 ~@2 [eb4,g4,bb4] ~ [db4,bb4]@2 ~@2 [db4,f4,bb4] ~ [db4,bb4]@2 ~@2 [db4,f4,bb4] ~, ~@12 f4 ~@5 f4 ~@5", // Eb Gb Bbm Gb Bbm
  N: "[eb4,bb4]@2 ~@2 [eb4,g4,bb4] ~ [eb4,bb4]@2 ~@2 [eb4,g4,bb4] ~ [db4,f4] ~@3 [db4,f4,bb4] ~ [db4,bb4]@2 ~@2 [db4,f4] ~, g4 ~@5 g4 ~@5 bb4@2 ~@4 f4 ~@3 bb4@2", // Eb5 Eb Eb5 Eb Db Bbm Gb Db
  O: "[eb4,ab4]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4] ~, c5 ~@23", // Ab5 Ab Fm Ab Fm Ab5
  P: "[eb4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,c5]@3 ~ [eb4,ab4,c5] ~ [eb4,ab4]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4] ~, ab4 ~@5 ab4 ~@5 c5 ~@11", // Cm Ab F5 Ab Ab5 Ab Fm Ab5
  Q: "[f4,ab4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,ab4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,db5]@2 ~@2 [f4,ab4,db5] ~, ~@6 bb4 ~@11 bb4 ~@5", // Db
  R: "[f4,db5]@2 ~@2 [f4,ab4,db5] ~ [bb4,db5] ~@3 [f4,ab4,db5] ~ [f4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,bb4,db5] ~@3 [f4,db5]@2, ab4 ~@5 f4@2 ~@4 ab4 ~@9 ab4 ~", // Db Bbm Db Bbm Db
  S: "[eb4,ab4,c5]@3 ~ [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~", // Ab Fm Ab Fm Ab
  T: "[ab4,c5] ~@3 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5] ~ [f4,ab4,c5]@2 ~@2 [eb4,c5] ~, eb4 ~@10 ab4", // Ab Fm Ab Fm Cm
  U: "[f4,ab4,db5]@2 ~@2 [f4,ab4,db5] ~ [bb4,db5] ~@3 [f4,ab4,db5] ~ [f4,db5]@2 ~@2 [f4,ab4,db5] ~ [f4,bb4,db5] ~@3 [f4,db5]@2, ~@6 f4@2 ~@4 ab4 ~@9 ab4 ~", // Db Bbm Db Bbm Db
  V: "bb3@2 bb4 ~ bb3@2 bb4@2 bb3@2 bb4@2 bb3@2 bb4@2 bb3@2 bb4@2 bb3@2 bb4 ~", W: "[g4,bb4] ~@23, eb4 ~@7",
  X: "[eb4,ab4,c5]", // Ab
})).s("gm_piano").gain(0.38).pan(0.4)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A B C B A D E F G H I J K L B A@2 D E F G H I J K L B A M H N@2 O P Q R A D E F G H I J K S B A K S B A K S B A K S
  B A T ~
>`.pickRestart({
  A: "ab1@3 ~ ab1@2 c2@2 ~@2 c2@2 eb2@2 ~@2 eb2@2 f2@4 ab2@2",
  B: "ab1@2 ~@2 ab1@2 c2@2 ~@2 c2@2 eb2@2 ~@2 eb2@2 f2@3 ~ ab2@2",
  C: "ab1@2 ~@2 ab1@2 c2@2 ~@2 c2@2 eb2@3 ~ eb2@2 f2@4 ab2@2", D: "ab1 ~ ab1 c2 ~ c2 eb2 ~ eb2 f2@2 ab2",
  E: "ab1@2 ~@2 ab1@2 c2@2 ~@2 c2@2 eb2@3 ~ eb2@2 f2@3 ~ ab2@2",
  F: "ab1@2 ~@2 ab1@2 c2@2 ~@2 c2@2 eb2@2 ~@2 eb2@2 f2@3 ~ ab2 ~",
  G: "db2@2 ~@2 db2@2 f2@3 ~ f2 ~ ab2@3 ~ ab2@2 bb2@3 ~ db3@2",
  H: "db2@3 ~ db2@2 f2@2 ~@2 f2@2 ab2@2 ~@2 ab2@2 bb2@3 ~ db3@2",
  I: "ab1@3 ~ ab1@2 c2@2 ~@2 c2@2 eb2@2 ~@2 eb2@2 f2@3 ~ ab2@2",
  J: "ab1@3 ~ ab1@2 c2@2 ~@2 c2@2 eb2 ~@3 eb2@2 f2@3 ~ ab2@2",
  K: "eb2@2 ~@2 eb2@2 g2@4 bb2@2 bb1 ~@3 bb1@2 db2@3 ~ f2@2", L: "eb2 ~@3 eb2@2 g2@4 bb2@2 bb1 ~@3 bb1@2 db2@4 f2@2",
  M: "db2@3 ~ db2@2 f2@2 ~@2 f2@2 ab2@3 ~ ab2@2 bb2@4 db3@2", N: "ab1@3 ~ ab1@2 c2@2 ~@2 c2@2 eb2@3 ~ eb2@2 f2@4 ab2@2",
  O: "db2@3 ~ db2@2 f2@3 ~ f2@2 ab2@2 ~@2 ab2@2 bb2@3 ~ db3@2",
  P: "db2@3 ~ db2@2 f2@3 ~ f2@2 ab2@3 ~ ab2@2 bb2@3 ~ db3@2", Q: "bb1@8 ~ bb1 c2 d2", R: "eb2 ~@5",
  S: "eb2@2 ~@2 eb2@2 g2@4 bb2@2 bb1 ~@3 bb1@2 db2@4 f2@2", T: "ab1",
})).s("gm_fretless_bass").gain(0.49)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F D G H I J K L M N O E F D G H I J K L M N O P Q R S T U V W E F D G H I J K L M N O L M N O L M N O L M
  N O X ~
>`.pickRestart({
  A: "eb3@2 ~@2 eb3@2 f3@3 ~ eb3@2 [ab2,eb3]@4 [ab2,eb3]@2 [ab2,f3]@4 [ab2,eb3]@2, ab2!2 ~@2", // Ab5 Db Ab5
  B: "[ab2,eb3]@4 [ab2,eb3]@2 [ab2,f3]@4 [ab2,eb3]@2 eb3@3 ~ eb3@2 [ab2,f3]@4 [ab2,eb3]@2, ~@2 ab2 ~", // Ab5 Db Ab5 Db Ab5
  C: "[ab2,eb3]@2 [ab2,eb3] [ab2,f3]@2 [ab2,eb3] [ab2,eb3]@2 [ab2,eb3] [ab2,f3]@2 [ab2,eb3]", // Ab5 Db Ab5 Db Ab5
  D: "[ab2,eb3]@4 [ab2,eb3]@2 [ab2,f3]@4 eb3@2 eb3@3 ~ [ab2,eb3]@2 [ab2,f3]@4 [ab2,eb3]@2, ~@5 ab2@3 ~@4", // Ab5 Db Ab5 Db Ab5
  E: "[ab2,eb3]@2 [ab2,eb3] [ab2,f3]@2 [ab2,eb3] [ab2,eb3]@2 [ab2,eb3] ab2@2 [ab2,eb3], ~@9 f3 ~@2", // Ab5 Db Ab5
  F: "[ab2,eb3]@2 [ab2,eb3] ab2@2 [ab2,eb3] [ab2,eb3]@2 [ab2,eb3] [ab2,f3]@2 [ab2,eb3], ~@3 f3 ~@8", // Ab5 Db Ab5
  G: "[ab2,eb3]@2 [ab2,eb3] [ab2,f3]@2 [ab2,eb3] ab2@2 [ab2,eb3] ab2@2 [ab2,eb3], ~@9 f3 ~@2", // Ab5 Db Ab5
  H: "[db3,ab3]@2 [db3,ab3] [db3,bb3]@2 [db3,ab3] [db3,ab3]@2 ab3 [db3,bb3]@2 [db3,ab3]", // Db5 Gb Db5 Gb Db5
  I: "[db3,ab3]@4 ab3@2 [db3,bb3]@4 [db3,ab3]@2 [db3,ab3]@4 ab3@2 [db3,bb3]@4 [db3,ab3] ~", // Db5 Gb Db5 Gb Db5
  J: "eb3@3 ~ eb3@2 [ab2,f3]@4 [ab2,eb3]@2 [ab2,eb3]@4 [ab2,eb3]@2 f3@2 ~@2 eb3@2, ab2 ~@2 ab2", // Db Ab5
  K: "[ab2,eb3]@2 [ab2,eb3] [ab2,f3]@2 [ab2,eb3] [ab2,eb3]@2 [ab2,eb3] ab2@2 eb3, ~@6 f3 ~", // Ab5 Db Ab5
  L: "[eb3,bb3]@4 bb3@2 [eb3,c4]@4 [eb3,bb3]@2 [bb2,f3]@4 [bb2,f3]@2 bb2@4 f3 ~, ~@9 f3 ~@2", // Eb5 Cm Eb5 Bb5
  M: "[eb3,bb3]@4 [eb3,bb3]@2 c4@3 ~ bb3 ~ [bb2,f3]@4 [bb2,f3]@2 bb2@4 f3@2, ~@2 eb3@2 ~@2 f3 ~", // Eb5 Bb5
  N: "ab2@4 eb3@2 f3@3 ~ eb3@2 eb3@3 ~ eb3@2 [ab2,f3]@4 [ab2,eb3]@2, eb3 ~ ab2@2 ab2@2 ~@2", // Db Ab5
  O: "[ab2,eb3]@4 [ab2,eb3]@2 f3@3 ~ eb3@2 [ab2,eb3]@4 [ab2,eb3]@2 [ab2,f3]@3 ~ [ab2,eb3]@2, ~ ab2 ~@2", // Ab5 Db Ab5
  P: "[db3,ab3]@4 ab3@2 [db3,bb3]@4 ab3@2 ab3@3 ~ ab3@2 [db3,bb3]@4 [db3,ab3]@2, ~@2 db3 ~", // Db5 Gb Db5
  Q: "ab3@3 ~ ab3@2 [db3,bb3]@4 ab3@2 [db3,ab3]@4 ab3@2 bb3@3 ~ ab3@2, db3 ~@2 db3", // Gb Db5
  R: "[ab2,eb3]@4 [ab2,eb3]@2 f3@3 ~ eb3@2 eb3@3 ~ eb3@2 f3@3 ~ eb3@2, ~ ab2!3", // Ab5
  S: "[ab2,eb3]@4 [ab2,eb3]@2 [ab2,f3]@4 [ab2,eb3]@2 eb3@3 ~ eb3@2 ab2@4 [ab2,eb3]@2, ~@6 ab2@3 f3 ~@2", // Ab5 Db Ab5
  T: "[db3,ab3]@2 [db3,ab3] db3@2 [db3,ab3] [db3,ab3]@2 ab3 [db3,bb3]@2 ab3, ~@3 bb3 ~@8", // Db5 Gb
  U: "[db3,ab3]@4 ab3@2 [db3,bb3]@4 [db3,ab3]@2 db3@4 ab3@2 db3@4 ab3 ~, ~@12 ab3@3 ~@3 bb3@2 ~@4", // Db5 Gb Db5
  V: "[bb2,f3,d4]@11 ~", W: "[eb3,bb3]@5 ~@19", X: "[ab2,eb3]",
})).s("gm_acoustic_guitar_steel").gain(0.38).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!34 x!2 [x!2]!24 x ~>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<A B@23 C B C B D E D E D E D ~ A B@7 C B@3 D B@3 D B@3 D B@3 D ~@2>".pickRestart({
  A: "~@15 x!4 ~@3 x ~", B: "~ x ~ x", C: "~@3 x ~@4 x!2 ~ x", D: "~@3 x ~ x ~@2 x!2 ~ x", E: "~@3 x ~@5 x ~ x",
})).gain(0.44)

// drums · hihat
const hihat = s("hh").struct("<~ [x ~ x!2 ~ x!2 ~ x!2 ~ x]!34 x!2 [x ~ x!2 ~ x!2 ~ x!2 ~ x]!24 ~@2>").gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@35 [~@11 x] ~@27>").gain(0.33)

// drums · splash
const splash = s("cr").struct("<~@61 x ~>").gain(0.38)

stack(piano, bass, acoustic_guitar_steel, kick, snare, hihat, open_hat, splash)

More by The Beach Boys