Strudelify

'Til There Was You

The Beatles

KeyF majorTempo110 bpm
0:00/0:00
// 'Til There Was You — The Beatles
// 110 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 5 "Fill strings" named as a string part, played on string ensemble 1 (its pad warm patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 68 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): Les Paul, Solo.
setcpm(110/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 · electric bass finger · "Bass"
const bass = note(`<
  A B C D E F G H I J K L M F G H I J K L N O P Q R S T U V W X Y Z AA AB AC AD F G H I J K L N O P Q R S T U V W X Y Z
  AA AB AC AD AE AF AG AH AI AJ ~
>`.pickRestart({
  A: "~@5 c2 d2 e2", B: "f1 gb1", C: "g1 c2", D: "f1@8 gb1@7 ~", E: "~ g1@3 c2@3 ~", F: "f1@15 ~", G: "gb1@15 ~",
  H: "g1@11 ~ g1@3 ~", I: "bb1@11 ~ bb1@2 ~@2", J: "f1@2 ~ f1 a1@2 ab1@2", K: "g1@4 ~@2 g1@2 c2@3 d2@3 e2@2",
  L: "f2@5 ~ f2 ~ f2@4 ~@2 f2@2", M: "g1@4 ~@2 g1@2 c2@2 ~ d2@2 e2@2 ~", N: "f1@6 f1@2 g1@4 a1@3 ~", O: "bb1@7 ~",
  P: "bb1@11 ~ bb1@4", Q: "f1@6 e1 f1", R: "gb1@11 ~ gb1@3 ~", S: "g1@7 ~", T: "g1@3 a1 bb1@4", U: "~ c2@13 ~@2",
  V: "c2@5 ~ c2 ~", W: "f2@3 f2", X: "gb1@6 gb1 a1", Y: "g1@12 g1@3 ~", Z: "bb1@6 db2@2 f2@2 db2@2 bb1@3 ~",
  AA: "f1@6 f1@2 a1@4 ab1@3 ~", AB: "g1@6 g1@2 c2@3 d2@3 e2@2", AC: "f2@3 f2 f2@3 f2", AD: "g2@3 d2 c2@3 c2",
  AE: "c2@3 c2@2 c2@3 b1 ~@2 b1@2 b1@3", AF: "c2@12 c2@3 ~", AG: "f1@3 a1@3 c2@2", AH: "ab1@3 db2@3 eb2@2", AI: "f1",
  AJ: "f1 ~ f1@2",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · acoustic guitar nylon · "Martin"
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F G H I J K L E F G H I J K M N O P Q R S T@2 U F V@2 W X Y Z AA AB AC AD AE AF AG AH N O P Q R S T@2 U F
  V@2 W X Y AI AJ AK AL AM AN AO ~
>`.pickRestart({
  A: "~@2 c5@2 ~ a4@3 gb4@7 ~", B: "g4@3 bb4@3 g4@2 c4@3 d4@3 e4@2", C: "f4 ~ c5 ~@2 a4 ~@2 gb4@7 ~",
  D: "~@2 [g4,bb4]@2 ~ [g4,bb4]@2 ~ c4@7 ~", E: "~@2 c5@3 a4@3 f4@8", F: "~@2 c5@3 a4@3 gb4@6 ~@2",
  G: "[g4,bb4,d5]@3 [g4,bb4,d5]", H: "[bb4,db5,f5]@12 [bb4,db5,f5]@3 ~",
  I: "f4@4 [a4,c5]@2 f4@2 [e4,a4]@3 ~ [eb4,ab4,b4]@2 ~@2, ~@8 c5 ~@7", J: "[d4,g4,bb4]@6 ~@2 c4@3 d4@3 e4@2",
  K: "f4@5 ~@2 f4", L: "g4@3 bb4@3 g4@2 c4@3 d4@3 e4 ~",
  M: "[f4,a4,c5]@2 [f4,a4,c5] [f4,a4,c5,eb5]@3 [f4,a4,c5,eb5]@2, eb5@3 ~@5", // F F7
  N: "~@7 d5, bb4, ~@2 d5@5 ~, ~@3 bb5@5, ~@5 f5@3", O: "~@7 db5, bb4, ~@2 db5@5 ~, ~@3 bb5@5, ~@5 f5@3",
  P: "~@7 a4, f4, ~@2 a4@5 ~, ~@3 f5@5, ~@5 c5@3",
  Q: "~@12 d5@2 a4 ~, gb4@15 ~, ~@2 a4@5 ~, ~@3 d5@3 ~@2, ~@10 gb5@5 ~",
  R: "[g4,bb4,d5]@3 [g4,bb4,d5]@2 [bb4,d5]@3 [gb4,bb4,d5]@3 [gb4,bb4,d5]@2 [gb4,bb4,d5]@3, ~@5 g4@11", // Gm Bb Gbaug
  S: "[f4,bb4,d5]@3 ~ [g4,b4,d5,f5]@4", T: "[[c5,e5,g5]@15 ~ [c5,ab5]@14 ~@2, ~@15 e5@15 ~@2]/2",
  U: "~@2 f5 ~ e5 f5 e5 ~ d5@6 ~@2, ~@7 c5@2 ~@7",
  V: "[[g4,bb4,d5]@12 [g4,bb4,d5]@3 ~ [g4,db5,f5]@12 [g4,bb4,db5,f5]@2 ~@2, ~@15 bb4@13 ~@4]/2", // Gm Gm7b5
  W: "f4@4 [c5,f5]@2 f4@2 [e4,a4,c5]@3 ~ [eb4,ab4,b4]@2 ~@2", // F5 Am Abm
  X: "[g4,bb4]@5 ~@3 [c4,a4,c5]@3 b4 ~@2 [e4,g4,bb4]@2, d4@7 ~@4 [d4,ab4]@5", // Gm F Edim Ddim
  Y: "f4@3 ~@4 a4, a4@4 a4@3 ~, ~@3 f4@5, ~@11 c5@5", Z: "~@3 bb4 ~@2 a5 [g4,bb5], g4@4 c4@3 ~, ~@11 e4@5",
  AA: "c6 ~ f6@2 e6 [e6,f6] c6@2 d6@4 a5@2 bb5@2", AB: "c6@2 a5@3 g5@2 ~ gb5@2 ~ g5@2 ~ a5 ~",
  AC: "bb5@5 ~ bb5 ~ bb5@2 ~ c6@2 ~ db6 ~", AD: "db6@4 eb6 ~@3 c6@3 ~ f5@2 g5 ~", AE: "a5@5 ~ a5 ~ e6@3 ~ eb6@3 ~",
  AF: "d6@3 d5@2 ~ e5 ~ f5@2 ~ [a5,c6]@2 ~ [bb5,e6] ~", AG: "[a5,f6]@13 ~@3", AH: "[a5,eb6]@7 ~",
  AI: "~@3 bb4 ~@3 g4, g4@4 c4@3 ~, ~@11 e4@5",
  AJ: "[g4,c5,e5]@3 [g4,c5,e5]@2 [g4,c5,e5]@2 ~ [gb4,b4,eb5] ~@2 [gb4,b4,eb5]@2 [gb4,b4,eb5]@2 ~", // C B
  AK: "[g4,c5,e5]@9 ~@3 [c5,e5]@3 ~, ~@12 g4 ~@3", AL: "~ f4@3 ~ f5@2 d5@3 f5@2 d5@2 ~@2",
  AM: "~@4 eb5@3 db5@2 ~ eb5@2 db5 ~@3",
  AN: "[f4,a4,c5]@2 ~ [f4,a4,c5] ~@2 [f4,a4,c5] ~ [e4,ab4,b4]@2 ~ [e4,ab4,b4]@2 ~ [e4,ab4,b4] ~", // F E
  AO: "[f4,a4,c5] ~@3 [f4,g4,a4,c5,eb5]@4", // F F7
})).s("gm_acoustic_guitar_nylon").gain(0.31)

// chords · string ensemble 1 · "Fill strings"
const string_ensemble_1 = note(`<
  ~ A B C D E F G H I J K L E F G H I J K M N O@2 P Q R S T E F G H I J K L E F G H I J K M N O@2 P Q R S T E F G H I J
  K L U@2 K V W X ~
>`.pickRestart({
  A: "[f3,a3,c4] [gb3,a3,c4]", B: "[g3,bb3,d4] [e3,g3,c4]", C: "[f3,a3,c4]@7 [gb3,a3,c4]@9",
  D: "[g3,bb3]@4 ~@3 [e3,g3,bb3,e4]@6 ~@3, d4@7 ~@9", E: "[f3,a3,c4]", F: "[gb3,a3,c4]", G: "[g3,bb3,d4]",
  H: "[bb3,db4,f4]", I: "[f3,a3,c4]@2 [a3,c4] [ab3,b3]", J: "[g3,bb3]@2 c4 bb3, ~ [g3,e4]", K: "[a3,c4,f4]",
  L: "[bb3,d4,g4]@7 [g3,c4,e4]@8 ~", M: "[a3,c4,eb4,f4]@15 ~", N: "[bb3,d4,f4]", O: "[[bb3,db4,f4]@15 [f3,a3,c4]@17]/2",
  P: "[gb3,a3,d4]@15 ~", Q: "[g3,bb3,d4]@7 ~ [bb3,d4]@8, ~@7 gb3@9", R: "[f3,bb3,d4]@8 [g3,b3,d4,f4]@7 ~",
  S: "~ g4@15, [c4,e4]", T: "[c4,e4,ab4]@7 ~", U: "[[g3,c4,e4]@7 ~ [b3,eb4]@7 [g3,c4,e4]@17, ~@7 gb3@8 ~@17]/2",
  V: "[f3,ab3,db4,eb4,f4]", W: "[f3,a3,c4] [e3,ab3,b3]", X: "[f3,a3,c4]@3 ~@13",
})).s("gm_string_ensemble_1").gain(0.25)

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

// drums · rim
const rim = s("rim").struct("<[~@3 x] ~@67>").gain(0.41)

// drums · snare
const snare = s("sd").struct("<~ A@35 B A@7 C A@15 D A@4 E F ~>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~ x ~ x!2 ~ x ~", C: "x ~ x ~ x!2 ~ x", D: "~@4 x ~ x ~@3 x!3 ~ x ~",
  E: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", F: "x",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<A ~@11 B ~@7 C ~@7 C ~@7 B ~@7 D ~@7 C ~@13 E ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~@3 x", C: "~@5 x!3", D: "~@6 x!2", E: "~@3 x!2 ~@11",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<[~@3 x] [x!8]!64 ~@3>").gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@11 A ~@7 B ~@7 B ~@7 A ~@7 C ~@7 B ~@9 D ~@3 E ~>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@6 x!3 ~@7", C: "~@5 x ~@2", D: "~@6 x!2", E: "~@3 x ~@12",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<[~@5 x ~@2] ~@64 [x!2]!2 ~>").gain(0.41)

// drums · crash
const crash = s("cr").struct("<A ~@20 B ~@15 B ~@7 B ~@6 C B ~@7 B ~ B ~@2 C ~>".pickRestart({
  A: "~@3 x", B: "x", C: "~ x",
})).gain(0.41)

stack(bass, acoustic_guitar_nylon, string_ensemble_1, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, crash)

More by The Beatles