Strudelify

I've Just Seen a Face

The Beatles

KeyA majorTempo200 bpm
0:00/0:00
// I've Just Seen a Face — The Beatles
// 200 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Muted Gtr.
setcpm(200/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 · electric guitar muted · "Muted Gtr"
const electric_guitar_muted = note(`<
  A B@3 C D@3 E F G H@3 I ~@3 J K L M N H@3 I ~@3 J K L M N ~@6 O@2 H P ~ I ~@3 J K L M N ~@6 O@2 Q@2 R S Q@2 R S ~ T U
  V ~@8 H P ~ I ~@3 J K L M N ~@2 W X ~@2 O Y ~@2 W ~@2 Z ~ Y ~@2 AA ~@2 AB L M AC@5 ~
>`.pickRestart({
  A: "[a2,a3] [g#2,g#3]", B: "[f#2,f#3]/3", C: "[f#3,f#4] [e3,e4]", D: "[d3,d4]/3", E: "[d3,d4] [c#3,c#4]",
  F: "[b2,b3]", G: "[a2,a3] ~", H: "~@11 a3 ~@4", I: "~ [g#2,g#3]", J: "~ [e3,e4]", K: "~ [a2,a3]", L: "~ [c#3,c#4]",
  M: "~@2 [a2,a3] ~", N: "~@8 [e3,a3,b3,e4]@3 a3@5", O: "~@2 [a2,e3,a3,c#4,e4] ~", P: "~ [b2,b3]",
  Q: "[~@8 [a2,a3]@4 [b2,b3]@3 [b2,b3]@4 [a2,a3] ~@4 [a2,a3]@4 ~@4]/2", R: "~@2 [a2,a3] [d3,d4]",
  S: "[d3,d4] ~ [c#3,c#4] [b2,b3]", T: "[b2,b3] [a2,a3]", U: "~@2 [f#2,f#3] ~", V: "~ [a2,e3,a3,c#4,e4]",
  W: "~@2 [d3,a3,d4,g4] g4", X: "~ a3 [d3,a3,d4,g4] g4", Y: "~@7 [g#2,g#3]@5 [f#2,f#3]@4",
  Z: "g4@4 [a3,g4]@3 g4 [d3,a3,d4,f#4]@4 ~@4", AA: "~@2 [d3,a3,d4,f#4] ~", AB: "~ a3 [d3,a3,d4,f#4] ~",
  AC: "[~ [a2,e3,a3,c#4,e4]@9]/5", // A
})).s("gm_electric_guitar_muted").gain(0.35).pan(1)

// chords · acoustic guitar nylon · "Nylon Gtr"
const acoustic_guitar_nylon = note(`<
  ~ A@4 B@4 C@2 D@4 E@4 F@2 G D@5 E@4 F@2 G D G H F I D I D@6 E@4 F@2 G D G H F I D I D J D@4 E@4 F@2 G D G H F I D I D
  J D@4 E@4 F@2 G D G H F I D I D J G H F I D I D J G H F I D I F G K@5 ~
>`.pickRestart({
  A: "[~ [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]@2 ~]/4", // F#m
  B: "[~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 ~]/4", // D
  C: "[~ [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]]/2", // E
  D: "[a2,e3,a3,c#4,e4]@4 [a2,e3,a3,c#4,e4]@7 [c#4,e4] [a2,e3,a3,c#4,e4]@4", // A C#m A
  E: "[f#2,c#3,f#3,a3,c#4,f#4]@4 [f#2,c#3,f#3,a3,c#4,f#4]@7 [a3,c#4,f#4] [f#2,c#3,f#3,a3,c#4,f#4]@4", // F#m
  F: "[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@7 [d4,f#4] [d3,a3,d4,f#4]@4", // D
  G: "[e2,b2,e3,g#3,b3,e4]@4 [e2,b2,e3,g#3,b3,e4]@7 [g#3,b3,e4] [e2,b2,e3,g#3,b3,e4]@4", // E
  H: "[g#3,b3,e4]@4 [g#3,b3,e4]@3 [e2,b2,e3,g#3,b3,e4]@4 [g#3,b3,e4] [e2,b2,e3,g#3,b3,e4]@4, [e2,b2,e3]@7 ~@9", // E E5
  I: "[d4,f#4]@4 [d4,f#4]@3 [d3,a3,d4,f#4]@4 [d4,f#4] [d3,a3,d4,f#4]@4, [d3,a3]@7 ~@9", // D D5
  J: "[a3,c#4,e4]@4 [a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@4 [e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@4, [a2,e3]@7 ~@9", // A A5
  K: "[a2,e3,a3,c#4,e4]/5", // A
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.1)

// bass · fretless bass · "Fretless E.Bass"
const bass = note(`<
  A B@3 C D@3 E F G H I@2 A J K J C L E M N I O I A J K J C L E P Q R S L T I U I O I O I A J K J C V E W X R S L T I T
  I O I O I A J K J C L E P Q R S L T I U I O I O I A J K J C V E W X R S L T I T I Y R S L T I T I Y R S L T I Z E M
  AA@5 ~
>`.pickRestart({
  A: "a2@7 ~ g#2@7 ~", B: "f#2/3", C: "f#2@7 ~ e2@7 ~", D: "d2/3", E: "d2@7 ~ c#2@7 ~", F: "b1", G: "a1@7 ~ g#1@7 ~",
  H: "a1@7 ~ e2@7 ~", I: "a2@7 ~ e2@7 ~", J: "f#2@7 ~ c#2@7 ~", K: "f#2@7 ~ c#2@4 e2@4", L: "d2@7 ~ a1@7 ~",
  M: "b1@7 ~ a1@4 g#1@4", N: "a1@7 ~ e2@4 g#2@4", O: "a2@7 ~ e2@4 g#2@4", P: "b1@7 ~ e2@4 g#2@4",
  Q: "a2@7 ~ e2@4 c#2@4", R: "e2@7 ~ b1@7 ~", S: "e2@7 ~ b1@4 c#2@4", T: "d2@7 ~ f#2@4 g#2@4", U: "d2@7 ~ a2@4 g#2@4",
  V: "d2@7 ~ a1@4 c#2@4", W: "b1@7 ~ c#2@4 b1@4", X: "a1@7 ~ c#2@4 d2@4", Y: "a2@6 ~ g#2@5 f#2@4", Z: "d2@7 ~ e2@7 ~",
  AA: "a1/5",
})).s("gm_fretless_bass").gain(0.51).pan(0.6)

// other · electric guitar jazz · "Jazz Gtr"
const electric_guitar_jazz = note("<~ A B C D E F D@2 G E ~@114>".pickRestart({
  A: "a3@3 f#4@2 a3@3 f#4@3 a3@2 f#4@3", B: "c#4@3 a4@2 c#4@3 a4@3 c#4@2 a4@3",
  C: "f#4@3 c#5@2 f#4@3 c#5@3 f#4@2 c#5@3", D: "a4@3 f#5@2 a4@3 f#5@3 a4@2 f#5@3",
  E: "f#4@3 d5@2 f#4@3 d5@3 f#4@2 d5@3", F: "g4@3 e5@2 g4@3 e5@3 g4@2 e5@3", G: "g#4@3 e5@2 g#4@3 e5@3 g#4@2 e5@3",
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.3)

// other · acoustic guitar nylon · "Nylon Lead"
const acoustic_guitar_nylon_2 = note("<~ A B C D E F D@2 G E ~@114>".pickRestart({
  A: "f#3@3 a3@2 f#3@3 a3@3 f#3@2 a3@3", B: "a3@3 c#4@2 a3@3 c#4@3 a3@2 c#4@3",
  C: "c#4@3 f#4@2 c#4@3 f#4@3 c#4@2 f#4@3", D: "f#4@3 a4@2 f#4@3 a4@3 f#4@2 a4@3",
  E: "d4@3 f#4@2 d4@3 f#4@3 d4@2 f#4@3", F: "e4@3 g4@2 e4@3 g4@3 e4@2 g4@3", G: "e4@3 g#4@2 e4@3 g#4@3 e4@2 g#4@3",
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@11 [x!2]!108 x ~@5>").gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A@23 B A@5 B A B A@11 B A@5 B A B A@8 B A@8 B A B A@11 B A@5 B A B@2 A@3 B A B C B@5 A@2 D ~@6
>`.pickRestart({
  A: "x ~@2 x ~@3 x!2 ~@2 x ~@3 x", B: "x ~@2 x ~@3 x!2 ~@6 x", C: "~@3 x!2 ~@3 x ~@6 x", D: "x ~@2 x ~@3 x!2 ~@7",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct(`<
  ~@11 A@23 B A@5 B A B A@11 B A@5 B A B A@8 B A@8 B A B A@11 B A@5 B A B@2 A@3 B A B C B@5 A@2 B D ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~@3", C: "x ~@6 x ~@3 x!2 ~@3", D: "x",
})).gain(0.45)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@11 [~ x ~ x]!108 ~@6>").gain(0.51)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@35 A@8 B ~@11 A@28 B ~@11 A@24 B ~@5>".pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x",
})).gain(1.73)

stack(
  electric_guitar_muted, acoustic_guitar_nylon, bass, electric_guitar_jazz, acoustic_guitar_nylon_2, kick, snare, clap,
  pedal_hat, cabasa
)

More by The Beatles