Strudelify

I'm So Tired

The Beatles

KeyA majorTempo70 bpm
0:00/0:00
// I'm So Tired — The Beatles
// 70 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 8, 4/4 at bar 8, 2/4 at bar 14, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 37 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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 · church organ · "organ"
const church_organ = note("<~@11 A B C D@2 E@2 F G ~@4 H I J@6 K@4 ~>".pickRestart({
  A: "~@5 e5@3", B: "~@2 f#5@2 g#5 f#5 e5@2 ~@6 b5@2, e5@3 ~ a5@3 ~, ~@3 f#5", C: "[f5,c6]@2 [f5,b5] [f5,a5]",
  D: "[a4,c#5,e5]/2", E: "[e4,g#4,b4]/2", F: "[f#4,a4,d5]", G: "[e4,a4,c#5] ~@7",
  H: "~@2 e5@6 ~@2 f#5@2 g#5 f#5 e5@2, ~@4 e5@3 ~", I: "~@3 b5 [f5,c6]@2 [f5,b5]@2, a5@3 ~@5, ~ f#5 ~@2",
  J: "[[f5,a5]@2 [d5,f5]@2 [a4,c#5,e5]@16 [e4,g#4,b4]@16 [f#4,a4,d5]@8 [e4,a4,c#5] ~@3]/6", // F Dm A E D A
  K: "[~@4 [f#4,a4,d5]@8 [e4,a4,c#5] ~@3]/2", // D A
})).s("gm_church_organ").gain(0.32).pan(1)

// chords · piano
const piano = note("<~@14 A@2 B@2 C D ~@6 E A F B G H I J@2 K@2>".pickRestart({
  A: "[a3,c#4,e4]!8", B: "[g#3,b3,e4]!8", C: "[a3,d4,f#4]!16", D: "[a3,c#4,e4] ~@3", E: "~@4 [a3,c#4,e4]!4",
  F: "[a3,c#4,e4]!4 [g#3,b3,e4]!4", G: "[g#3,b3,e4]@2 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [a3,d4,f#4]!8",
  H: "[a3,d4,f#4]!8 [a3,c#4,e4]@4 ~@4", I: "~@8 [a3,d4,f#4]!8", J: "[[a3,d4,f#4]!8 [a3,c#4,e4]@16 [a3,d4,f#4]!8]/2",
  K: "[[a3,d4,f#4]!8 [a3,c#4,e4]@16 ~@8]/2", // D A
})).s("gm_piano").gain(0.4)

// chords · overdriven guitar · "g1"
const overdriven_guitar = note("<~@5 A B C ~@3 D E F G@2 H@2 I J ~@4 A K L M N O P Q R Q R Q ~>".pickRestart({
  A: "~@2 [a3,c#4,e4,a4] ~@3 [e3,g#3,c4,e4] ~", B: "~@2 [a3,c#4,f#4] ~ [d3,a3,d4,f4]!4", C: "[d3,a3,d4,f4]!4 ~@4",
  D: "~@6 [a3,c#4,e4,a4] ~", E: "~@2 [e3,g#3,c4,e4] ~@3 [a3,c#4,f#4] ~",
  F: "~@2 c4 d4@3 [d4,f4]@2 d4 c4 a3@2 a3 g3 f3@2, ~ f4@2 ~@5", // Dm
  G: "[a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,f#3]@2 ~@3 b3 ~@2 e4@2, ~@11 e4@3 ~@2, ~@3 c#4", // A5 D
  H: "[e2,b2]@2 [e2,b2]@2 [e2,c#3]@2 [e2,c#3]@2 ~@3 b3 c#4@2 [c#4,e4]@2, ~@11 e4@3 ~@2", // E5 C#m
  I: "[d2,a2]!2 [d2,b2]!2 [d2,a2]!2 [d2,b2]!2", J: "[a2,e3] ~@7",
  K: "~@4 [a3,c#4,f#4]@2 ~@4 c4 d4@3 [d4,f4]@2, ~@5 f4@2 ~", // F#m Dm
  L: "d4 c4 a3@2 a3 g3 f3@2 [a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,f#3]@2", // A5 D
  M: "~@3 b3 ~@2 e4@2 [a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,f#3]@2, ~@3 e4@3 ~@10, ~ c#4 ~@2", // A5 D
  N: "~@3 b3 ~@2 e4@2 [e2,b2]@2 [e2,b2]@2 [e2,c#3]@2 [e2,c#3]@2, ~@3 e4@3 ~@10, ~ c#4 ~@2", // E5 C#m
  O: "~@3 b3 c#4@2 [c#4,e4]@2 [e2,b2]@2 [e2,b2]@2 [e2,c#3]@2 [e2,c#3]@2, ~@3 e4@3 ~@10", // C#m E5 C#m
  P: "~@3 b3 c#4@2 [c#4,e4]@2 [d2,a2]@2 [d2,a2]@2 [d2,b2]@2 [d2,b2]@2, ~@3 e4@3 ~@10", // C#m D5 G
  Q: "[d2,a2]!2 [d2,b2]!2 [a2,e3] ~@3", R: "~@4 [d2,a2]!2 [d2,b2]!2",
})).s("gm_overdriven_guitar").gain(0.25).pan(0.3)

// chords · acoustic guitar steel · "g2"
const acoustic_guitar_steel = note(`<
  A B C D C E F G H I J I K L M@2 N@2 O P B C D C E F Q R S@2 T U V U V W ~
>`.pickRestart({
  A: "~@5 e2 f#2 g#2",
  B: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [g#2,d#3,f#3,c4,d#4]@2 [g#2,d#3,f#3,c4,d#4] [g#2,d#3,f#3,c4,d#4]@2 [g#2,d#3,f#3,c4,d#4] [g#2,d#3,f#3,c4,d#4]@2", // A G#7
  C: "[d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4] [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4] [e2,b2,e3,g#3,b3,e4]@2", // D E
  D: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [f#2,c#3,f#3,a3,c#4]@2 [f#2,c#3,f#3,a3,c#4] [f#2,c#3,f#3,a3,c#4]@2 [f#2,c#3,f#3,a3,c#4] [f#2,c#3,f#3,a3,c#4]@2", // A F#m
  E: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [e3,g#3,c4,e4]@2 [e3,g#3,c4,e4] [e3,g#3,c4,e4]@2 [e3,g#3,c4,e4] [e3,g#3,c4,e4]@2", // A Eaug
  F: "[f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4] [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4] [f#2,c#3,f#3,a3,c#4,f#4]@2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4] [d3,a3,d4,f4]@2", // F#m Dm D5 Dm
  G: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2", // Dm A
  H: "[g#2,d#3,f#3,c4,d#4]@2 [g#2,d#3,f#3,c4,d#4] [g#2,d#3,f#3,c4,d#4]@2 [g#2,d#3,f#3,c4,d#4] [g#2,d#3,f#3,c4,d#4]@2 [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2", // G#7 D
  I: "[e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4] [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4] [e2,b2,e3,g#3,b3,e4]@2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2", // E A
  J: "[f#2,c#3,f#3,a3,c#4]@2 [f#2,c#3,f#3,a3,c#4] [f#2,c#3,f#3,a3,c#4]@2 [f#2,c#3,f#3,a3,c#4] [f#2,c#3,f#3,a3,c#4]@2 [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2", // F#m D
  K: "[e3,g#3,c4,e4]@2 [e3,g#3,c4,e4] [e3,g#3,c4,e4]@2 [e3,g#3,c4,e4] [e3,g#3,c4,e4]@2 [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4] [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4] [f#2,c#3,f#3,a3,c#4,f#4]@2", // Eaug F#m
  L: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2", // Dm D5 Dm
  M: "[a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,f#3]@2 ~@3 b3 ~@2 e4@2, ~@11 e4@3 ~@2, ~@3 c#4", // A5 D
  N: "[e3,b3]@2 [e3,b3]@2 [e3,c#4]@2 [e3,c#4]@2 ~@3 b3 ~@2 e4@2, ~@11 e4@3 ~@2, ~@3 c#4", // E5 C#m
  O: "[d3,a3]!2 [d3,b3]!2 [d3,a3]!2 [d3,b3]!2", P: "[a2,e3] ~@4 e2 f#2 g#2",
  Q: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,f#3]@2", // Dm A5 D
  R: "~@3 b3 c#4@2 [c#4,e4]@2 [a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,f#3]@2, ~@3 e4@3 ~@10", // C#m A5 D
  S: "~@3 b3 ~@2 e4@2 [e2,b2]@2 [e2,b2]@2 [e2,c#3]@2 [e2,c#3]@2, ~@3 e4@3 ~@10, ~ c#4 ~@2", // E5 C#m
  T: "~@3 b3 ~@2 e4@2 [d3,a3]@2 [d3,a3]@2 [d3,b3]@2 [d3,b3]@2, ~@3 e4@3 ~@10, ~ c#4 ~@2", // D5 G
  U: "[d3,a3]!2 [d3,b3]!2 [e3,a3] ~@3", V: "~@4 [d3,a3]!2 [d3,b3]!2", W: "[d3,a3]!2 [d3,b3]!2 [e3,a3]@4",
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.1)

// bass · acoustic bass · "bass"
const bass = note("<~ A B C B D E F G H I J K L M N O@2 P Q A R S B T U V M W O X Y Z Y AA Y ~>".pickRestart({
  A: "a2 g#2", B: "d2@4 e2@2 f#2 g#2", C: "a2 f#2", D: "a2 e2", E: "f#2@4 d2!4", F: "d2 f2 e2 d2 a2@4", G: "g#2 d2",
  H: "e2 f#2 g#2 e2 a2@4", I: "f#2@3 e2 d2@4", J: "e2@2 f#2 g#2 a2@2 c#2 d2", K: "e2!2 f#2 e2 f#2@2 f#2@2",
  L: "d2@4 ~@2 d2@2 d3 b2 a2 g2 f2 g2 f2@2", M: "a2 ~ e2 ~ a2 ~ e2 ~", N: "a2 ~ e2 ~ a2 ~ e2 a2",
  O: "e2!2 b1!2 e2!2 b1!2", P: "d2!2 e2!2 f#2!2 g2 g#2", Q: "a2 ~@7", R: "d2@4 e2 f#2 g#2 e2", S: "a2@4 f#2@3 e2",
  T: "a2@2 c#2 d2 e2!2 f#2 e2", U: "f#2@2 f#2@2 d2@2 ~ d2", V: "d3 b2 a2 g2 f2 g2 f2@2 a2@2 ~@2 e2@2 ~@2",
  W: "a2 ~ e2 a2 e2!2 b1!2", X: "e2!2 b1!2 d2!2 e2!2", Y: "f#2!2 g2 g#2 a2 ~@3", Z: "~@4 d2!2 e2!2",
  AA: "~ a3!3 d2!2 e2!2, ~@2 g#3 ~ g#3 ~ g#3 ~@9",
})).s("gm_acoustic_bass").gain(0.57).pan(0.7)

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

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

// drums · hihat
const hihat = s("hh").struct("<~ A@18 ~ A@11 B C B C B ~>".pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "~@5 x!3",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 [~@4 x!2 ~@10] [~@7 x] [~@2 x!2 ~@4] ~@2>").gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@19 x ~@11 [~ x]!5 ~>").gain(0.36)

stack(church_organ, piano, overdriven_guitar, acoustic_guitar_steel, bass, kick, snare, hihat, mid_tom, crash)

More by The Beatles