Strudelify
Yellow Submarine cover art

Yellow Submarine

Yellow Submarine

The Beatles

KeyG♭ majorTempo120 bpm
0:00/0:00
// Yellow Submarine — The Beatles
// 120 bpm, 4/4, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 93 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// other · trumpet
const trumpet = note(`<
  ~@30
  [~@9 db5 eb5@2]
  [~@3 db5 eb5 db5 eb5@2 ~ db5 eb5 db5 eb5@4 bb4@2 bb4@2 eb5@2 f5@2]
  [gb5 ~ f5 eb5 ~ gb5 db5 ~ eb5 bb4 ~ eb5]
  ~@60
>`).s("gm_trumpet").gain(0.49).pan(0.8)

// other · trombone · "Trombone 1"
const trombone = note(`<
  ~@30
  [~@9 db4 eb4 f4]
  [gb4@2 ~@2 bb4 a4 bb4@2 ~@2 bb4 a4 bb4@4 bb3@2 bb3@2 eb4@2 f4@2]
  [gb4 ~ f4 eb4 ~ gb4 db4 ~ eb4 bb3 ~ eb4]
  ~@60
>`).s("gm_trombone").gain(0.66).pan(0.2)

// other · trombone · "Trombone 2"
const trombone_2 = note("<~@31 [bb3@2 ~ bb3@2 ~@4 bb3 ~ bb3] [bb3 ~ bb3 ~@2 bb3!2 ~ bb3!2 ~ bb3] ~@60>")
  .s("gm_trombone").gain(0.59).pan(0.7)

// bass · tuba
const bass = note("<~@31 [db3@3 eb3 ~ f3 gb3 ~ f3 eb3 ~ db3] [gb2 ~ gb2!2 ~ gb2 gb3 ~ f3 eb3 ~ gb2] ~@60>")
  .s("gm_tuba").gain(0.62).pan(0.3)

// bass · fretless bass · "Fretless E.Bass"
const bass_2 = note(`<
  ~ A B C D A B C D A B C D A B C E F G@2 H I G J K A B C D A L M N F G@2 H I G J O A B C D A B P Q A B C D A B C E F
  G@2 H I G J R S G@2 T S G@2 T S G@2 T S G@2 T S G@2 T S G@2 T S G@2 T
>`.pickRestart({
  A: "db2@17 ~ b1@4 ~@2", B: "gb1@17 ~ eb2@4 ~@2", C: "ab2@17 ~ b1@4 ~@2", D: "db2@17 ~ gb1@4 ~@2",
  E: "db2@11 ~@5 b1@2 bb1@4 ab1@2", F: "gb1@2 ~ bb1@2 ~ db2@2 ~ bb1@2 ~", G: "db2@2 ~ ab1@2 ~ db2@2 ~ ab2@2 ~",
  H: "gb2@2 ~ db2@2 ~ gb2@2 ~ db2@2 bb1, ~@17 eb2@2 ~@5", I: "gb2@2 ~ db2@2 ~ gb2@2 ~ db2@2 ~",
  J: "db2@2 ~ bb1@2 ~ db2 ~ b1 bb1 ~ ab1", K: "gb1@9 ~ gb1@2 gb1@6 gb1@6", L: "gb1@17 ~ gb1@4 ~@2",
  M: "gb1@17 ~ db2@4 ~@2", N: "db2@11 ~ db2@4 b1@2 bb1@4 ab1@2", O: "gb1@3 bb1@2 db2 gb2@3 gb2@3",
  P: "ab2@13 ~ ab2@2 bb2@2 b2@6", Q: "db2@2 ~ b1@2 ~ bb1@2 ~ gb1@2 ~", R: "gb1@2 ~ bb1 ~ db2 gb2@2 ~ gb2@2 ~",
  S: "gb1@2 ~ bb1@2 ~ db2@2 ~ eb2@2 ~", T: "gb2@2 ~ db2@2 ~ gb2 ~ eb2 db2 ~ bb1",
})).s("gm_fretless_bass").gain(0.6).pan(0.6)

// chords · acoustic guitar nylon · "Nylon Gtr"
const acoustic_guitar_nylon = note(`<
  ~ A B C D A B C D E F G H E F G I J K@2 J@2 K@2 L A B C D A M@2 D J K@2 J@2 K@2 L A B C D A B C D E F G H E F G I J
  K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J
>`.pickRestart({
  A: "~ f4@17 [b2,eb3,gb3,b3,eb4]@5 ~, [ab2,db3,ab3,b3]@3 ~", // B Db7
  B: "~ gb4@17 [eb2,bb2,eb3,gb3,bb3,eb4]@5 ~, [gb2,bb2,db3,gb3,bb3]@3 ~", // Ebm Gb
  C: "~ eb4@17 [b2,eb3,gb3,b3,eb4]@5 ~, [eb2,ab2,eb3,ab3,b3]@3 ~", // B Abm
  D: "~ f4@17 [gb2,bb2,db3,gb3,bb3,gb4]@5 ~, [ab2,db3,ab3,b3]@3 ~", // Gb Db7
  E: "[ab3,b3,f4]@2 [ab3,b3,f4] [ab3,b3,f4]@2 [ab3,b3,f4] [ab3,b3,f4]@2 [ab3,b3,f4] [gb3,b3,eb4]@2 [gb3,b3,eb4], [ab2,db3]!3 [b2,eb3]", // Fdim B Db5 B
  F: "[gb3,bb3,gb4]@2 [gb3,bb3,gb4] [gb3,bb3,gb4]@2 [gb3,bb3,gb4] [gb3,bb3,gb4]@2 [gb3,bb3,gb4] [gb3,bb3,eb4]@2 [gb3,bb3,eb4], [gb2,bb2,db3]!3 [eb2,bb2,eb3]", // Gb Ebm Gb Eb5
  G: "[ab3,b3,eb4]@2 [ab3,b3,eb4] [ab3,b3,eb4]@2 [ab3,b3,eb4] [ab3,b3,eb4]@2 [ab3,b3,eb4] [gb3,b3,eb4]@2 [gb3,b3,eb4], [eb2,ab2,eb3]!3 [b2,eb3]", // Abm B Ab5 B
  H: "[ab3,b3,f4]@2 [ab3,b3,f4] [ab3,b3,f4]@2 [ab3,b3,f4] [ab3,b3,f4]@2 [ab3,b3,f4] [gb3,bb3,gb4]@2 [gb3,bb3,gb4], [ab2,db3]!3 [gb2,bb2,db3]", // Fdim Gb Db5 Gb
  I: "[ab3,b3,f4]@2 [ab3,b3,f4] [ab3,b3,f4]@2 [ab3,b3,f4] [ab3,b3,f4]@2 [ab3,b3,f4] [ab3,b3,f4]@2 [ab3,b3,f4], [ab2,db3]!4", // Fdim Db5
  J: "[gb2,bb2,db3,gb3,bb3,gb4]@3 [gb2,bb2,db3,gb3,bb3,gb4]@3 [gb2,bb2,db3,gb3,bb3,gb4]@3 [gb3,bb3,gb4]@2 [gb3,bb3,gb4], ~@3 [gb2,bb2,db3]", // Gb
  K: "[ab2,db3,ab3,b3,f4]@3 [ab2,db3,ab3,b3,f4]@3 [ab2,db3,ab3,b3,f4]@3 [ab3,b3,f4]@2 [ab3,b3,f4], ~@3 [ab2,db3]", // Db7 Fdim Db5
  L: "[gb3,bb3,gb4]@2 [gb3,bb3,gb4] [gb3,bb3,gb4]@2 [gb3,bb3,gb4] [gb3,bb3,gb4]@2 [gb3,bb3,gb4] [gb2,bb2,db3,gb3,bb3,gb4]@3, [gb2,bb2,db3]!3 ~", // Gb
  M: "~ gb4@17 [ab2,db3,ab3,b3,f4]@5 ~, [gb2,bb2,db3,gb3,bb3]@3 ~", // Db7 Gb
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.2)

// other · recorder · "SFX Whistle"
const recorder = note("<~@41 A@2 ~@39 A@2 ~@9>".pickRestart({
  A: "[~@8 g6 gb7@15]/2",
})).s("gm_recorder").gain(0.29).pan(0.6)

// other · tubular bells · "SFX Bell"
const tubular_bells = note("<~@41 A ~@3 B@2 ~@32 A ~@3 B@2 ~@8>".pickRestart({
  A: "~@11 eb5@3 ~@2 eb5@3 ~@2 eb5@3", B: "[~@23 eb5@3 ~@2 eb5@3 ~@2 eb5@3 ~@12]/2",
})).s("gm_tubular_bells").gain(0.45).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@5 A B C A D@16 A B C A D@12 ~@4 A B C A D@44>".pickRestart({
  A: "~ x!2 ~", B: "~@3 x ~ x!2 ~@5", C: "~@2 x!2 ~ x!2 ~@5", D: "x!4",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@17 [~ x ~ x]!8 ~@8 [~ x ~ x]!8 ~@16 [~ x ~ x]!36>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B@16 C B C B C B D B@9 C B C B C B D E B@16 C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x ~@5 x ~@5 x ~@3 x!3 ~@5", D: "x!3 ~", E: "~@2 x!2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@24 [~@3 x] ~@15 [~@3 x] x ~@51>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@41 x ~@51>").gain(0.4)

stack(
  trumpet, trombone, trombone_2, bass, bass_2, acoustic_guitar_nylon, recorder, tubular_bells, kick, snare, hihat,
  open_hat, crash
)

More by The Beatles