Strudelify

And Your Bird Can Sing

The Beatles

KeyE majorTempo120 bpm
0:00/0:00
// And Your Bird Can Sing — The Beatles
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 68 bars on a 16-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.

// bass · fretless bass
const bass = note(`<
  A B@2 C@3 D@2 E F G H C@2 D@2 E F G H I@4 J K L M N@4 O P H@2 I@4 J K L Q R S T@2 U V G H@5 W X H@2 A@3 Y@5
>`.pickRestart({
  A: "e2 ~ e2@2 b1!2 c#2 e2", B: "e2 ~ e2@2 b1 a#1 c#2 d#2", C: "e2 ~ e2@2 b1!2 c#2 d#2",
  D: "[e2 ~ e2@2 b1!2 c#2 e2@2 ~ e2@2 b1 d#2 e2 b1]/2", E: "f#2 ~ f#2@2 c#2!2 e2 f#2", F: "a2 g#2 f#2!2",
  G: "e2 ~ e2@2 g#2 a2 a#2 b2", H: "e2@2 ~@2 e3@3 g#2 g#2@2 a2@2 a#2@2 b2@2",
  I: "[g#2@2 g#2@2 g#1 c#2 d#2 g2@3 g2@2 g#1 c#2 d#2 f#2@3 f#2@2 g#1 c#2 d#2 f2@3 f2@2 g#1 c#2 d#2 e2]/4",
  J: "e2@2 e2@2 c#2 g#1 f#1 e1", K: "f#2@2 f#2@2 c#2!2 e2 f#2", L: "f#2@2 c#2 e2@2 f#2@2 c#2",
  M: "b1@2 ~@2 b2@3 f#2 b1@2 b1@2 b1@4", N: "e2@4 e2@4 b2@3 ~ e3@4, ~@8 a2 ~@7",
  O: "f#2@4 f#2@4 c#3@3 ~ f#3@4, ~@8 b2 ~@7", P: "b2 a2@3 g#2@4 f#2@2 e2@2 d#2@4", Q: "b1@2 ~@2 b2@3 b2 b1@2 b1@2 b1@4",
  R: "e2!2 d#2!2", S: "c#2@4 c#2@4 b1@4 b1@3 [c2,c#2]",
  T: "[[d2,d#2] ~@3 e2@4 a2 b2 d3 e3 e3@2 e2@6 e2@4 b1@2 c#2@2 e2@2 c#2@2, e2 ~@15]/2", U: "f#2 ~ f#2@2 c#2 e2 f#2 e2",
  V: "a2@2 g#2@2 f#2 e2@2 c#2", W: "f#2 ~ f#2@2 c#2 e2 f#2@2", X: "a2@2 g#2@2 f#2 f#2@2 d#2",
  Y: "[[e1,e2]@4 e3!2 e3@2 e3 e3@2 e3 e3@2 e3 e3@2 e3 e3@2 e3@60]/5", // E
})).s("gm_fretless_bass").gain(0.51).pan(0.6)

// other · piccolo · "Harmony 1 Piccolo"
const piccolo = note("<~@6 A B ~@2 C@2 ~@2 A B ~@2 C@2 ~@24 D E F B ~@2 C@2 ~@16>".pickRestart({
  A: "e5!2 g#5 a5", B: "g#5 ~@3", C: "[~@2 g#5@7 ~@7]/2", D: "g#5!4 g#5@2 f#5!2", E: "e5!2 d#5 ~",
  F: "g#5@4 g#5@4 g#5@4 g#5 a5@3",
})).s("gm_piccolo").gain(0.43).pan(0.3)

// other · piccolo · "Harmony 2 Piccolo"
const piccolo_2 = note("<~@44 A B C D ~@2 E@2 ~@16>".pickRestart({
  A: "b5!4 b5@2 a5!2", B: "g#5!2 f#5 ~", C: "~@3 c#6", D: "b5 ~@3", E: "[~@2 b5@7 ~@7]/2",
})).s("gm_piccolo").gain(0.4).pan(0.8)

// chords · electric guitar jazz · "Gtr 1 Jazz"
const electric_guitar_jazz = note(`<
  A B C D ~@7 E ~@8 F G H I J K@2 L A B M D N O P Q F G H I J K@2 L ~@8 A B M D N O P Q A@3 ~@5
>`.pickRestart({
  A: "e2 g#4 f#4 e4 f#4 e4 d#4 e4", B: "~ c#4 ~ a3 ~@2 e4 f#4, d#4@3 ~ g#3@2 ~@2, ~@2 b3@3 b3@3",
  C: "g#4@2 ~@2 g#4@6 g#4 a4 g#4@4", D: "e4@2 b3@2 c#4@2 e4@2 g#4@4 f#4 e4 c#4@2, ~@8 f#4 ~@7",
  E: "~@2 b3@2 c#4@2 e4@2 g#4@4 f#4 e4 c#4@2, ~@8 f#4 ~@7", F: "~ c#4 ~@3 d#4 ~ b3, b3@3 g#4@4 ~, ~@2 d#4@3 ~ c#4@2",
  G: "~ c#4 ~@3 d#4 ~ b3, b3@3 g4@4 ~, ~@2 d#4@3 ~ c#4@2", H: "~ c#4 ~@3 d#4 ~ b3, b3@3 f#4@4 ~, ~@2 d#4@3 ~ c#4@2",
  I: "~ c#4 ~@3 c#4 ~ f3, b3@3 f4@4 ~, ~@2 d#4@3 ~ g#3@2", J: "~@7 e3, e3@2 b3@3 b3@2 ~, ~ g#3@2 e4@3 g#3@2",
  K: "~@7 f#3, f#3@2 c#4@3 c#4@2 ~, ~ a3@2 f#4@3 a3@2", L: "~@7 f#3, f#3@2 d#4@3 d#4@2 ~, ~ b3@2 f#4@3 b3@2",
  M: "g#4@2 ~@2 g#4@7 [g#4,a4] g#4@4", N: "f#4 g#4 ~@2 a4 g#4 ~ e4, ~ a4 ~ f#4, ~@3 b4@4 ~",
  O: "d#4 ~ f#4 g#4 ~ b4 c#5 d#5, ~ e4@4 ~@3, ~ a4", P: "[d#5,e5]@2 ~@2 e5@7 [e5,f#5] e5@4", Q: "b4 ~ e4@6, ~ g#4@7",
})).s("gm_electric_guitar_jazz").gain(0.42).pan(0.8)

// other · electric guitar jazz · "Gtr 2 Jazz"
const electric_guitar_jazz_2 = note(`<
  A B C D E ~@6 F E ~@7 G@3 H I J@2 K A B L D M N O P G@3 H I J@2 K E ~@7 A B L D M N O P A@3 Q@5
>`.pickRestart({
  A: "e2 e4 d#4 c#4 d#4 c#4 b3 c#4", B: "b3 a3 ~ f#3 e3 ~ g#3 b3, ~ g#3@2 ~, ~@5 f#3@3", C: "e4@2 ~@2 e4@6 e4 f#4 e4@4",
  D: "b3@2 g#3@2 a3@2 b3@2 e4@4 c#4 b3 g#3@2, ~@8 d#4 ~@7", E: "e3",
  F: "~@2 g#3@2 a3@2 b3@2 e4@4 c#4 b3 g#3@2, ~@8 d#4 ~@7", G: "g#3 a#3 ~@3 b3 a#3 g#3, ~@2 b3@3 ~@3, ~@3 d#4@4 ~",
  H: "g#3 a#3 ~@5 c#3, ~@2 b3@3 g#3@2 ~, ~@3 c#4@3 f3@2", I: "~@7 b2, b2@2 g#3@3 g#3@2 ~, ~ e3@2 b3@3 e3@2",
  J: "~@7 c#3, c#3@2 a3@3 a3@2 ~, ~ f#3@2 c#4@3 f#3@2", K: "~@7 b2, b2@2 b3@3 b3@2 ~, ~ f#3@2 d#4@3 f#3@2",
  L: "e4@2 ~@2 e4@7 [e4,f#4] e4@4", M: "a3 ~ c#4 d#4 ~ b3 a3 g#3, ~ b3@4 ~@3, ~ c#4",
  N: "~ g#3 a3 ~ c#4 d#4 ~ f#4, f#3@2 ~ e4, ~@3 b3@4 ~", O: "[f#4,g#4]@2 ~@2 g#4@7 [g#4,a4] g#4@4", P: "~ b3 g#3@6, e4",
  Q: "[e3,a3]/5", // A5
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.1)

// chords · electric guitar muted · "Rythm Gtr Muted"
const electric_guitar_muted = note("<~@4 A@4 B C A ~ A@4 B C A D ~@24 A@4 B C E@2 ~@16>".pickRestart({
  A: "[e3,b3,e4,g#4]!4", B: "[f#2,c#3,f#3,a3,c#4,f#4]!4", C: "[a2,e3,a3,c#4,e4,a4]!4",
  D: "[e3,b3,e4,g#4]@2 [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4]!4", E: "~ [e3,b3,e4,g#4]!7",
})).s("gm_electric_guitar_muted").gain(0.35).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@3 x!2 ~ x]!11
  [x ~@3 x!2 ~@2]
  [x ~@3 x!2 ~ x]!8
  [x ~@3 x!2 ~@2]!25
  [x ~@3 x!2 ~ x]!15
  [x ~ x ~ x!2 ~ x]!3
  x
  ~@4
>`).gain(0.45)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!63 ~@5>").gain(0.4)

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

// drums · open hat
const open_hat = s("oh").struct("<~@19 [~@7 x] [~@3 x ~@3 x]!8 ~@8 [~@3 x ~@3 x]!7 ~@25>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@18 A ~@9 B ~@15 A ~@18 A ~@4>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 A ~@7 B C D C@52 E ~>".pickRestart({
  A: "~@5 x!3", B: "x ~@3 x ~@2 x!2 ~ x ~ x ~ x ~", C: "x!16", D: "~@4 x!4", E: "x",
})).gain(0.25)

stack(
  bass, piccolo, piccolo_2, electric_guitar_jazz, electric_guitar_jazz_2, electric_guitar_muted, kick, snare, hihat,
  open_hat, crash, tambourine
)

More by The Beatles