Strudelify

Only You (And You Alone)

Ringo Starr

KeyG majorTempo91 bpm
0:00/0:00
// Only You (And You Alone) — Ringo Starr
// 91 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 50 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(91/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 · "FRETLESS"
const bass = note(`<
  A B C D E F G H I J K L M@3 N A O C D E F G P I Q K L R@3 S T U V W X Y Z AA AB AC AD AE AF AG@2 AH AI@2
>`.pickRestart({
  A: "g2@12 f#2@7 ~@2 f#2@2 ~", B: "e2@8 ~ e2@3 d2@8 ~ d2@2 ~", C: "c2@6 ~@3 c2 ~@2 c2@11 ~",
  D: "g1@7 ~@2 g1@2 ~ d2@6 d1@6", E: "g1@8 ~ g1@3 f#1@6 f#2@3 f#1@2 ~", F: "e1@6 e2@5 ~ d2@7 ~@2 d2@2 ~",
  G: "c2@7 ~@2 c2 ~@2 c2@11 ~", H: "g1@7 ~@2 g1@2 ~ d2@4 ~@2 d2@3 c#2@3", I: "c2@6 ~@3 c2 ~@2 c2@5 ~ c2@5 ~",
  J: "d2@7 ~@2 d2 ~@2 d2@6 d1@3 f#1@2 ~", K: "g1@7 ~@2 g1 ~@2 g1@4 ~@2 g1@3 b1@3",
  L: "c2@6 ~@3 c2 ~@2 c2@4 ~@2 c2@2 ~ b1@2 ~",
  M: "[a1@7 ~@2 a1 ~@2 a1@5 ~ d2@13 ~@2 d1 ~@2 d1@6 d2@3 g1@10 ~@2 g1 ~@2 g1@10 ~@2]/3", N: "g1@8 ~ g1 ~@2 g1@11 ~",
  O: "e2@7 ~@2 e2@3 d2@8 ~ d2@2 ~", P: "g1@7 ~@2 g1@3 d2@4 ~@2 d2@3 c#2@3", Q: "d2@7 ~@2 d2 ~@2 d2@6 d1@3 f#1 ~@2",
  R: "[a1@6 ~@3 a1 ~@2 a1@5 ~ d2@13 ~@2 d1 ~@2 d1@6 d2@3 g1@10 ~@2 g1 ~@2 g1@10 ~@2]/3",
  S: "c3@3 g2@3 c2@2 ~ f2@9 f1@6", T: "a#1@6 ~@3 a#1@3 a1@8 ~ a1@3", U: "g1@8 ~ g1@2 ~ f1@8 ~ f1@3",
  V: "d#1@7 ~@2 d#1 ~@2 d#1@4 ~@2 d#1@5 ~", W: "a#1@7 ~@2 a#1@3 f1@12", X: "a#1@7 ~@2 a#1@3 a1@5 ~ a1@5 ~",
  Y: "g1@7 ~@2 g1@2 ~ f1@4 ~@2 f1@4 ~@2", Z: "d#1@7 ~@2 d#1 ~@2 d#1@12", AA: "a#1@8 ~ a#1@3 f1@8 ~ f1@3",
  AB: "f1@8 ~ f1 ~@2 f1@4 ~@2 f1@6", AC: "d#2@7 ~@2 d#2 ~@2 d#2@5 ~ d#2@6", AD: "f2@8 ~ f1 ~@2 f1@5 ~ f1@3 a1@3",
  AE: "a#1@7 ~@2 a#1 ~@2 a#1@5 ~ a#1@3 d2@3", AF: "d#2@7 ~@2 d#2 ~@2 d#2@3 a#1@3 d#1@3 a#1@3",
  AG: "[c2@7 ~@2 c2 ~@2 c2@6 f1@16 ~@2 f1@4 ~@2 f1@5 ~]/2", AH: "~ a#1@8 ~ a#1 ~@3 a#1@10", AI: "[~@2 a#1@13 ~@9]/2",
})).s("gm_fretless_bass").gain(0.39)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D A E F G H I J K L@2 M@2 A E N G A E O P H Q J K R@2 S T U V W X U V Y Z AA AB AC AD AE AF@2 AG@3
>`.pickRestart({
  A: "g3 f#3", B: "e3@6 d3@5 ~", C: "~@9 g3@3 c3@11 ~, c3 ~, ~ e3 ~@2", D: "g3 b3 d4@2 d3 ~@2 d3, ~@5 f#3@3, ~@3 a3",
  E: "e3 d3", F: "c3@2 ~ g3 c3@4, ~ e3 ~@2", G: "g3 ~ d4@2 d3 ~@2 d3, ~ b3@3 ~ f#3@3, ~@3 a3", H: "c3@3 c3 c3@4",
  I: "d3@8 ~ d3 ~@2 d3@6 ~@3 f#3@3, ~@3 d3", J: "g3!2", K: "c3@3 ~@4 b2, ~@3 c3@3 c3@2, ~@5 e3@3",
  L: "[a2@9 a2@9 d3@18 d2@11 ~]/2", M: "~@2 d3 ~@4 d3, g2@3 ~@2 d3@2 ~, ~ b2@2 g3@5, ~@3 b2",
  N: "~ c3, c3 ~, ~ e3 ~@2, ~@3 g3@5", O: "~@3 g3 c3@4, c3 ~, ~ e3 ~@2",
  P: "g3@3 ~@3 d4@6 d3@2 ~@7 d3@3, ~ b3@3 ~ f#3@3, ~@3 a3", Q: "d3@3 d3 d3@2 ~ f#3, ~@3 d3",
  R: "[a2@9 a2@9 ~@18 d2@11 ~, ~@18 d3@29 ~]/2", S: "~@2 d3 ~@4 g2, g2@3 ~@2 d3@3, ~ b2@2 g3@5, ~@3 b2",
  T: "[c2,c3] f2", U: "a#3@3 a#3 a3@3 a3", V: "g3@3 g3 f3@3 f3", W: "d#3 ~@2 g3 d#3@4, ~ a#2@7, ~ d#3 ~@2",
  X: "~@3 a#3 ~@3 c4, a#3@3 ~@3 a3@2, ~ f3 f3@2", Y: "~@3 g3 a#3@4, d#3!2 ~@2, ~ a#2@3 ~@4",
  Z: "~ a#3 ~ f2, a#3@2 ~@3 c3@3, ~ f3@3 f3@2 ~@2", AA: "[f2,f3]", AB: "d#3@3 d#3 d#3@3 d#3",
  AC: "f3@3 f3 f3@2 ~ a2, ~@3 f2", AD: "a#2", AE: "~@7 d3, d#2, ~@3 d#3", AF: "[c3 c3@2 c3@2 c3 [f2,f3]@6 [f2,f3]@4]/2",
  AG: "[~@10 f3@3 ~ g3@3 ~@11 a#2@27 ~@17, ~ a#2@13 ~@6 f3@34 ~@18, ~@7 d3@6 ~@4 a#3@38 ~@17, ~@24 d3@31 ~@17]/3",
})).s("gm_piano").gain(0.36)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<A B@3 C@4 D E F G H@4 I@4 J K@3 L M F N O@3 P Q@4 R@4 S T U V W X@2 Y@3>".pickRestart({
  A: "b4@2 ~ b4@3 b4@3 b4@3 c5@3 ~@6 g4@3, ~@15 b4@8 ~, ~@18 a4@5 ~",
  B: "[~ g4!3 f#4 g4 f#4 ~@7 b4 b4@5 a4@4, ~@7 e4@8 ~@9, ~@13 c5@2 ~@9]/3",
  C: "[b4@2 ~ b4@3 b4@3 b4@3 c5@3 b4@3 a4@3 g4@5 ~ g4@3 g4@3 g4@3 f#4@3 ~@3 f#4@3 ~@21 b4@3 b4@15 a4@12, ~@13 g4@2 e4@8 ~@9, ~@21 c5@2 ~@9]/4",
  D: "~@2 [e4,c5]!2 ~@3 [e4,c5], ~@4 [e4,c5]@3 ~, ~@3 [d4,b4]", E: "b4@3 [c4,a4]@5 ~ [c4,a4]@15, d4 ~@23",
  F: "~@2 [d4,b4]!2 ~@3 [d4,b4], ~@4 [d4,b4]@3 ~, ~@3 [c4,a4]", G: "[c4,a4] [c4,e4,g4]@2 [c4,e4,g4]@5, e4 ~@23",
  H: "[c5 ~@2 [d4,b4]@6 ~@6 g4@3 [d4,f#4,a4]@18 c5 ~@2 [d4,b4]@6 [b3,g4]@48 ~@3, e4@3 [c4,a4]@3 ~@6 e4@3 ~@17]/4", // G D G Em F
  I: "[b4@2 ~ b4@3 b4@3 b4@3 c5@3 ~@3 a4@3 g4@6 g4@3 g4@3 g4@3 f#4@3 ~@3 f#4@3 ~@18 c5@3 b4 ~@2 b4@15 a4@12, ~@15 b4@6 ~@18 g4@6 e4@22 ~@29]/4",
  J: "b4@2 ~ b4@3 b4@3 b4@3 c5@3 ~@3 a4@3 g4@3, ~@5 b4@2 ~",
  K: "[~ g4!3 f#4 ~ f#4 e4@6 ~ b4 ~@5 a4@4, ~@5 g4@2 ~@6 c5@2 b4@9]/3",
  L: "~@6 [e4,c5] ~@2 [e4,c5]@3 ~@9 [e4,c5]@3, ~@4 [e4,c5]@3 ~, ~@3 [d4,b4]", // C G
  M: "d4 ~@2 [c4,a4]@5 ~ [c4,a4]@15, b4 ~@2", N: "[c4,a4]@2 ~ [c4,e4,g4]@6 [c4,e4,g4]@15, e4 ~@23",
  O: "[c5 ~@2 [d4,b4]@6 ~@6 g4@3 [d4,f#4,a4]@18 c5 ~@2 [d4,b4]@6 [b3,g4]@27, e4 [c4,a4] ~@2 e4 ~@3]/3", // G D G Em F
  P: "~ a#3 d#4 g4 a4 a#4 c5 d#5",
  Q: "[[a#4,d5]@2 ~ [a#4,d5]@3 [a#4,d5]@3 [a#4,d5]@3 c5@2 ~@4 [a4,c5]@3 [g4,a#4]@12 [g4,a#4]@3 ~@6 [f4,a4]@3 [d#4,g4]@18 a#4@3 [a#4,d5]@3 [a#4,d5]@12 [a4,c5]@15, ~@4 d#5@3 ~@6 [g4,a#4]@2 ~@17, ~@5 [a#4,d5]@2 ~@5 [f4,a4]@2 ~@18]/4", // A# Am Gm F D# A# Am Gm …
  R: "[[a#4,d5]@2 ~ [a#4,d5]@6 [a#4,d5]@3 c5@2 ~@4 [a4,c5]@3 [g4,a#4]@12 [g4,a#4]@3 ~@6 [f4,a4]@3 [d#4,g4]@17 ~ [a#4,d5]@3 [a#4,d5]@3 [a#4,d5]@15 [a4,c5]@12, ~@4 d#5@3 ~@6 [g4,a#4]@2 ~@17, ~@5 [a#4,d5]@2 ~@5 [f4,a4]@2 ~@18]/4", // A# Am Gm F D# A# Am Gm …
  S: "~@7 c5, c4, ~ f4@7, ~ a4 a4@2, ~@3 c5@2 c5 f5@2",
  T: "~@2 d#5 [g4,d#5] ~@3 [g4,d#5], ~@6 g4 ~@5 [g4,d#5]@9 ~@3, ~@3 [f4,d5]", U: "~ [a4,c5]@2 [a4,c5]@5, [f4,d5]@3 ~@5",
  V: "~@2 [f4,d5]!2 ~@3 [f4,d5], ~@4 [f4,d5]@3 ~, ~@3 [d#4,c5]", W: "c5@2 ~ [g4,a#4]@6 [g4,a#4]@15, d#4@3 ~@5",
  X: "[d#5@3 [g4,a#4,d5]@6 ~@6 a#4@3 [f4,a4,c5]@17 ~ [g4,d#5]@6 [f4,d5]@6, g4@2 ~@7 [d#4,g4,c5]@9 ~@30]/2", // Gm F Cm Dm Cm
  Y: "[~ a#4@26 ~ [d5,a#5]@27 ~@17, d4@3 ~@5]/3", // Gm
})).s("gm_piano").gain(0.36).pan(0.6)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A B C@2 D E@3 F G H@7 I@7 J@4 K@3 L@4 M@6 N@4 O@4 ~>".pickRestart({
  A: "[g3,b3] [f#3,a3], d3@23 ~", B: "[e3,g3] [d3,f#3]", C: "[[c3,e3]@23 [g3,b3]@12 [f#3,a3]@12 ~]/2",
  D: "[g3,b3] [f#3,a3]", E: "[[e3,g3]@12 f#3@11 [c3,e3]@24 [g3,b3]@12 ~ [f#3,a3]@12, ~@4 d3@3 ~@17]/3", F: "[g3,c4]",
  G: "f#3@17 f#3@6 g3, d4@23 ~",
  H: "[d4@23 ~@42 d4@18 ~ c4@11 [g3,b3]@47 ~@2 b3@12 [f#3,a3]@11 [e3,g3,b3], ~@23 c4@42 ~@103, ~@23 g3@25 a3@47 ~@48 g3@12 ~@13, ~@35 e3@30 f#3@30 ~@48 d3@24 ~]/7", // G F#m Em
  I: "[~@11 [d3,f#3,a3]@12 [e3,c4]@24 b3@12 [f#3,a3]@12 ~ g3@11 [f#3,a3]@12 [e3,g3]@12 [d3,f#3]@12 [c3,e3]@24 [g3,b3]@12 [f#3,a3]@12 ~, ~@23 g3@36 ~@12 b3@12 ~@85, ~@47 d3@48 ~@48 d3@24 ~]/7", // D C F#m Em D C G F#m
  J: "[[e3,g3,c4]@23 [f#3,a3]@17 ~@2 f#3@5 [g3,b3]@24 ~@7 e3@17 ~, ~@23 d3@54 ~@19, ~@41 a3@6 ~@24 c4@23 ~@2, ~@36 g3@11 ~]/4", // C F#m G
  K: "[[e3,a3,c4]@17 ~@30 g3@23 ~@2, ~@17 [f#3,a3]@30 b3@21 ~@4, ~@6 d4@17 ~]/3", // Am F#m
  L: "[[g3,a#3,d#4]@11 [f3,a3]@10 ~@3 [a#3,d4]@12 [a3,c4]@11 ~ [g3,a#3,d4]@12 [f3,a3,c4]@12 [d#3,g3,a#3,d#4]@22 ~@2, c4@24 f3@23 ~@49, ~@11 f4@62 ~@23]/4", // D# F A# Am Gm F D#
  M: "[[a#3,d4]@11 ~ c4@11 ~ a#3@11 [a3,c4,d#4]@12 [g3,a#3,d4]@12 ~ f3@8 ~@15 g4@12 a#3@12 c4@12 ~@7 f3@2 a3@3 c4@2 d4 ~ f4@3 a4@3 c5@3, f4@84 ~@11 f4@25 ~@24, ~@11 a3@12 d4@12 ~@24 a3@9 ~@4 [d#3,g3]@24 ~@23 f1@25, ~@60 c4@17 a#3@16 ~@2 d4@10 ~@2 a3@8 ~@4 f2@23 ~@2]/6", // A# Adim Gm D#
  N: "[[g4,d#5]@21 ~@2 d5@8 ~ [a4,c5]@14 ~ d5@24 ~@16 d#5@3 d5@6, a#4@31 ~@16 a#4@38 ~@11, ~@23 f4@46 ~@2 d#5@13 ~@12, ~@72 g4@17 ~@7]/4", // Cm Am
  O: "[~@4 a#4@12 ~@33 a#3@45 ~@2, c5@49 d5@21 ~@26, d#5@17 a4@28 ~@3 a#4@44 ~@4, ~@6 f4@25 ~, ~@49 d4@43 ~@4]/4",
})).s("gm_string_ensemble_2").gain(0.3).pan(0.2)

// drums · kick
const kick = s("bd").struct("<A B A@6 C B A B D E A F A@2 B A@9 G ~ A@7 C H B I A@3 J A K L M ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!2", C: "x ~@3 x ~@2 x", D: "x ~@2 x ~@2 x ~", E: "~@3 x!2 ~@3", F: "x ~@4 x ~@6",
  G: "x ~@2 x ~ x ~@2", H: "x ~@2 x!2 ~@2 x", I: "x ~@6 x ~@2 x ~@4 x!2 ~@7", J: "x ~@8 x ~@2 x ~@3 x ~@7",
  K: "~@3 x!2 ~ x ~", L: "~ x ~@8 x ~@3 x ~@9", M: "x!2 ~@4",
})).gain(0.22)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A ~@9 A ~@5 B A ~@2 C ~@7 D ~@6 D A ~@12>".pickRestart({
  A: "~@3 x ~@4", B: "~@2 x", C: "~@16 x ~@4 x ~@2", D: "~@7 x",
})).gain(0.16)

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

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@7 A ~@5 B ~@10 C ~ A ~@7>".pickRestart({
  A: "~@7 x", B: "~ x", C: "~@6 x!2",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<A@3 B A@3 B C D E F G ~ A H I J K C L F@2 M D M C M N ~ F O ~@18>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "x ~ x!5 ~", D: "x!8", E: "x ~ x!3 ~ x ~", F: "x ~ x!6", G: "~ x!5 ~@2",
  H: "~ x ~@2", I: "~ x!6 ~", J: "x!2 ~ x!5", K: "x ~ x ~ x!3 ~", L: "x!5 ~ x ~", M: "x!7 ~", N: "x!4 ~ x ~@2",
  O: "x!5 ~@3",
})).gain(0.19)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@8 A ~ B A ~@4 C ~ D A E A@2 ~@3 F ~@3 A ~@19>".pickRestart({
  A: "~ x ~@6", B: "~ x ~@3 x ~ x", C: "~@7 x", D: "~ x ~ x ~@3 x", E: "~@5 x ~ x", F: "~ x ~@5 x",
})).gain(0.13)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@13 B ~@10 C ~ D ~@7>".pickRestart({
  A: "~@15 x ~@2 x!2 ~@4", B: "~@3 x ~@4", C: "~ x!2 ~ x ~@3", D: "~@7 x",
})).gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@3 A ~@4 B ~@4 C ~ A ~@5 A ~ A ~@22>".pickRestart({
  A: "~@7 x", B: "x ~@2 x", C: "~ x ~@2",
})).gain(0.19)

// drums · high tom
const high_tom = s("ht").struct("<~@15 [~@12 x!2 ~@10] ~@34>").gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@11 B ~@2 C ~@9 A ~@3 B@2 D ~@2>".pickRestart({
  A: "x", B: "~@3 x", C: "~@6 x!2", D: "~ x ~@22",
})).gain(0.22)

// drums · ride
const ride = s("rd").struct("<~@32 A B C D E F@2 G H I J K J L ~@4>".pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@3 x ~", B: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2", C: "x!5 ~ x ~",
  D: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~", E: "x!8", F: "x ~ x!3 ~ x!2", G: "x!5 ~ x!2", H: "x",
  I: "~ x!4 ~ x ~", J: "x!7 ~", K: "x ~@5 x ~@2 x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2", L: "x!3 ~",
})).gain(0.22)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@32 A ~ A ~@2 B C D ~ A ~ E ~@4 F ~>".pickRestart({
  A: "~@5 x ~ x", B: "~@3 x ~@11 x!2 ~@7", C: "~ x ~@3 x ~@2", D: "~@5 x ~@2", E: "~ x ~@6", F: "~ x ~@4",
})).gain(0.16)

stack(
  bass, piano, piano_2, string_ensemble_2, kick, kick_soft, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat,
  high_tom, crash, ride, ride_soft
)

More by Ringo Starr