Strudelify

If I Needed Someone

The Beatles

KeyG majorTempo122 bpm
0:00/0:00
// If I Needed Someone — The Beatles
// 122 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 · "Bass"
const bass = note("<~@2 A@18 B C D E F G H I A@24 B C D E F G H I A@12 J ~>".pickRestart({
  A: "a2@4 g2@2 a2 ~@3 b2 ~ e3@3 ~", B: "e2@3 ~ e2 ~ e2@3 ~ e2@3 ~ e2 ~", C: "f#2@3 ~ f#2@3 ~ f#2@2 c#2@2 f#2@2 c#2 ~",
  D: "f#2@3 ~ f#2@4 ~@2 f#2@2 c#3 ~ c3@2", E: "b2@3 ~ b2@3 ~ f#2@3 ~ f#2@2 ~@2",
  F: "e2@3 ~ e2@3 ~ e2 ~ e2 ~ e2@2 c#2@2", G: "f#2@3 ~ f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2@2",
  H: "b2@2 ~@2 b2@2 ~@2 b2 ~ b2@3 ~@3", I: "~ e2@2 ~ e2@2 ~@2 e2 ~ e2 ~ e2@3 ~", J: "a2",
})).s("gm_fretless_bass").gain(0.54)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@2 A@3 B@2 A C@2 B A@5 C D B A C E@2 F C E F C A@4 D C B A@4 B C@2 A@6 D C A@2 D E@2 F C E F C B A@3 C D A B A@4 G@2
>`.pickRestart({
  A: "[a3,e4,a4]@2 [a3,e4,a4] [a3,e4,a4]@3 [a3,e4,a4]@2", B: "[a3,e4,a4] [a3,e4,a4]@3",
  C: "[e3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@3 [e3,b3,e4]@2", D: "[e3,b3,e4] [e3,b3,e4]@3",
  E: "[f#3,c#4,f#4]@2 [f#3,c#4,f#4] [f#3,c#4,f#4]@3 [f#3,c#4,f#4]@2", // F#5
  F: "[b3,f#4,b4]@2 [b3,f#4,b4] [b3,f#4,b4]@3 [b3,f#4,b4]@2", G: "[[a3,e4]@23 ~@9, a4@27 ~@5]/2",
})).s("gm_electric_guitar_clean").gain(0.41).pan(0.2)

// chords · acoustic guitar steel · "Steel String"
const acoustic_guitar_steel = note(`<
  ~@2 A B C@4 D@2 C@6 D@2 B@2 E F@2 G E F G H C@3 I D@2 C@6 D@2 B@2 C@4 J@2 B@2 E F@2 G E F G H C@4 J@2 C I C@4 K ~
>`.pickRestart({
  A: "[e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]@3", B: "[e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]@2 [e3,a3,c#4]",
  C: "[e3,g3,c#4]@3 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]", D: "[g3,b3,d4]@3 [g3,b3,d4]@2 [g3,b3,d4]@2 [g3,b3,d4]",
  E: "[e3,g3,b3]@3 [e3,g3,b3]@2 [e3,g3,b3]@2 [e3,g3,b3]", // Em
  F: "[e3,a#3,c#4]@3 [e3,a#3,c#4]@2 [e3,a#3,c#4]@2 [e3,a#3,c#4]", // A#dim
  G: "[f#3,b3,d4]@3 [f#3,b3,d4]@2 [f#3,b3,d4]@2 [f#3,b3,d4]", // Bm
  H: "[g#3,b3,d4]@3 [g#3,b3,d4]@2 [g#3,b3,d4]@2 [g#3,b3,d4]", I: "[e3,g3,c#4]@3 [e3,g3,c#4]@2 [e3,g3,c#4]@3",
  J: "[d3,g3,b3]@3 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]", K: "[e3,a3,c#4]@3 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.9)

// other · electric guitar clean · "Clean Guitar/Solo"
const electric_guitar_clean_2 = note(`<
  A@2 B@2 C ~@5 A@2 ~@6 A@2 ~@7 D ~@6 A@2 ~@6 A@2 E@2 F G H I A@2 ~@14 A@6 ~@2
>`.pickRestart({
  A: "[a4 a4@2 g4@2 b4@2 g4@2 d5@2 c#5@2 b4@2 g4]/2", B: "[a4@2 a4@4 g4@4 b4@4 g4@5 d5@4 c#5@3 b4@4 g4@2]/2",
  C: "a4@7 ~@9", D: "~@3 b4@3 ~ a4@3 ~ g#4@4 ~", E: "[~@4 c#5@2 d5@5 c#5@4 b4@5 c#5@2 d5@6 c#5@4]/2",
  F: "~@2 c#5 d5@3 c#5@2", G: "b4@2 c#5 d5@3 c#5@2", H: "b4@4 ~@3 b4", I: "d5@6 f#4@6 d5@3 ~",
})).s("gm_electric_guitar_clean").gain(0.56).pan(0.2)

// chords · electric guitar clean · "Clean Guitar"
const electric_guitar_clean_3 = note(`<
  A B A C D E F G H ~ A C I E F G H ~ A B ~@7 J I E F G H ~ A C K E F G H ~ A B ~@6 A B ~@8 K E F G H ~ A B A B A B ~@2
>`.pickRestart({
  A: "a3 [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ a3", B: "~@2 a3@2 [e4,g4] ~ [a3,e4,g4]@3 ~ [a3,e4,g4]@4 ~@2",
  C: "~@2 [a3,e4,g4]@2 ~@2 [a3,e4,g4]@2 ~@2 [a3,e4,g4]@3 ~@3", D: "~@7 b4@5 c#5@4", E: "d5@2 c#5 b4@3 c#5@2",
  F: "a4@3 ~ a4@2 b4@6 c#5@4", G: "b4@4 c#5@3 d5@5 c#5@4", H: "b4@5 ~@11", I: "a4@3 ~ a4@2 ~ b4@5 c#5@4",
  J: "~@4 g#3@2 a3@3 ~ b3@4 ~@2", K: "a4@2 ~@2 a4@2 ~ b4@5 c#5@4",
})).s("gm_electric_guitar_clean").gain(0.43).pan(0.2)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@3 A ~@5 A ~ B ~@5 A ~@21 C ~@5 C ~@7 A ~@5 C ~@11 C ~@2>".pickRestart({
  A: "~@14 x!2", B: "~@7 x", C: "~@15 x",
})).gain(0.21)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!70 ~@2>").gain(0.39)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@6 B A@3 C A@2 D A@10 E A D A@3 F A G A@12 B A B@2 A H@2 A@14 F A@3 ~@2
>`.pickRestart({
  A: "x!8", B: "x!3 ~ x!4", C: "x ~ x!6", D: "~ x!7", E: "x ~ x!2 ~ x!3", F: "x!7 ~", G: "x ~ x ~ x!4", H: "x!4 ~ x!3",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@3 B ~@2 C ~@10 D ~ C ~@3 E ~ F ~@12 A ~ A@2 ~ G@2 ~@14 E ~@5>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@6", C: "x", D: "~ x ~@2 x ~@3", E: "~@7 x", F: "~ x ~ x ~@4", G: "~ x",
})).gain(0.26)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A B A@2 B C A D B A E A E C A E F A G@8 A@2 F D F A@3 B D B A C A D A E@2 A C A B D A G@8 D@3 A D A D C A@2 C F
  ~@2
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~",
  D: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~", E: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", F: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", G: "x!16",
})).gain(0.3)

stack(
  bass, electric_guitar_clean, acoustic_guitar_steel, electric_guitar_clean_2, electric_guitar_clean_3, kick, kick_soft,
  snare, hihat, open_hat, tambourine
)

More by The Beatles