Strudelify

Good Day Sunshine

The Beatles

KeyF majorTempo125 bpm
0:00/0:00
// Good Day Sunshine — The Beatles
// 125 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 6, 5/4 at bar 6, 3/4 at bar 8, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 63 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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 · synth bass 2 · "Fretless E.Bass"
const bass = note(`<
  A@4 B C B C A D E F A G E H A G B C B C A D E H A G I J K L B C B C A D E F A G E H A K B C B C A M N O N P A Q@3 ~@3
>`.pickRestart({
  A: "e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~", B: "b1@2 ~ b1@2 ~ b1@2 ~ gb1@2 ~", C: "gb1@2 ~ gb1@2 ~ gb1@2 ~ gb1@2 ~",
  D: "e1@2 ~ e1@2 ~ e1@2 ~@4", E: "a1@2 ~ a1@2 ~ gb1@2 ~ gb1@2 ~", F: "b1@2 ~ b1@2 ~ b1@2 b1 b1@2 ~",
  G: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~", H: "b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~", I: "d2@2 ~ d2@2 ~ b1@2 b1 b1@2 ~",
  J: "e1@2 ~ e1@2 ~ e1@2 e1 e1@2 ~", K: "a1@2 ~ a1@2 ~ a1@2 a1 a1@2 ~", L: "d2@2 ~ d2@2 ~ d2@2 d2 d2@2 ~",
  M: "e1@2 ~ e1@2 ~ e1@2 ~ b1@2 ~", N: "b1@2 ~ b1@2 ~ gb1@2 ~ gb1@2 ~", O: "gb1@2 ~ gb1@2 ~ gb1@2 ~ b1@2 ~",
  P: "gb1@2 ~ gb1@2 ~ gb1@2 ~ e1@2 ~", Q: "[e1@4 ~@2 e1@4 ~@2 c2@45 ~@15]/3",
})).s("gm_synth_bass_2").gain(0.61)

// other · flute · "Lead Flute"
const flute = note("<~@9 A B C D E F G H I ~@5 A B C J K ~@9 A B L J M N O H I ~@12 P@5>".pickRestart({
  A: "~@8 e4 a4@2 b4", B: "db5@3 ~@5 db5 db5@2 a4", C: "b4 gb4 a4@3 ~@7", D: "ab5@3 gb5@3 e5@2 e5 d5@2 db5, gb5 ~@23",
  E: "~@2 d5 db5@2 a4 ~@2 a4 b4@2 db5", F: "~@8 db5 a4@2 b4", G: "gb4@2 a4@3 ~@7",
  H: "ab5@3 gb5@2 db5 e5@2 e5 d5@2 db5, gb5 ~@23", I: "~@2 d5 db5@2 a4@4 ~@3",
  J: "ab5@3 gb5@3 e5@2 d5 db5@2 d5, gb5 ~@23", K: "~@2 db5 ~@2 a4@11 g4@6 gb4@2", L: "b4@2 gb4 a4@2 ~@7",
  M: "db5@2 a4@4 ~@2 a4 b4@2 db5", N: "~@8 db5 db5@2 a4", O: "b4 ~ a4@3 ~@7",
  P: "[~@6 a5@5 g5@4 f5@5 eb5@7 ~@3 a5@5 g5@4 f5@5 eb5@13 ~@3]/5",
})).s("gm_flute").gain(0.72).pan(1)

// other · viola · "Combined Tracks"
const viola = note("<~@4 A@4 B@2 C D E F G H I J A@4 B@2 C D K L ~@4 A@4 B@2 C M K N O P I J A@4 Q@6 R@7>".pickRestart({
  A: "[gb4@5 eb4@4 gb4@5 eb4@4 ~@6]/2", B: "[ab4@5 gb4@4 e4@5 d4@4 ~@2 e4 a4@2 b4]/2", C: "db5@3 ~@5 db5 db5@2 a4",
  D: "b4 gb4 a4@3 ~@7", E: "ab5@3 gb5@3 e5@2 e5 d5@2 db5, gb5 ~@23", F: "~@2 d5 db5@2 a4 ~@2 a4 b4@2 db5",
  G: "~@8 db5 a4@2 b4", H: "gb4@2 a4@3 ~@7", I: "ab5@3 gb5@2 db5 e5@2 e5 d5@2 db5, gb5 ~@23",
  J: "~@2 d5 db5@2 a4@4 ~@3", K: "ab5@3 gb5@3 e5@2 d5 db5@2 d5, gb5 ~@23", L: "~@2 db5 ~@2 a4@11 g4@6 gb4@2",
  M: "b4@2 gb4 a4@2 ~@7", N: "db5@2 a4@4 ~@2 a4 b4@2 db5", O: "~@8 db5 db5@2 a4", P: "b4 ~ a4@3 ~@7",
  Q: "[ab4@5 gb4@4 e4@5 d4@4 ~@3 gb4@5 eb4@4 gb4@5 eb4@4 ~@6 gb4@5 eb4@4 gb4@5 eb4@4 ~@6 ab4@3]/6",
  R: "[~@2 gb4@4 e4@5 d4@4 ~@3 a4@5 g4@4 ~@8 g5@4 ~@8 g4@4 ~@8 g5@4 f5@5 eb5@13 ~@3, ~@27 f4@5 eb4@4 ~@6 a4@5 ~@4 f4@5 eb4@25 ~@3, ~@30 a5@5 ~@4 f5@5 eb5@7 ~@3 a5@5 ~@25]/7",
})).s("gm_viola").gain(0.64)

// other · percussive organ · "Harm 1 Oohs"
const percussive_organ = note("<~@4 A@4 B@2 ~@8 A@4 B@2 ~@8 A@4 B@2 ~@8 A@4 C@6 D@3 E@4>".pickRestart({
  A: "[gb4@5 eb4@4 gb4@5 eb4@4 ~@6]/2", B: "[ab4@5 gb4@4 e4@5 d4@4 ~@6]/2",
  C: "[ab4@5 gb4@4 e4@5 d4@4 ~@3 gb4@5 eb4@4 gb4@5 eb4@4 ~@6 gb4@5 eb4@4 gb4@5 eb4@4 ~@6 ab4@3]/6",
  D: "[~@2 gb4@4 e4@5 d4@4 ~@3 a4@5 g4@4 f4@5 eb4@4]/3", E: "[~@6 a4@5 g4@4 f4@5 eb4@25 ~@3]/4",
})).s("gm_percussive_organ").gain(0.72).pan(0.8)

// other · drawbar organ · "Harm 2 Oohs"
const drawbar_organ = note("<~@4 A@4 B@2 ~@8 A@4 B@2 ~@8 A@4 B@2 ~@8 A@4 C@6 D@3 E@4>".pickRestart({
  A: "[eb4@5 b3@4 bb3@5 bb3@4 ~@6]/2", B: "[b3@5 b3@4 b3@5 b3@4 ~@6]/2",
  C: "[b3@5 b3@4 b3@5 b3@4 ~@3 eb4@5 b3@4 bb3@5 bb3@4 ~@6 eb4@5 b3@4 bb3@5 bb3@4 ~@6 b3@3]/6",
  D: "[~@2 b3@4 b3@5 b3@4 ~@3 c4@5 c4@4 c4@5 c4@4]/3", E: "[~@6 c4@5 a3@4 a3@5 g3@25 ~@3]/4",
})).s("gm_drawbar_organ").gain(0.72).pan(0.2)

// chords · piano · "Piano 1"
const piano = note(`<
  A@4 B@4 C D E F G H E I G J B@4 C D E F G K ~@4 B@4 C D E F G H E I G J B@4 C L@6 M@5 ~
>`.pickRestart({
  A: "[e1,e2]!4", // E
  B: "[[b1,b2]@3 [b1,b2]@2 [b1,b2,eb3,gb3,b3]@4 gb2@3 ~@3 gb2@3 gb2@2 ab2 b2@3, [eb3,gb3,b3]@5 ~@4 [db3,gb3,bb3]@5 [db3,gb3,bb3]@4 [db3,gb3,bb3]@3 ~@3, ~@4 gb2 ~@3]/2", // B Gb
  C: "e2@3 e2@2 [e2,e3,ab3,b3]@4 [e2,e3,ab3,b3]@3, [e3,ab3,b3]@5 ~@7", D: "[e2,e3,ab3,b3]!3 ~",
  E: "[a1,a2,a3,db4,e4]@3 a2 ab2 g2 [gb2,gb3,bb3,db4]@3 [gb2,gb3,bb3,db4]@3, ~ [a3,db4,e4] ~@2", // A Gb A
  F: "[b1,b2,a3,eb4,gb4]@3 [b1,b2,a3,eb4,gb4]@3 ~ [a3,eb4,gb4] ~ [b1,b2,a3,eb4,gb4]@3, ~@2 [b1,b2] ~", // B7 Ebdim B7 B
  G: "[e2,ab3,b3,e4]!4", H: "[a1,a2,a3,db4,e4]!4", I: "[b1,b2,a3,eb4,gb4]!4",
  J: "[a1,a2,a3,db4,e4]@3 [a1,a2,a3,db4,e4]@3 [a1,a2]@2 [a1,a2] [a1,a2,a3,db4,e4]@3, ~@2 [a3,db4,e4] ~", // A
  K: "[a1,a2,a3,db4,e4]!2 ~@2", // A
  L: "[[e2,e3,ab3,b3]@3 [e2,e3,ab3,b3]@3 [e2,e3,ab3,b3]@3 [b1,b2]@3 [b1,b2]@2 [b1,b2,eb3,gb3,b3]@4 gb2@3 ~@3 gb2@3 gb2@2 ab2 b2@3 [b1,b2]@3 [b1,b2]@2 [b1,b2,eb3,gb3,b3]@4 gb2@3 ~@3 gb2@3 gb2@2 ab2 b2@3 e2@3 e2@2 [e2,e3,ab3,b3]@4 [e2,e3,ab3,b3]@3 [e2,e3,ab3,b3]@3, ~@9 [eb3,gb3,b3]@5 ~@4 [db3,gb3,bb3]@5 [db3,gb3,bb3]@4 [db3,gb3,bb3]@3 ~@3 [eb3,gb3,b3]@5 ~@4 [db3,gb3,bb3]@5 [db3,gb3,bb3]@4 [db3,gb3,bb3]@3 ~@3 [e3,ab3,b3]@5 ~@10, ~@7 gb2 ~@7 gb2 ~@8]/6", // E B E B Gb B Gb E
  M: "[[e2,e3,ab3,b3] [e2,ab3,b3,ab4] [f2,c3]@16 ~@2]/5", // E F5
})).s("gm_piano").gain(0.56).pan(0.3)

// chords · piano · "Piano 1"
const piano_2 = note("<~@27 A B C@2 D ~@31>".pickRestart({
  A: "~@7 a3 bb3 b3 c4 db4, ~@2 [a1,a2]!2", // A
  B: "[d2,d3]@3 d4 e4 f4 gb4@2 f4 e4@2 eb4, d4@2 ~ [d2,d3]@3 [b1,b2]@3 [b1,b2]@3", // D B
  C: "[[e4,ab4]@4 [gb4,a4]@2 [g4,bb4]@4 ~@14 db4@4 ~@8 db4 g4 [db4,g4] db4 g4 db4 [a2,a3,db4]@6, e2@6 e2@5 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 ~@3 a4@6 ~ g4@2 ~@4 g4@7, ~@5 ab4 e2@3 e2@3 [a2,a3]@3 [a2,a3]@3 [a2,a3]@3 ~@3, ~@12 ab4@2 ab4@2 ab4@2 ab4@2 ab4@2 ab4@2 c4 ~@9 db4@2 ~@12]/2", // E Gbm Gm Dbdim A
  D: "[d4,gb4] a3 [db4,e4] g3@2 ~@3 a3 db4@2 ~, [d2,d3]!3 ~, ~@5 [gb3,b3,d4]@3 ~@4", // D Dbm D Bm
})).s("gm_piano").gain(0.64).pan(0.3)

// chords · piano · "Piano 2"
const piano_3 = note(`<
  ~@5 A B A C@2 D E F G H E F G ~ A B A C@2 D E F G ~@5 A B A C@2 D E F G H E F G ~ A B A I@2 ~ J ~ K@7 ~
>`.pickRestart({
  A: "~@6 [gb1,gb2]@2 [ab1,ab2] [b1,b2]@3", B: "[b1,b2] ~@3", C: "[e1,e2]/2",
  D: "~@3 [a2,a3] [ab2,ab3] [g2,g3] [gb2,gb3]@3 [gb2,gb3]@3", // A Ab G Gb
  E: "[b2,gb3]@2 gb3 d3@2 eb3 [b2,gb3]@2 [b2,gb3] d3@2 eb3, ~@2 b2@4 ~@3 b2@3", // B5
  F: "[e2,e3]@2 e3 g3@2 ab3 [e2,e3]@2 e3 g3@2 ab3, ~ e2@2 ~ e2@2", // E
  G: "[e2,a2]@2 a2 c3@2 db3 [e2,a2]@2 a2 c3@2 db3, ~ e2@2 ~ e2@2", // A5
  H: "[e2,a2]@2 ~ [a2,a3] [ab2,ab3] [g2,g3] [gb2,gb3]@3 [gb2,gb3]@3", I: "[[e1,e2]@7 ~]/2",
  J: "~@3 [gb1,gb2]@2 [ab1,ab2] [b1,b2]@3 [b1,b2]@3", // Gb Ab B
  K: "[~@3 [gb1,gb2]@2 [ab1,ab2] [b1,b2]@3 [e1,e2]@18 [e1,e2]@3 [f1,f2]@48 ~@6]/7", // Gb Ab B E F
})).s("gm_piano").gain(0.64).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A B A B C@8 A B A B A B C@7 D A B A B A B C@7 D A B A B A E F G F G F H ~@5
>`.pickRestart({
  A: "x ~@4 x ~@3 x ~@2", B: "~ x ~@4", C: "x ~@5 x ~ x ~@2 x", D: "x ~@2 x!2 ~", E: "~@2 x ~@3 x ~@2 x ~@2",
  F: "~@2 x ~@3 x ~@4 x", G: "~@3 x", H: "~ x ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@3 A B C@4 D E@8 B C@4 D E@8 B C@4 D E@8 B C@4 D C@5 F C@3 G ~>".pickRestart({
  A: "x!12", B: "~ x!3", C: "x!4", D: "x!3 ~", E: "~ x ~ x", F: "x!2 ~ x", G: "x!2 ~@2",
})).gain(0.35)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 [x!12] ~@59>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@3 [~@12 x!12] x ~@58>").gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@5 B ~@8 A@5 B ~@8 A@5 B ~@8 A@15 C ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2",
})).gain(0.35)

stack(
  bass, flute, viola, percussive_organ, drawbar_organ, piano, piano_2, piano_3, kick, snare, hihat, low_tom, ride,
  tambourine
)

More by The Beatles