Strudelify

Caroline No

The Beach Boys

KeyD♭ majorTempo77 bpm
0:00/0:00
// Caroline No — The Beach Boys
// 77 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 49 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(77/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 · acoustic bass · "Bass"
const bass = note(`<
  ~@3 A B C B A D E F A B C B A D E F G H I J K A B C B A D E F A B C B A D E F A B C B A D E L ~
>`.pickRestart({
  A: "ab1@3 ab1 ab1@3 ab1", B: "db1@3 db1!2 ab1 eb1 db1", C: "ab1@2 ~ ab1 ab1@3 ab1", D: "ab1@3 ab1 db1@3 db1",
  E: "db1@3 db1 db1@3 db1", F: "gb1@3 gb1!2 gb1@2 gb1", G: "eb2@5 ~ eb2@2 ab2@6 ab2@2",
  H: "db2@5 ~ db2@3 ~ db2@4 db2@2", I: "c2@4 ~@2 c2@2 f2@5 ~ f2@2", J: "bb1@5 ~ bb1@8 bb1@2", K: "eb2!2",
  L: "gb1@3 gb1!2 gb1@2 ~",
})).s("gm_acoustic_bass").gain(0.55)

// chords · piano · "Piano 1"
const piano = note("<~@11 A B@2 C@2 D E F G H I J@2 A B@2 C@2 D E F A B@2 C@2 D E F A B@2 C@2 D E K ~>".pickRestart({
  A: "[ab3,c4,eb4]@7 ~, ab2", B: "[[gb3,bb3,db4]@12 db2@3 ~ [c4,eb4]@13 ~@3, db2@11 ~@4 ab3@14 ~@3, ~ ab2]/2",
  C: "[~ gb3@11 ~@4 [c4,eb4]@14 ~@2, db2 ~, [bb3,db4]@13 ~@2 [ab2,ab3]@16 ~]/2", // Cm Bbm Ab
  D: "ab2@5 ~@3 ab3@4 ab3@4, eb4, b3@11 ~@5, ab3 [db2,f3,db4], ~@3 ab2@5", E: "[gb3,bb3,db4]@7 db2, db2@13 ~@3",
  F: "gb3@12 gb3@3 ~, [gb2,bb3,db4]@15 ~", G: "eb3@3 eb3 ab3@3 eb4, [gb4,bb4] [ab4,c5], eb4 ~ eb4 ~",
  H: "db3@5 ~@9 db4@2, [db4,f4,ab4]@9 ~ [f4,ab4]@6, ~@3 db3@4 ~", // Db Fm
  I: "[c4,eb4,g4]@3 ~ [c4,eb4,g4]@2 c3@2 [c4,f4,a4]@6 [c4,f4,a4] ab4, c3 ~ f2@2", // Cm F
  J: "[~@2 [bb3,db4,f4]@2 db5@2 [bb3,db4,f4]@4 bb2@2 [bb3,db4,f4]@2 bb2 ~ eb4@15 ~, bb2@9 ~@5 db5@16 ~@2, ~@15 [gb4,bb4]@16 ~]/2", // Bbm Gb
  K: "[gb2,bb3,db4]@15 ~, gb3@3 ~", // Gb
})).s("gm_piano").gain(0.27)

// chords · harpsichord
const harpsichord = note(`<
  ~@3 A B C B D E F B A B C B D E F B G H I J K A B C B D E F B A B C B D E F B A B C B D E F L ~
>`.pickRestart({
  A: "[ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4, gb4 ~@15", // Fm7
  B: "[gb3,bb4,db5,eb5] gb4 [gb3,bb4,db5,eb5] gb4 [gb3,bb4,db5,eb5] gb4 [gb3,bb4,db5,eb5] gb4", // Ebm7
  C: "[ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4", // Fm7
  D: "[ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4 [ab3,c5,eb5,f5] ab4, ab4 ~@15", // Fm7
  E: "[ab3,b4,eb5,f5]@2 ab4@2 [ab3,b4,eb5,f5]@2 ab4 ~ [db3,db5,f5]@2 [db4,ab4]@2 [db5,f5]@2 [db4,ab4] ~, ~@3 db3", // Fm7b5 Db Db5 Db Db5
  F: "[db3,gb3,bb4,db5,eb5] [db4,gb4] [db3,gb3,bb4,db5,eb5] [db4,gb4] [db3,gb3,bb4,db5,eb5] [db4,gb4] [db3,gb3,bb4,db5,eb5] [db4,gb4]", // Ebm7 Gb5 Ebm7 Gb5 Ebm7 Gb5 Ebm7 Gb5
  G: "[eb3,gb4,bb4,db5] eb4 [eb3,gb4,bb4,db5] eb4 [ab3,ab4,c5,gb5] eb4 [ab3,ab4,c5,gb5] eb4", // Ebm7 Ab7
  H: "[db3,f4,ab4,b4] db4 [db3,f4,ab4,b4] db4 [db3,f4,ab4,b4] db4 [db3,f4,ab4,b4] db4, db4 ~@15", // Db7
  I: "[c3,eb4,g4,bb4] c4 [eb4,g4] c4 [f3,f4,a4,eb5] c4 [f3,f4,a4,eb5] c4, ~ [c3,bb4] ~@2, ~@4 gb4 ~@11", // Cm7 Eb F7 C7
  J: "[bb2,bb3,f4,bb4]@2 db4@2 [bb2,bb3,f4,bb4]@2 db4@2 [bb2,bb3,f4,bb4]@2 db4@2 [bb2,bb3,f4,bb4]@2 db4 ~", // Bb5
  K: "[eb3,gb4,bb4,db5]@2 eb4@2 [eb3,gb4,bb4,db5]@2 eb4@2 [eb3,gb4,bb4,db5]@2 eb4@2 [eb3,gb4,bb4,db5]@2 eb4 ~", // Ebm7
  L: "[gb3,bb4,db5,eb5] gb4 [gb3,bb4,db5,eb5] gb4 [gb3,bb4,db5,eb5] gb4 ~@2", // Ebm7
})).s("gm_harpsichord").gain(0.22)

// chords · epiano1 · "Elec Piano"
const epiano1 = note(`<
  ~@3 A B C D E F G@2 A B C D E F G@2 H I J K@2 A B C D E F G@2 A B C D E F G@2 A B C D E F L@2 ~
>`.pickRestart({
  A: "[ab3,c4,eb4]@13 ~@3", B: "[gb3,bb3,db4]@13 ~@3", C: "[ab3,c4,eb4]@3 ~", D: "[gb3,bb3,db4]@7 ~",
  E: "[ab3,c4,eb4]@7 ~", F: "[ab3,b3,eb4]@6 ~@2 [f3,ab3,eb4]@7 ~",
  G: "[[gb3,bb3,db4]@7 ~ [bb3,db4]@7 gb3, ~@7 gb3@7 ~@2]/2", H: "[eb3,gb3,bb3]@7 ~ [eb3,ab3,c4]@6 ~@2",
  I: "[db3,f3,ab3]@8 [db3,f3,ab3]@7 ~", J: "[c3,eb3,g3]@3 ~ [c3,f3,a3]@3 ~",
  K: "[[db3,f3,bb3]@8 [db3,f3,bb3]@7 ~@11 eb3@6, ~@15 gb3@17, ~@15 eb3@7 ~@10, ~ [bb3,db4]]/2", // Bbm
  L: "[[gb3,bb3,db4]@7 ~ [bb3,db4]@7 ~, ~@7 gb3@7 ~@2]/2", // Gb Bbm
})).s("gm_epiano1").gain(0.25)

// other · electric guitar muted · "Mute Guitar"
const electric_guitar_muted = note(`<
  ~@11 A B C D A E F G H I J K L A B C D A E F G A B C D A E F G A B C D A E F M ~
>`.pickRestart({
  A: "ab1@2 eb2@2 ab2@2 c3@2 eb3 ~@7", B: "gb1@2 ~@2 gb2@2 bb2@2 db3 ~@7, ~ db2@2 ~@5",
  C: "ab1@2 ~@2 ab2@2 c3@2 eb3 ~@7, ~ eb2@2 ~@5", D: "gb1@2 db2@2 gb2@2 bb2@2 db3 ~@7",
  E: "ab1 ~ ab2 b2 ab2 ~@3, ~ eb2@2 ~@5", F: "bb2 ~ db2@2 gb2@2 bb2@2 gb2@2 ~@2 db2@4",
  G: "bb2 db2 gb2 bb2 gb2 ~ [gb1,db2]@2", H: "bb2@2 eb3@2 gb3@2 bb3 ~ ab2@2 eb3@2 ab3@2 c4@2",
  I: "ab2 ~ db3 ~ f3 ~ ab3 ~ ab2@2 db3@2 f3@2 ab3 ~", J: "g2@2 c3@2 eb3@2 g3@2 f2@2 c3@2 f3@2 a3 ~",
  K: "bb2 db3 f3 bb3 bb2 db3 f3 bb3", L: "eb3 ~ gb3 ~ bb3 ~ eb4 ~ eb3 ~ gb3 ~ bb3 ~ eb4 ~",
  M: "bb2 db2 gb2 bb2 gb2 ~@3",
})).s("gm_electric_guitar_muted").gain(0.35)

// chords · flute
const flute = note("<~@19 A ~ B ~ C ~@8 D E D F D G@3 D E D E D H@3 ~>".pickRestart({
  A: "[gb4,bb4]@3 ~ [gb4,bb4]@2 ~@2 [ab4,c5]@2 ~@2 [ab4,c5]@2 ~@2", // Gb Ab
  B: "[eb4,g4]@3 ~ [eb4,g4]@2 ~@2 [f4,a4]@3 ~ [f4,a4]@3 ~", C: "~ eb4, ~ bb4@7, ~@3 gb4@5", D: "~@2 f3@2 c4@3 ab3",
  E: "gb3@2 eb4@4 bb3@5 ab3 gb3@4", F: "gb3@2 eb4@4 bb3@5 ab3 gb3@3 ~", G: "[gb3@4 eb4@4 db4@2 eb4@4 bb3@33 ~]/3",
  H: "[gb3@2 eb4@2 db4 eb4@2 bb3@17]/3",
})).s("gm_flute").gain(0.39)

// chords · flute · soft notes
const flute_soft = note("<~@11 A B A B C@2 D@2 ~@5 A B A B C@2 D@2 ~@17>".pickRestart({
  A: "[ab4,c5]", B: "[gb4,bb4]", C: "[c5@16 b4@7 ~ f4@8, ab4]/2", D: "[gb4,bb4]/2",
})).s("gm_flute").gain(0.2)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note(`<
  ~@9 A@3 B C B D@2 E@2 F G H B I J@2 K L K M N@2 K O@5 P@2 J@2 C B Q@2 R@2 ~
>`.pickRestart({
  A: "[~@2 c6, ~ eb6@5]/3", B: "[bb5,db6]", C: "[c6,eb6]", D: "[c6@15 ~ b5@8 ab5@8, eb6@3 ~]/2",
  E: "[db6 db6, bb5@15 ~]/2", F: "gb6@7 ~ ab6@8, eb6@15 ~", G: "[db6,ab6]@15 ~", H: "eb6 f6, c6", I: "[eb6,gb6]",
  J: "[[c6,eb6]@15 [bb5,db6]@16 ~]/2", K: "[c6,eb6]@15 ~", L: "[bb5,db6]@15 ~", M: "[b5,eb6]@8 bb5@7 ~",
  N: "[~@2 ab6 gb6, [bb5,db6]]/2", // Bbm
  O: "[[bb5,db6]@15 ~ c6@15 ~ bb5@15 ~ c6@16 b5@8 ab5@8, ~@15 eb6@16 db6@16 eb6@25 ~@8]/5", P: "[bb5,db6]/2",
  Q: "[[c6,eb6]@15 [b5,eb6]@8 ~ ab5@8]/2", R: "[[bb5,db6]@23 ~@9]/2",
})).s("gm_string_ensemble_2").gain(0.16)

// other · woodblock
const woodblock = note("<~ [~@8 gb2!5 ~@3]!2 ~@7 [~@8 gb2!5 ~@3]!37 [~@8 gb2!3 ~@5] ~>").s("gm_woodblock").gain(0.11)

// other · woodblock · soft notes
const woodblock_soft = note("<~ [~@13 gb2!2 ~]!2 ~@7 [~@13 gb2!2 ~]!37 ~@2>").s("gm_woodblock").gain(0.05)

// drums · snare
const snare = s("sd").struct("<~@32 [~@3 x!2 ~@4 x!2 ~@2 x!2 ~] ~@16>").gain(0.12)

// drums · low tom
const low_tom = s("lt").struct("<~@32 [~@7 x] ~@16>").gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 [~@2 x ~@3 x ~@3 x ~ x ~@2 x] ~@16>").gain(0.12)

// drums · tambourine
const tambourine = s("tb").struct("<[~@7 x] [x ~ x ~@4 x]!46 [x!2 ~@2] ~>").gain(0.12)

// drums · congas
const congas = s("conga:18").struct("<~ [~ x]!2 ~@7 [~ x]!38 ~>").gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@7 x] [x ~ x ~@4 x]!46 [x!2 ~@2] ~>").gain(0.63)

// drums · shaker
const shaker = s("sh").struct("<[~@7 x] [x ~ x ~@4 x]!46 [x!2 ~@2] ~>").gain(0.12)

stack(
  bass, piano, harpsichord, epiano1, electric_guitar_muted, flute, flute_soft, string_ensemble_2, woodblock,
  woodblock_soft, snare, low_tom, mid_tom, tambourine, congas, cabasa, shaker
)

More by The Beach Boys