Strudelify

Chains

The Beatles

KeyB♭ majorTempo151 bpm
0:00/0:00
// Chains — The Beatles
// 151 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(151/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 E.Bass"
const bass = note(`<
  A B A C D E F G H I J K L M N O D E F G H I J K L M N P Q@2 R P Q S T U D E F G H I J K L M N P Q@2 R P Q S T U D E F
  G H I J K L M N P N V F V F W X M N V F V F W X M N V F V F W X M N V F V F W X M F
>`.pickRestart({
  A: "bb2@11 ~ f2@11 ~", B: "bb2@11 ~ f2@6 g2@4 g2@2", C: "bb2@9 ~ f2@2 ~@4 f2@2 g2@4 g2@2",
  D: "bb2@11 ~ f2@6 ~@4 f2@2", E: "bb2@3 ~@3 f2@2 ~ g2@2 ~", F: "bb2 ~ f2 ~", G: "bb2@2 bb2 ab2@3 g2@3 f2@3",
  H: "eb2 ~ bb2 ~", I: "eb2 ~ bb2 eb2", J: "bb2@3 ~@3 f2@3 ~@2 g2", K: "bb2 ~ a2 g2", L: "f2@3 ~@2 f2 c3@3 f2@3",
  M: "eb2@3 ~@2 eb2 bb2@3 eb2@3", N: "bb2@3 ~@3 f2@3 ~@2 f2", O: "bb2@2 f2 f2@2 f2 f2@2 f2 g2@2 g2",
  P: "bb2@2 bb2 ab2@3 g2@3 bb2 g2 f2", Q: "eb2@3 ~@2 g2 bb2@3 g2@2 bb2", R: "bb2@3 bb2@2 d2 f2@3 d2@2 f2",
  S: "eb2@3 ~@2 g2 bb2@3 eb2@3", T: "f2!2 c3!2", U: "f2@2 f2 eb2@3 d2@2 d2 c2@3", V: "bb2@3 ~@3 f2@2 ~ a2@2 ~",
  W: "bb2 ab2 g2 f2", X: "eb2@3 ~@2 eb2 bb2@3 ~@2 bb2",
})).s("gm_fretless_bass").gain(0.59).pan(0.6)

// chords · acoustic guitar nylon · "Nylon Gtr"
const acoustic_guitar_nylon = note(`<
  A B C@2 A@2 D@2 E@2 F@2 G H I J@2 A D@2 E@2 F@2 G H I K L@2 M N@2 L O@2 A@2 D@2 E@2 F@2 G H I K L@2 M N@2 L O@2 A@2
  D@2 E@2 F@2 G H I K P@4 Q@2 R S P@4 Q@2 R S P@4 Q@2 R S P@4 Q@2 R S T
>`.pickRestart({
  A: "~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@11, [bb2,f3,bb3,d4]!2 [bb2,f3,bb3,d4]@2", // Bb5 Bb
  B: "~ [f4,bb4]@3 ~ [f4,bb4]@5 ~@3 [f4,bb4]@11, [bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4] [bb2,f3,bb3,d4]@6, ~@11 [f4,bb4]@2 ~@11", // Bb5 Bb Bb5
  C: "[~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@9 ~ [f4,bb4]@5 ~ [f4,bb4]@7 ~ [f4,bb4]@11, [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@5 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@4 [bb2,f3,bb3,d4]@6]/2", // Bb5 Bb
  D: "[~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@9 ~ [f4,bb4]@7 ~ [f4,bb4]@5 ~ [f4,bb4]@11, [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@5 [bb2,f3,bb3,d4]@4 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@6]/2", // Bb5 Bb
  E: "[~ bb4@5 ~ bb4@5 ~ bb4@9 ~ bb4@25, [eb3,g3,db4,f4]@3 [eb3,g3,db4,f4]@3 [eb3,g3,db4,f4]@5 [eb3,g3,db4,f4]@13]/2", // Eb7
  F: "[~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@9 ~ [f4,bb4]@25, [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@5 [bb2,f3,bb3,d4]@13]/2", // Bb5 Bb
  G: "~ c5@23, [f3,a3,eb4,g4]", H: "~ bb4@23, [eb3,g3,db4,f4]",
  I: "~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@5, [bb2,f3,bb3,d4]!4", // Bb5 Bb
  J: "[~@7 [c4,f4]@3 ~@3 [c4,f4]@3 ~@3 [c4,f4]@3 ~@3 [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@11, ~@2 [f2,c3,f3,a3] [f2,c3,f3,a3]@2 [f2,c3,f3,a3] [f2,c3,f3,a3]@2 [f2,c3,f3,a3] [f2,c3,f3,a3]@2 [f2,c3,f3,a3] [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@6, ~@5 [c4,f4]@2 ~@4 [c4,f4]@2 ~@4 [c4,f4]@2 ~@4 [c4,f4]@2 ~@23]/2", // F5 Bb5 F Bb F5
  K: "~@2 [f3,bb3,d4,ab4] [f3,bb3,d4,ab4]@2 [f3,bb3,d4,ab4] [f3,bb3,d4,ab4]@2 [f3,bb3,d4,ab4] [f3,bb3,d4,ab4]@2 ~", // Bb7
  L: "[eb3,bb3,db4,f4]@2 [eb3,bb3,db4,f4] [eb3,bb3,eb4,g4]@2 [eb3,bb3,db4,f4] [eb3,bb3,db4,f4]@2 [eb3,bb3,db4,f4] [eb3,bb3,eb4,g4]@2 [eb3,bb3,db4,f4]", // Bbm Eb Bbm Eb Bbm
  M: "[f3,ab3,d4,f4]@2 [f3,ab3,d4,f4] [f3,ab3,eb4,g4]@2 [f3,ab3,d4,f4] [f3,ab3,d4,f4]@2 [f3,ab3,d4,f4] [f3,ab3,eb4,g4]@2 [f3,ab3,d4,f4]", // Ddim Fm7 Ddim Fm7 Ddim
  N: "[~ [f4,bb4]@3 ~@3 [g4,bb4]@3 ~ [ab4,bb4]@5 ~@3 [ab4,bb4]@3 ~@2 [eb3,bb3,db4,f4]@4 [eb3,bb3,db4,f4]@2 [eb3,bb3,eb4,g4]@4 [eb3,bb3,db4,f4]@2 [eb3,bb3,db4,f4]@4 [eb3,bb3,db4,f4]@2 [eb3,bb3,eb4,g4]@4 [eb3,bb3,db4,f4]@2, [bb2,f3,ab3,d4]@2 [bb2,f3,ab3,d4] [bb2,f3,ab3,d4]@2 [bb2,f3,ab3,d4]@3 [bb2,f3,ab3,d4] [bb2,f3,ab3,d4]@2 [bb2,f3,ab3,d4] ~@12, ~@5 [f4,bb4]@2 ~@10 [ab4,bb4]@2 ~@4 [ab4,bb4]@2 ~@23]/2", // Bb5 Gm Absus2 Bbm Eb Bbm Eb Bbm …
  O: "[f3,c4,f4,a4]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [f3,c4,f4,a4]", // F
  P: "[~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@9 ~ [f4,bb4]@7 ~ [f4,bb4]@5 ~ [f4,bb4]@21 ~ [f4,bb4]@5 ~@3 [f4,bb4]@3 ~ [f4,bb4]@7 ~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@5, [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@5 [bb2,f3,bb3,d4]@4 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@11 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4] [bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]@4 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3, ~@65 [f4,bb4]@2 ~@29]/4", // Bb5 Bb Bb5
  Q: "[~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@9 ~ [f4,bb4]@7 ~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@5, [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@5 [bb2,f3,bb3,d4]@4 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3]/2", // Bb5 Bb
  R: "~ bb4@5 ~ bb4@5 ~ bb4@5 ~ bb4@5, [eb3,bb3,eb4,g4]!4", S: "~ bb4@5 ~ bb4@5 ~ bb4@5 ~ bb4@5, [eb3,bb3,eb4,gb4]!4",
  T: "~ [f4,bb4]@5 ~ [f4,bb4]@5 ~ [f4,bb4]@10 ~, [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@3 [bb2,f3,bb3,d4]@5 ~", // Bb5 Bb
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.4)

// other · harmonica
const harmonica = note("<A@2 B C ~@97>".pickRestart({
  A: "[~@12 f5@28 g5 f5 eb5@4 d5@2]/2", B: "f5", C: "~@5 f5@3 eb5@3 d5",
})).s("gm_harmonica").gain(0.45).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A@15 B A@11 B A@7 C A@8 D A E B D F G A@4 H F D A G A F I A@3 D B A G A J D G A@3 G A J D G A@3 G A J D G A@3 G A J D
  G A@3
>`.pickRestart({
  A: "x!2", B: "x", C: "x ~ x!2", D: "x ~@5 x ~@4 x", E: "x!2 ~ x!2 ~", F: "x ~@2 x!2 ~", G: "x!2 ~ x ~@2",
  H: "x ~@5 x ~@2 x ~ x", I: "x ~ x ~@3 x ~@4 x", J: "x ~@5 x ~ x ~@2 x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  A@15 B A@3 C A@7 B A@3 D A@2 E F A@11 G A E A D A@2 E H A@11 I A@16 F A@16
>`.pickRestart({
  A: "~@3 x ~ x ~@3 x ~@2", B: "~@4 x!3 ~@3 x ~ x ~@3 x ~ x ~ x ~ x ~", C: "~@6 x ~@3 x ~@5 x!3 ~@3 x ~",
  D: "~@6 x ~@3 x ~@5 x!3 ~ x ~ x ~", E: "~@3 x ~ x ~@3 x ~ x", F: "~@3 x ~ x ~@6", G: "~@2 x!2 ~ x!2 ~ x!4",
  H: "~ x ~@2", I: "~@2 x!2 ~ x!2 ~ x!2 ~ x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C@2 A@3 D E F A G F A@2 H@2 I C G H A J G A G K A H L C G M A N O A G A P H A Q R G A@3 M L A@2 H A S T M A@3 U A
  G R A V N R A@2 G A@7 G A@4 C A W G A@7 G A@5 G
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~@2 x ~ x!2 ~ x!2 ~ x", C: "x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@4 x",
  D: "x ~@4 x!2 ~@4 x!2 ~@4 x!2 ~@5", E: "x ~@3 x ~ x ~@3 x ~ x ~@3 x!3 ~@3 x ~",
  F: "x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x!2", G: "x ~ x!2 ~ x!2 ~ x!2 ~@2", H: "~@2 x!2 ~ x!2 ~ x!2 ~ x",
  I: "x ~@3 x!3 ~@3 x ~ x ~@3 x ~ x ~@3 x ~", J: "x ~@3 x ~ x ~@3 x ~ x ~@3 x!3 ~@3 x!2",
  K: "x ~@4 x!2 ~@3 x ~ x ~@4 x!2 ~@3 x ~", L: "x ~@3 x ~ x ~@3 x ~ x ~@4 x!2 ~@3 x ~", M: "~@2 x!2 ~ x!2 ~ x!2 ~@2",
  N: "x ~@3 x!3 ~@3 x ~ x ~@3 x!3 ~@3 x ~", O: "x ~ x!2 ~@8", P: "x ~ x!2 ~ x!2 ~ x ~@2 x",
  Q: "x ~ x!2 ~@2 x ~ x!2 ~ x", R: "x ~ x!2 ~ x!2 ~ x!4", S: "~@4 x!3 ~@3 x ~@5 x!3 ~@3 x ~", T: "~@2 x!2 ~ x ~@6",
  U: "x ~@3 x ~ x ~@3 x!3 ~@3 x ~ x ~@4 x", V: "x ~@4 x!2 ~@3 x ~ x ~@3 x ~ x ~@3 x ~",
  W: "x ~@3 x ~ x ~@3 x!3 ~@3 x ~ x ~@5",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@84 [~@10 x!2] ~@16>").gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@10 x!3 ~ x ~ x ~ x ~ x ~ x ~] ~@19 [~@5 x!7] ~@28 [~@16 x!3 ~@5] ~@16>")
  .gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B@2 ~@3 C ~@3 B ~@6 B@2 ~ D ~ B ~ B E ~@2 F B@3 ~@4 B ~ G ~@3 H B ~@3 B F ~@6 B ~@3 B ~ B ~@2 A ~@4 B ~@7 B ~@4 B
  ~ B@2 ~@7 B ~@6
>`.pickRestart({
  A: "~ x ~@4", B: "~@11 x", C: "~@2 x ~@2 x ~@2 x ~@2 x", D: "~@5 x ~@18", E: "~ x ~@2 x ~", F: "~@2 x", G: "~@3 x",
  H: "~@17 x ~@6",
})).gain(0.35)

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

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

More by The Beatles