Strudelify
KeyC majorTempo112 bpm
0:00/0:00
// Kokomo — The Beach Boys
// 112 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 · flute
const flute = note(`<
  ~ A B C D E B C F@2 G H I J K L ~ M@2 N O P@2 Q R@2 S T@2 U@2 V W X Y Z AA@2 AB AC@2 AD I AE@2 L ~ M@2 AF O AG@2 AH
  AI@2 S T@2 U@2 V W X Y Z AA@2 AB ~@8 AJ@2 AK AL J AM AN AO AP S T@2 AQ@2 V AR X Y Z AS AP S T@2 AQ@2 V AR X Y Z AT ~
>`.pickRestart({
  A: "~@7 b3", B: "c4!2 ~ b3 c4!2 ~ c4", C: "d4 c4!2 b3 c4!2 ~ e4", D: "f4!2 ~ e4 f4!2 ~ f4", E: "g4 f4!2 e4 f4!2 ~ b3",
  F: "[f4!2 g4!3 a4 b4 g4@8 f4]/2", G: "d#4 ~", H: "~@2 f4!2 g4@2 a4@2", I: "g4 f4@2 c4@5", J: "~@2 f4@2 g4@3 f4",
  K: "f4 e4@2 e4@2 e4 f4 g4", L: "a4 d4!2 d4@3 ~@2", M: "[~@2 g4!2 a4 b4@2 g4@7 ~@2]/2", N: "~ d4 e4 f4 g4@2 g4 a4",
  O: "g4 f4@2 c4@3 ~@2", P: "[~@2 f4!3 g4 f4 e4@3 e4!4 f4 g4]/2", Q: "a4 d4@2 d4@5",
  R: "[~@2 f4 e4 f4 e4 c4 [f#4,b4,d#5] [g4,c5,e5]!2 ~ [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] ~ [g4,c5,e5], ~@7 c4@5 ~@4]/2", // B C B C
  S: "[a4,d5,f5] [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] [a4,d5,f5] [g4,c5,e5] [a4,d5,f5] [b4,e5,g5]", // Dm C B C Dm C Dm Em
  T: "[[b4,e5,g#5] [c5,f5,a5] ~ [c5,f5,a5] [b4,e5,g5] [c5,f5,a5] ~ [d5,g5,a#5]@2 [c5,f5,a5]!2 [b4,e5,g#5] [c5,f5,a5] [d5,g5,a#5] ~ [f#4,b4,d#5]]/2", // E F Em F Gm F E F …
  U: "[[g4,c5,e5]!2 ~ [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] ~ e5 [a4,d5,f5] [g4,c5,e5,g5] [f#4,b4,d#5,f#5] [g4,c5,e5,g5] [b4,d5,f5] [c5,e5,g5] f5 g5, ~@6 g5@3 ~@7]/2", // C B C Dm C B C Bdim …
  V: "f5 e5 c5 c5@3 ~ f5", W: "f5 e5@2 d5@2 c5 d5 ~", X: "d5 e5@2 e5@3 ~@2", Y: "a5@3 g5@3 d5 e5",
  Z: "d5 c5!3 g4 a4 ~@2", AA: "[~ f5!2 e5 c5 g4 ~@5 b3 c4@3 b3, ~@7 c5@5 ~@4]/2", AB: "c4 b3 c4 b3 c4@2 ~@2",
  AC: "[~@2 g4!2 a4 b4@2 g4@5 ~@4]/2", AD: "~ f4!3 g4@2 a4@2", AE: "[~@2 f4!3 g4 f4 e4@3 ~ e4@2 e4 f4 g4]/2",
  AF: "~@2 g4@2 a4@3 g4", AG: "[~@2 f4@2 f4@2 f4@2 f4@2 g4@2 f4@2 e4@4 e4@2 e4@2 e4@2 e4@2 ~ f4@2 ~ g4@2]/2",
  AH: "a4 d4 d4@2",
  AI: "[~ f4!2 e4 f4 e4 c4 [f4,b4,d#5] [g4,c5,e5]!2 ~ [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] ~ [g4,c5,e5], ~@7 c4@5 ~@4]/2", // Fm7b5 C B C
  AJ: "[~@2 g4!2 a4 b4@2 g4@5 g4 f4 e4@2]/2", AK: "~ e4!2 f4 g4@2 a4@2", AL: "g4 ~@2 c4@5", AM: "f4 e4@2 e4@2 ~ f4 g4",
  AN: "a4 ~ d4 d4@3 ~@2", AO: "~ f4!2 e4 f4 e4 c4 [c4,f#4,b4,d#5]",
  AP: "[g4,c5,e5]!2 ~ [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] ~ [g4,c5,e5]", // C B C
  AQ: "[[g4,c5,e5]!2 ~ [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] ~ [g4,c5,e5] [a4,d5,f5] [g4,c5,e5,g5] [f#4,b4,d#5,f#5] [g4,c5,e5,g5] [a4,d5,f5] [c5,e5,g5] f5 g5, ~@6 g5@3 ~@7]/2", // C B C Dm C B C Dm …
  AR: "f5 e5@2 d5@2 c5 d5 c5", AS: "~ f5!2 e5 c5 g4 a4 [f#4,b4,d5,d#5]", AT: "~ f5!2 e5 c5 g4 a4 d5",
})).s("gm_flute").gain(0.32)

// chords · accordion · "Accordian"
const accordion = note(`<
  ~@16 A B C D E F G H I J K L M N K O P Q R S T U ~@8 A B C D E F G H I J K L M N K O P Q R S T U ~@42
>`.pickRestart({
  A: "~ [c#4,f4] [e4,g4] [f4,a4] [g4,a#4] [a4,c5] [b4,d5] [c5,e5]", B: "[g4,c5,e5]", C: "[g4,b4,e5]",
  D: "[g4,a#4,d5,f5]", E: "[f4,a4,c5,f5]", F: "[f4,g#4,c5]", G: "[e4,g4,c5,e5]", H: "[f#4,a4,d5]@3 [f#4,a4,c5]",
  I: "[g4,b4,d5]", J: "[g4,c5,e5]!2 ~ [g4,c5,e5] [b4,d#5] [g4,c5,e5] ~ [g4,c5,e5]",
  K: "[a4,d5,f5] [g4,c5,e5] ~ [g4,c5,e5] [a4,d5,f5] [g4,c5,e5] ~ [g4,c5,e5]", // Dm C Dm C
  L: "[g#4,b4,e5] [a4,c5,f5] ~ [a4,c5,f5] [g4,b4] [a4,c5,f5] ~ [a4,c5,f5]", // E F G F
  M: "[a4,c5,f5]!2 ~ [g#4,b4] [a4,c5,f5]!2 ~ [f#4,b4,d#5]", // F G#m F B
  N: "[g4,c5,e5]!2 ~ [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] ~ [g4,c5,e5]", O: "[a4,c5,f5]!2 ~ [a4,c5,f5]!3 ~ [a4,c5,f5]",
  P: "[g#4,c5,f5]!2 ~ [g#4,c5,f5]!3 ~ [g#4,c5,f5]", Q: "[g4,c5,e5]!2 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]",
  R: "[a4,c5,e5]!2 ~ [a4,c5,e5]!3 ~ [a4,c5,e5]", S: "[f4,a4,d5]!2 ~ [f4,a4,d5]!3 ~ [f4,a4,d5]",
  T: "[f4,b4,d5]!2 ~ [f4,b4,d5]!3 ~ [f4,b4,d5]", U: "[e4,g4,c5] ~",
})).s("gm_accordion").gain(0.32)

// chords · accordion · "Accordian" · soft notes
const accordion_soft = note(`<
  ~@69 A B C@2 D E F G H I J K L H M N O P Q R S P T U V W X Y O P Q R S P T U V W X Y ~
>`.pickRestart({
  A: "~@8 [e4,g4,c5]@3 [e4,g4,b4]@2 [e4,g4,c5]@3", B: "[e4,g4,b4]@3 [b3,e4,g4]",
  C: "[[d4,f4,a#4]@4 [d4,f4,a#4] [d4,f4,c5]@2 [c4,f4,a4]@9]/2", D: "[c4,d#4,g#4]",
  E: "[c4,e4,g4]@8 [e4,g4,c5]@3 [e4,g4,b4]@2 [e4,g4,c5]@3", F: "[f#4,a4,d5] [c4,f4,a4]@7", G: "[d4,g4,b4]",
  H: "[e4,g4,c5]", I: "[e4,b4,d5]@7 [e4,g4,b4]", J: "[f4,a#4,d5]", K: "[f4,a4,c5]@5 [a4,c5]@2 [f4,a4,c5]",
  L: "[f4,c5,d5]", M: "[f#4,a4,d5]", N: "[f4,b4,d5]",
  O: "[g4,c5,e5]!2 ~ [g4,c5,e5] [f#4,b4,d#5] [g4,c5,e5] ~ [g4,c5,e5]", // C B C
  P: "[a4,d5,f5] [g4,c5,e5] ~ [g4,c5,e5] [a4,d5,f5] [g4,c5,e5] ~ [g4,c5,e5]", // Dm C Dm C
  Q: "[g#4,b4,e5] [a4,c5,f5] ~ [a4,c5,f5] [g4,b4,e5] [a4,c5,f5] ~ [a4,c5,f5]", // E F Em F
  R: "[a4,c5,f5]!2 ~ [g#4,b4,e5] [a4,c5,f5]!2 ~ [f#4,b4,d#5]", S: "[g4,c5,e5]!3 [f#4,b4,d#5] [g4,c5,e5] ~ [g4,c5,e5] ~",
  T: "[a4,c5,f5]!2 ~ [a4,c5,f5]!3 ~ [a4,c5,f5]", U: "[g#4,c5,f5]!2 ~ [g#4,c5,f5]!3 ~ [g#4,c5,f5]",
  V: "[g4,c5,e5]!2 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]", W: "[a4,c5,e5]!2 ~ [a4,c5,e5]!3 ~ [a4,c5,e5]",
  X: "[f4,a4,d5]!2 ~ [f4,a4,d5]!2 [f4,d5] ~ [f4,a4,d5]", Y: "[f4,b4,d5]!2 ~ [f4,b4,d5]!3 ~ [f4,b4,d5]",
})).s("gm_accordion").gain(0.2)

// chords · steel drums · "StlDrum,Sax"
const steel_drums = note(`<
  ~@10 A@2 B@2 C D E F G H I J F K L M ~@20 N F G H I J F K L M ~@21 O P Q R J S T U V ~@11 M ~@12
>`.pickRestart({
  A: "[~@4 [g3,g4] [a3,a4]@2 [a3,a4]@3 ~@6]/2", B: "[~@5 g3 a3 g4@2 f4@3 ~@4]/2", C: "~@2 e4@4 g4@2 c5@2 ~ b4@2 ~ a4@2",
  D: "a4@2 d4 d4@5", E: "~ [c#4,f4] [e4,g4] [f4,a4] [g4,a#4] [a4,c5] [b4,d5] [c5,e5]", F: "[g4,c5,e5]!16",
  G: "[g4,b4,e5]!14 [g4,b4,e5]@2", H: "[a#4,d5,f5]!16", I: "[a4,c5,f5]!16", J: "[g#4,c5,f5]!16",
  K: "f#4 [f#4,a4,d5]!15", L: "[g4,b4,d5]!16", M: "[g4,c5,e5] ~@7",
  N: "~ c#4 [e4,g4] [f4,a4] [g4,a#4] [a4,c5] [b4,d5] [c5,e5]", O: "~ [g4,c5,e5]!15",
  P: "[g4,c5,e5] [g4,b4,e5]!13 [g4,b4,e5]@2", Q: "a#4 [a#4,d5,f5]!15", R: "[a4,d5,f5] [a4,c5,f5]!15",
  S: "[g4,c5,f5] [g4,c5,e5]!15", T: "[f#4,c5,e5] [f#4,a4,d5]!15", U: "[g4,a4,d5] [g4,b4,d5]!15", V: "[b4,d5] ~@15",
})).s("gm_steel_drums").gain(0.2)

// other · acoustic guitar nylon · "StlDrum,Sax"
const acoustic_guitar_nylon = note("<~@40 A@2 B@2 C D ~@64>".pickRestart({
  A: "[~@4 g4 [a3,a4]@2 [a3,a4]@3 ~@6]/2", B: "[~@5 g3 a3 g4@2 f4@3 ~@4]/2", C: "~@2 e4@4 g4@2 c5@2 ~ b4@2 ~ a4@2",
  D: "a4@2 d4 d4@5",
})).s("gm_acoustic_guitar_nylon").gain(0.32)

// other · tenor sax · "StlDrum,Sax"
const tenor_sax = note("<~@68 A B@3 C D E F G ~@33>".pickRestart({
  A: "~@13 [a4,b4] [c5,d5] [e5,f5]", B: "[g5@18 f5 e5@2 f5 e5@2 d5@2 c5 d5@3 d5@4 e5 d5 c5@2 d5@8 e5@2]/3",
  C: "d5@2 c5@2 a4@2 c5@8 a4 [b4,c5]", D: "d#5 d5 d#5 d5!2 c5 g#4 c5, d5 ~@15", E: "g4@6 g4 e5",
  F: "g5 g5@3 f#5 f#5@2 f5", G: "e5 d5 c5 b4 a4 g4@3",
})).s("gm_tenor_sax").gain(0.2)

// chords · electric guitar muted · "AcouGuitar"
const electric_guitar_muted = note(`<
  ~@9 A B C D E F G H A B C D E F G H F@2 D@2 F@2 D E F I J K L M A B C D E F G H A B C D E F G H F@2 D@2 F@2 D E F I J
  K L M A B C D E F G H N B C D E F G H F@2 D@2 F@2 D E F I D K F@2 D@2 F@2 D E F I D O ~
>`.pickRestart({
  A: "[g4,c5,e5]@2 [g4,c5,e5]!3 [g4,c5,e5]@2 [g4,c5,e5]", B: "[g4,b4,e5]@2 [g4,b4,e5]!3 [g4,b4,e5]@2 [g4,b4,e5]",
  C: "[g4,a#4,d5,f5]@2 [g4,a#4,d5,f5]!3 [g4,a#4,d5,f5]@2 [g4,a#4,d5,f5]", // Gm7
  D: "[f4,a4,c5,f5]@2 [f4,a4,c5,f5]!3 [f4,a4,c5,f5]@2 [f4,a4,c5,f5]", // F
  E: "[f4,g#4,c5,f5]@2 [f4,g#4,c5,f5]!3 [f4,g#4,c5,f5]@2 [f4,g#4,c5,f5]", // Fm
  F: "[e4,g4,c5,e5]@2 [e4,g4,c5,e5]!3 [e4,g4,c5,e5]@2 [e4,g4,c5,e5]", // C
  G: "[f#4,a4,d5]@2 [f#4,a4,d5]!3 [f#4,a4,d5]@2 [f#4,a4,d5]", H: "[g4,b4,d5]@2 [g4,b4,d5]!3 [g4,b4,d5]@2 [g4,b4,d5]",
  I: "[e4,a4,c5,e5]@2 [e4,a4,c5,e5]!3 [e4,a4,c5,e5]@2 [e4,a4,c5,e5]", // Am
  J: "[f4,a4,c5,f5]@2 [f4,a4,c5,f5]!3 [f4,a4,c5,f5]@2 [f4,b4,d5,f5]", // F Bdim
  K: "[f4,b4,d5,f5]@2 [f4,b4,d5,f5]!3 [f4,b4,d5,f5]@2 [f4,b4,d5,f5]", L: "[e4,g4,c5,e5]", M: "~@6 [g4,c5,e5]!2",
  N: "[g4,c5,e5]@2 [g4,e5] [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]", // C
  O: "[f4,b4,d5,f5]@2 [f4,b4,d5,f5]!3 [f4,b4,d5,f5]@2 ~", // Bdim
})).s("gm_electric_guitar_muted").gain(0.2)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@9 A B C D@2 B E C B@2 C D@2 B E C B F D G B@2 H@2 I@2 J@2 K@2 B@2 C D@2 B E C B@2 C D@2 B E C B F D G B@2 H@2 I@2
  J@2 K@2 B@2 C D@2 B E C B@2 C D@2 B E C B@2 D@2 B L H@2 I@2 J@2 B@2 D@2 B L H@2 I@2 J@2 ~
>`.pickRestart({
  A: "~@3 c3 c3@4", B: "c3@3 c3 c3@4", C: "g3@3 g3 g3@4", D: "f3@3 f3 f3@4", E: "d3@3 d3 d3@4", F: "c3@3 c3 c3@2 e3@2",
  G: "f3@3 f3 f3@2 a#3@2", H: "[f3@3 f3 f3@3 f3@2 f3@2 f3 f3@4]/2", I: "[c3@3 c3 c3@3 a3@2 a3@2 a3 a3@2 c4@2]/2",
  J: "[d3@3 d3 d3@3 g3@2 g3@2 g3 g3@4]/2", K: "b3/2", L: "c3@3 c3 c3@2 a#3@2",
})).s("gm_acoustic_bass").gain(0.2)

// drums · kick
const kick = s("bd").struct("<A B A B A B A B C D@28 A E D@28 A E D@40 ~>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "~ x ~ x!2 ~@2 x", C: "x", D: "x ~@2 x!2 ~@3", E: "~ x ~ x!2 ~@3",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@25 A@12 ~@18 A@12 ~@2 A@8 ~@8 A@24 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.32)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 [x!8 ~@8] ~@101>").gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@25 A@12 ~@18 A@12 ~@2 A@8 ~@8 A@24 ~>".pickRestart({
  A: "x!8",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9
  [~@2 x!3 ~ x ~ x ~ x ~ x ~ x ~]
  [x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~]!15
  ~@14
  [x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~]!16
  ~@22
  [x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~]!8
  ~@25
>`).gain(0.32)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@8 [~ x] [~@3 x]!16 ~@14 [~@3 x]!16 ~@22 [~@3 x]!8 ~@25>").gain(3.78)

// drums · bongos
const bongos = s("bongo:4").struct("<~@9 [~ x ~ x]!100 ~>").gain(0.85)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@9 [x!2 ~ x!3 ~ x]!100 ~>").gain(0.85)

// drums · ht
const ht = s("ht").struct("<A B A C A D A D ~@102>".pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "x ~ x!3 ~@3", C: "x!2 ~ x", D: "x!3 ~@2 x ~ x",
})).gain(0.32)

// drums · mt
const mt = s("mt").struct("<A B A C A D A D ~@102>".pickRestart({
  A: "~ x ~@4 x ~", B: "~@2 x ~@4 x ~@2 x ~@5", C: "~ x ~@6", D: "~@3 x ~@2 x ~@5 x ~@3",
})).gain(0.32)

// drums · claves
const claves = s("clave:2").struct("<~@37 [x ~@2 x ~@2 x ~] ~@29 [x ~@2 x ~@2 x ~] ~@42>").gain(1.57)

// drums · triangle
const triangle = s("triangles:35").struct("<[x ~ x!3 ~ x!2]!8 ~@102>").gain(2.8)

stack(
  flute, accordion, accordion_soft, steel_drums, acoustic_guitar_nylon, tenor_sax, electric_guitar_muted, bass, kick,
  snare, snare_soft, open_hat, tambourine, vibraslap, bongos, bongos_2, ht, mt, claves, triangle
)

More by The Beach Boys