Strudelify

The Inner Light

The Beatles

KeyE♭ majorTempo101 bpm
0:00/0:00
// The Inner Light — The Beatles
// 101 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(101/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 · reed organ · "Organ"
const reed_organ = note("<~@12 A B C D E B A F@5 G H G ~@9 A I J K A I A L@5 G H M ~@11>".pickRestart({
  A: "[eb4,g4,bb4] [eb4,g4,bb4,db5]", B: "[f4,ab4,c5]@15 ~", C: "[eb4,g4,bb4]@7 ~ [eb4,g4,bb4,db5]@7 ~",
  D: "[eb4,ab4,c5]", E: "[eb4,g4,bb4]@7 ~ [eb4,g4,bb4,db5]@8",
  F: "[[eb4,ab4,c5]@26 ~@2 [g4,bb4]@29 ~@3 [db4,eb4,g4,bb4]@19 ~, ~@7 eb4@8 ~@5]/5", G: "[eb4,g4,bb4]",
  H: "[eb4,ab4,c5]@15 ~", I: "[f4,ab4,c5]", J: "[eb4,g4,bb4]@8 [eb4,g4,bb4,db5]@7 ~", K: "[ab4,c5], eb4@7 ~",
  L: "[[eb4,ab4,c5]@13 ~ [eb4,g4,bb4]@15 ~ [db4,eb4,g4,bb4]@9 ~]/5", M: "[eb4,g4,bb4]@15 ~",
})).s("gm_reed_organ").gain(0.19).pan(0.4)

// other · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A@2 B C D E D E F G H@2 ~ I J I J I J K ~@7 L M N@2 O P F G Q@2 I J I J I J K ~@7 L M N@2 O P F G Q@2 ~
>`.pickRestart({
  A: "[~@15 eb4@2 eb4 eb4@2 f4 ab4 g4 eb4 c5 bb4 c5 bb4 ab4 g4 ab4 g4]/2",
  B: "eb4@4 eb4@2 eb4!2 eb4@2 eb4!2 eb4@2 eb4!2", C: "eb4@2 eb4!2 eb4@2 eb4!2 eb4@2 eb4!2 eb4@2 eb4!2",
  D: "bb4@2 bb4 c5 ab4@2 ab4 bb4 g4@2 g4 ab4 f4@2 f4 g4", E: "ab4@2 ab4 bb4 g4@2 g4 ab4 f4@2 f4 g4 eb4@4",
  F: "eb5!2 eb5@2 db5!2 db5@2 c5!2 c5@2 bb4!2 bb4@2", G: "ab4!2 ab4@2 g4!2 g4@2 f4 eb4 [eb4,f4] f4 eb4@2 g4 ab4",
  H: "[bb4@3 ~]/2", I: "~@6 db5@2 c5 db5 bb4 c5 ab4 bb4 g4 ab4", J: "bb4 ~@3", K: "~@6 db5@2 c5@2 bb4 c5 ab4@4",
  L: "eb5@2 eb5!2 db5@2 db5 eb5 c5@2 c5 db5 bb4@2 bb4 c5", M: "eb5@2 eb5!2 db5@2 db5 eb5 c5@2 c5 db5 bb4@4",
  N: "~@2 eb6!2 ~@2 eb6!2 ~@2 eb6!2 ~@2 eb6!2", O: "bb4@2 bb4!2 ab4@2 ab4 bb4 g4@2 g4 ab4 f4@2 f4 g4",
  P: "ab4@2 ab4 bb4 g4@2 g4 ab4 f4@2 f4 g4 eb4@2 eb4!2", Q: "[bb4@11 ~@5]/2",
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.7)

// other · muted trumpet · "Indian Instr1"
const muted_trumpet = note(`<
  ~@2 A B ~ C D E F G H@2 ~@11 I J K L ~@2 M N ~@2 F O P ~@11 I Q R S ~@2 M N ~@2 F O T@2 U
>`.pickRestart({
  A: "c5 bb4 ab4 g4", B: "ab4@2 g4 bb4 ab4@2 g4 eb4 f4 ab4 g4 f4 g4 ab4 bb4@2", C: "~@6 ab4 g4",
  D: "bb4@2 ab4@2 g4@2 f4 g4", E: "ab4@2 ab4@2 g4@2 g4@2 f4@3 ~ eb4@3 ~", F: "eb5!2 db5!2 c5!2 bb4!2",
  G: "ab4@3 ~ g4@3 ~ f4@4 eb4@2 g4 ab4", H: "[bb4@11 ~@5]/2", I: "~@7 eb4", J: "g4@4 g4@4 eb4@4 db4@3 ~",
  K: "ab4@7 ~ ab4@7 ~", L: "g4@15 ~", M: "g4 ab4!2 g4 ab4 bb4!2 ab4 bb4 c5 db5 [bb4,c5] c5 db5!2 [bb4,c5]",
  N: "eb5!2 db5 c5 bb4 [bb4,c5] ab4@2 [bb4,c5] [ab4,bb4] bb4@2 eb5@4", O: "ab4@2 ab4@2 g4@2 g4@2 f4@3 ~ eb4@2 g4 ab4",
  P: "bb4", Q: "g4@4 g4@4 eb4@3 ~ db4@4", R: "ab4@8 ab4@7 ~", S: "g4", T: "bb4@13 ~ g4 ab4", U: "bb4@15 ~",
})).s("gm_muted_trumpet").gain(0.32).pan(0.9)

// other · piccolo · "Indian Instr2"
const piccolo = note("<~@12 A B C D E B F D G H I J K L M ~@9 N B O D A B P D Q R S J T U V ~@11>".pickRestart({
  A: "eb5@2 f5 ~ g5@2 eb5@2 f5@2 g5@2 ab5@2 f5 ~", B: "ab5 ~ bb5@2 c6@2 f5@7 ~@3",
  C: "eb5 ~ f5 ~ g5@2 ab5@2 f5@2 g5@2 bb5@2 c6@2", D: "ab5@7 ~", E: "eb5 ~ f5@2 g5@2 eb5 ~ f5@2 g5@2 ab5@2 f5 ~",
  F: "eb5@2 f5 ~ g5@2 ab5@2 f5 ~ g5@2 bb5@2 c6 ~", G: "ab5 ~ g5 ~ f5@2 eb5 ~ ab5@2 g5@2 f5@2 ab5@2",
  H: "g5@2 f5@2 eb5@2 f5@2 g5@7 ~", I: "g5 ~ eb5@2 db5@2 c5@2 db5 ~ eb5@2 f5@2 g5 ~", J: "ab5@2 bb5@2 c6@2 bb5@7 ~@3",
  K: "g5 ~ eb5@2 db5@2 c5 ~ bb4@2 eb5@2 f5@2 g5@2", L: "ab5@2 bb5 ~ c6@2 eb6@2 f6@2 g6@2 ab6@3 ~", M: "g6@7 ~@9",
  N: "eb5 ~ f5 ~ g5@2 eb5@2 f5@2 g5@2 ab5@2 f5 ~", O: "eb5@2 f5@2 g5@2 ab5@2 f5@2 g5 ~ bb5@2 c6 ~",
  P: "eb5@2 f5 ~ g5@2 ab5@2 f5@2 g5@2 bb5@2 c6@2", Q: "ab5 ~ g5 ~ f5@2 eb5@2 ab5@2 g5@2 f5@2 ab5@2",
  R: "g5@2 f5@2 eb5 ~ f5@2 g5@7 ~", S: "g5@2 eb5@2 db5@2 c5@2 db5 ~ eb5@2 f5@2 g5 ~",
  T: "g5@2 eb5 ~ db5@2 c5 ~ bb4 ~ eb5@2 f5@2 g5 ~", U: "ab5@2 bb5 ~ c6 ~ eb6@2 f6@2 g6@2 ab6@3 ~", V: "g6 ~",
})).s("gm_piccolo").gain(0.32).pan(0.3)

// other · lead 7 fifths · "Drone"
const lead_7_fifths = note("<A@2 ~@60>".pickRestart({
  A: "eb3/2",
})).s("gm_lead_7_fifths").gain(0.28)

// drums · bongos
const bongos = s("bongo:18").struct("<~@2 A@7 B ~@2 C@15 A@7 B ~ C@15 A@7 B ~@3>".pickRestart({
  A: "~@2 x!2 ~@6 x!2 ~@4", B: "~@2 x!2 ~@6 x ~@5", C: "~@2 x ~@2 x ~ x",
})).gain(0.85)

// drums · congas
const congas = s("conga:18").struct("<~@2 A@7 B ~@2 C@15 A@7 B ~ C@15 A@7 B ~@3>".pickRestart({
  A: "~@6 x!2 ~@6 x!2", B: "~@6 x!2 ~@8", C: "~@3 x",
})).gain(1.03)

// drums · congas
const congas_2 = s("conga:33").struct("<~@2 A@8 ~@2 B@15 A@8 ~ B@15 A@8 ~@3>".pickRestart({
  A: "x!2", B: "x ~@2 x ~@4",
})).gain(1.03)

stack(reed_organ, acoustic_guitar_steel, muted_trumpet, piccolo, lead_7_fifths, bongos, congas, congas_2)

More by The Beatles