Strudelify
KeyE♭ majorTempo96 bpm
0:00/0:00
// Eastenders — Television Theme Songs
// 96 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 71 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/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 · piano · "Ac Piano"
const piano = note(`<
  A B C D A B C E F G H I A B C D A B C E F G H I A B C D A B C I J K L M N O P Q R S T U V A B C D A B C E F G H E A B
  C D A B C E W X Y Z@2 ~
>`.pickRestart({
  A: "eb5 f5 g5 ab5 bb5@2 c6@2", B: "ab5@7 ~", C: "ab5@3 g5@3 f5@3 eb5@2 ~ eb5@9 bb4@2 ~",
  D: "bb4@4 ~ eb5@4 bb5@3 eb5@6 f5@5 ~", E: "g5@4 ~ ab5@4 bb5@3 g5@5 ~ f5@5 ~", F: "bb4@9 d5@3 eb5@11 ~",
  G: "f5@9 bb5@3 eb5@9 bb5@2 ~", H: "bb5@9 ab5@2 ~ ab5@8 ~ g5@2 ~", I: "g5@4 ~ ab5@4 bb5@3 g5@5 ~ f5@6",
  J: "[g4,bb4,eb5]@2 ~ [bb4,d5] ~ [g4,bb4,eb5] ~ [f4,bb4,d5], eb3@23 ~", // Eb Bb Eb Bb
  K: "~ [eb6,g6]@3 [bb4,eb5,g5] [g5,bb5,eb6,g6] eb3 ~ [bb4,eb5,g5,bb5,eb6] g6 d3 ~@2 [d6,f6]@3 [bb4,d5,f5] f6 g3 ~ [bb4,d5,f5,bb5,d6,f6] ~ eb3 ~, [eb2,g5,bb5]@5 ~@7 [g2,bb5]@6 ~@6, [bb4,eb5]@3 ~@9 [bb4,d5,f5]@4 ~@8", // Eb Dm Bb Eb Gm Eb5 Bb
  L: "[ab4,c5,eb5]@4 [ab4,c5,eb5] ~@2 eb5 [ab4,c5,eb5] ~ ab3 ~ [ab2,ab4,c5,eb5]@4 [ab3,ab4] ~ [ab3,ab4,c5,eb5]@3 ~ [g3,g4,bb4,eb5] ~, [ab5,c6,eb6]@17 ~@7, ab2@6 ab3@2 ~@10 ab2 ~@5", // Ab Eb Ab
  M: "[f3,ab4,c5,eb5]@4 [ab4,c5,eb5,g5,g6] ~ [f3,f6] ~ [ab4,c5,eb5] ~ f3 ~ [g3,eb5]@4 [g4,bb4,eb5] ~ g3 ~ [g4,bb4,eb5] ~ [g3,bb4,bb5] ~, [ab5,ab6]@2 ~@4 f5@2 ~@4 eb6@9 ~@3, e3 ~@11 g4@3 ~@9, ~@12 bb4 ~@11", // Fm7 Abmaj7 F Ab Cm Eb Gm Ab
  N: "[g4,c5,eb5,g5]@3 ~ [g4,c5,eb5,g5] ~ ab3 ~ [g4,c5,eb5] ~ [ab3,g4] ~ [ab3,c5,eb5,g5,eb6]@4 g4 ~ [bb3,bb4,d5,f5]@4 g4 g5, [ab3,bb4,bb5]@4 eb6@2 ~@2 [bb5,bb6]@2 ~@2 g4@3 ~@3 [f4,f6]@3 ~@3", // Cm Abmaj7 Bb Absus2 Bb F
  O: "[eb4,g4,bb4,eb5,g5,bb5,eb6,g6]@4 [g4,bb4,eb5,g5,bb5,eb6,g6] ~ eb4 ~ [eb5,g5,bb5,eb6,g6] ~ [eb5,g5] ~@2 [d6,f6]@3 [f4,bb4,d5,f5,d6] [bb5,f6] g3@2 [f4,bb4,d5,f5,bb5,d6,f6] ~ g3 ~, ~@3 [g3,f4,bb4,d5,f5,bb5] ~@2", // Eb Dm Bb Bb5 Bb Gm7
  P: "~@4 [eb4,ab4,c5,eb5] ~ ab3 ~ [eb4,ab4,c5,eb5] ~ ab3 ~ [eb4,ab4,c5,eb5]@4 [ab3,eb4] ~ [eb4,ab4,c5,eb5]@2 [ab3,eb5] ~ [g3,eb4,g4,bb4,d5,eb5] ~, [ab5,c6]@17 ~@7, [ab3,eb5]@5 ~@19, [eb4,ab4,c5] ~@7, ~ eb6@17 ~@2 eb6@2 d6@2", // Ab Ab5 Ab Ab5 Ebmaj7 Ab Ab5 Ab
  Q: "[f3,c5,c6]@4 [eb4,ab4,c5,eb5] ~ f3@2 [ab4,c5,eb5,eb6]@2 [f3,eb4] ~ [g3,eb4,g4,bb4,eb5]@4 [eb4,g4,bb4,eb5] ~ g3@2 [eb4,g4,bb4] bb4 [g3,eb4,bb5] ~, [eb4,ab4,eb5]@3 ~ [d5,d6]@2 ~@2 eb4 ~@3 eb6@7 ~ eb5@3 ~", // F5 Ab F7 Eb Ab5 D
  R: "[ab3,g5,g6]@4 [eb5,ab5,ab6]@2 ab3@2 [eb4,c5,eb5] ~ ab3 ~ [ab3,eb5,g5,g6]@4 db5 ~ [bb4,d5,f5,f6]@4 [bb3,f4] ~, eb5 ~@3 [bb5,bb6] ~@7, eb4 ~@3 [eb4,ab4] ~@7 [eb4,g4,c5]@3 ~@3 [bb3,f4]@3 ~@3", // Abmaj7 Ab5 Cm Abmaj7 Bb Bb5 Bb Ab5 …
  S: "[g3,bb4,bb5]@4 [f4,bb4] ~ [g3,d6]@2 [f4,bb4] ~ [g3,f4,bb4,d5] ~ [c4,g4,bb4,eb5]@4 [bb4,eb5] ~ c4@2 [g4,bb4] ~ [g4,bb4,eb5] ~, f4@3 ~@2 d5@3 ~ eb5@3 ~@4 g4@2 ~@6, ~@10 eb6@13 ~", // Gm Bb5 G5 Bb5 Gm7 Cm7 Eb5 Gm …
  T: "[bb4,d5,f5,f6]@3 ~ [bb4,d5,f5]@2 bb5 ~ bb4 ~ [eb5,f5]@2 [c4,g4,bb4,eb5]@4 [g4,bb4,eb5] ~ c4@2 [g4,bb4] ~ [bb5,bb6] ~, g3@2 ~ [g3,bb6]@2 eb6@6 ~, ~@10 [bb4,d5] ~@11 c4@2", // Bb Ebsus2 Cm7 Eb Gm Bb Gm Bb
  U: "~@4 [ab4,c5]@2 ~@2 [ab4,eb5] ~ f3 ~ [c5,eb5]@4 [f3,ab4] ~ [g3,bb4,eb5]@4 [g4,g5] ~, [f3,eb5,bb5]@2 [f3,ab6] ~ [f3,ab4] ~ g4 ~, [ab4,c5]@3 ~@4 ab5@2 ~ [ab5,ab6]@11 ~@3, ~ bb6@6 ~@15 g6@2", // Ab Ab5 Cm Fm Eb G Ebsus2 Fm …
  V: "[ab3,g4,c5,eb5,g5,g6]@4 [g4,c5,eb5,ab5,ab6]@2 ab3@2 [g4,c5,eb5,g5] ~ ab3@2 ~@3 ab3@2 ~ [bb3,bb4,d5,f5,f6]@4 f4 ~, ~@2 bb6 ~@3, ~@8 bb5@2 ~@2 [g4,c5,eb5,g5,g6]@5 ~ f4@3 ~@3", // Abmaj7 Cm Bb Cm
  W: "[g4,bb4]@7 ~@2 [bb4,d5]@3 ~@3 [g4,bb4,eb5]@3 ~@3 [f4,bb4,d5]@3, eb3, eb5@3 ~@5", // Gm Bb Eb Bb
  X: "~@6 g4@3 eb4@3 ~@10 f4@2, eb3@13 ~@6 bb4@5, eb5@5 ~ f5@6, ~@3 bb4@7 ~@6 d5@8", Y: "~ g5@4 ~@2 ab5@5 bb5@4 g5@7 ~",
  Z: "[~ f5@9 ~@2 [eb2,bb4,eb5,g5]@29 ~@7]/2", // Eb
})).s("gm_piano").gain(0.36)

// bass · fretless bass · "El Bass"
const bass = note(`<
  A B C D A B C D E F G H A B C D A B C D E F G H A B C D A B C H I J K L M N O P Q R S T U A B C D A B C D E F G H A B
  C D A B C H I V W X@2 ~
>`.pickRestart({
  A: "eb2@7 ~@2 eb2@2 ~ g1@7 ~@2 g1@2 ~", B: "ab1@7 ~@2 ab1 ~@2 ab1@3 eb2 ~@2 ab2@3 g2@2 ~",
  C: "f2@8 ~ f1@2 ~ g1@8 ~ g1@2 ~", D: "ab1@7 ~@2 ab1@2 ~ ab1@5 ~ bb1@4 ~@2", E: "g1@6 ~@3 g1@2 ~ c2@6 ~@3 c2@2 ~",
  F: "g1@6 ~@3 g1@3 c2@6 ~@3 c2@2 ~", G: "f2@6 ~@3 f2@2 ~ f2@6 ~@3 g2@2 ~", H: "ab2@7 ~@2 ab2 ~ eb2 ab1@6 bb1@5 ~",
  I: "eb2@7 ~@2 eb2@2 ~@4 eb2@2 ~@4 bb1@2 ~", J: "eb2@5 ~@5 f2 ~ g2@6 ~@4 g2@2",
  K: "ab2@5 ~@5 ab2 ~ ab2@4 ~@2 ab2@3 ~ g2@2", L: "f2@6 ~@4 f2@2 g2@6 ~@4 g2 ~",
  M: "ab2@6 ~@2 ab2 ~ eb2 ~ ab1@5 ~ bb1@5 ~", N: "eb2@6 ~@2 eb2 ~ f2 ~ g2@7 ~@3 g2 ~",
  O: "ab2@7 ~@3 eb2 ~ ab2@4 ~@2 ab2@4 g2 ~", P: "f2@6 ~@4 f2@2 g2@5 ~@5 g2 ~", Q: "ab2@7 ~@3 ab2 ~ ab2@5 ~ bb2@5 ~",
  R: "g2@6 ~@4 g2 ~ c3@6 ~@4 c3@2", S: "g2@5 ~@5 g2 ~ c3@5 ~@5 c3@2", T: "f2@6 ~@4 f2 ~ f2@7 ~@3 g2 ~",
  U: "ab2@6 ~@4 ab2 ~ ab2@5 ~ bb2@5 ~", V: "eb2@11 ~ g2@12", W: "~ ab2@14 ~ ab1@8", X: "[~ bb1@10 ~ eb2@28 ~@8]/2",
})).s("gm_fretless_bass").gain(0.5)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A B@3 A B@3 C D@2 E A B@3 A B@3 F G@2 E A B@3 A H@2 I J@2 ~@11 K L M@2 K N@2 O P Q R@2 S T@6 U V@3 W@3
>`.pickRestart({
  A: "[eb3,eb4,g4] [g3,d4,f4], bb3@11 ~", // Eb G7
  B: "[[ab3,c4,eb4]@18 ab3@3 [g3,bb3]@3 [ab3,c4]@12 bb3@11 ~ c4@18 [bb3,d4,f4]@6, ~@3 eb4@8 ~, ~@18 c4@5 ~@13 g3@30 ~@6]/3", // Ab Gm Ab Bb
  C: "[g2,f3,bb3,d4] [c3,g3,bb3,eb4]", // Gm7 Cm7
  D: "[[g2,bb3,d4,f4]@2 [c3,g3,bb3]@2 bb3@2 c4 [g2,f3,bb3,d4], ~@2 eb4@5 ~, ~@4 [f2,ab3]@3 ~]/2", // Gm7 C7 Gm7 Fm
  E: "[ab2,g3,c4,eb4]@3 [bb2,f3,bb3,d4]", F: "~ a3 bb3 d4 [c3,g3,bb3,eb4]@4, [g2,f3] ~, d4@3 ~@5, bb3 ~@3",
  G: "[~@3 a3@3 bb3@2 ~ f4@3 [c3,g3,bb3]@12 bb3@12 c4@6 [g2,f3,bb3,d4]@6, [g2,d4]@2 ~@2 [f2,ab3]@3 ~, f4@3 ~ eb4@10 ~@2, bb3 ~@7]/2", // C7 Gm7 G5 Fm
  H: "[[ab3,c4,eb4]@6 ab3 [g3,bb3] [ab3,c4]@4 [g3,bb3]@4, ~@3 eb4@5, ~@18 c4@5 ~@25]/2", // Ab Gm Ab Gm
  I: "[ab2,c4]@3 [bb2,f3,bb3,d4], eb4, g3 ~", // Ab Bb
  J: "[[g3,bb3,eb4]@7 ~@3 [f3,bb3]@2 ~@3 [g3,bb3,eb4]@2 ~@4 [bb2,f3,d4]@3 [eb3,g3,eb4]@7 ~@17, eb3@9 eb3@2 ~@4 eb3@6 ~@27, ~@10 d4@5 ~@6 bb3@10 ~@17]/2", // Eb Bb5 Eb Bb Eb
  K: "[eb3,eb5] [f3,f5] [g3,g5] [ab3,ab5] [bb3,bb5]@2 [c4,c6]@2", L: "[ab3,ab5]@23 ~",
  M: "[[ab3,ab5]@3 [g3,g5]@3 [f3,f5]@3 eb5@12 bb4@6 eb5@4 ~@2 [bb3,bb5]@3 [eb3,eb5]@6 [f3,f5]@6, ~@3 eb3@8 ~@5]/2", // Ab G F Bb Eb F
  N: "[[ab3,ab5]@18 ~@11 [d3,d4]@4 [eb3,eb4,eb5]@12 [bb3,bb4]@3, ~@18 [c4,c5]@9 d5@5 ~@16, ~@24 c3@5 ~@19]/2", // Ab D Eb Bb C
  O: "g5 ab5 [ab3,ab4] [bb3,bb4,bb5] [g3,g4,g5]@2 [f3,f4,f5]@2, [g3,g4]@5 ~@19", // Ab Bb G F G
  P: "[bb3,bb4] [a3,a4] [bb3,bb4] [d4,d5] [eb4,eb5]@4", Q: "bb3 a3 bb3 [d4,bb4] [eb4,eb5]@4, f5@3 ~@5",
  R: "[~@2 bb4@7 [ab3,ab4,ab5]@12 g5@6 ~@2 [ab3,ab4]@4 [bb3,bb4,bb5]@3 [g3,g4,g5]@6 [f3,f4,f5]@6, [bb3,bb5]@9 ~@12 [g3,g4]@8 ~@19, ~@27 ab5@4 ~@17]/2", // Ab Bb G F Bb G
  S: "eb5 f5 g5 ab5 [bb3,bb5]@2 [eb4,c6]@2, eb3@11 ~@13", // Bb Cm
  T: "[ab3@12 c4@6 d4@3 ~@3 ab5@3 g5@3 f5@3 ~@18 eb5@4 ~@2 bb5@3 eb5@6 [f3,d4,f5]@6 eb5@3 f5@3 g5@3 ab5@3 bb5@6 c6@6 ~@12 ab3@5 ~ [g3,bb3]@5 ~@4 d5@5 ~@13 bb4@3, ab5@23 ~ [ab3,c4]@11 ~ g3@29 ~@7 g3@10 ~@14 [c4,ab5]@18 ~@30, ~@21 eb4@44 ~@7 eb4@12 [d4,f4]@12 eb4@48, ~@33 eb5@12 bb4@7 ~@62 c5@9 ~@6 eb5@13 ~@2, ~@36 bb3@11 ~ c4@17 ~ bb3@16 ~@2 bb3@23 ~@13 [ab3,c4]@11 ~ [g3,bb3]@12]/6", // Dm Gm Ab Fm Dm Ab Gm
  U: "~@3 ab5@4 ~@2 bb5@3 g5@6 [f3,bb3,d4,f5]@6, [g3,c4]@3 ~", // Bb C5
  V: "[[g3,eb4]@9 [f3,d4]@6 [g3,bb3,eb4]@6 [f3,d4]@3 [g3,eb4]@12 [g2,f3,d4]@13 ~ eb3@14 ab3@8, bb3@11 ~@10 bb3@43 ~@8, ~@49 [ab2,c4]@23]/3", // Cm Dm Eb Dm Cm G7 Ab
  W: "[~ [bb2,f3,bb3,d4]@11 [eb2,bb2,g3,eb4]@58 ~@2]/3", // Bb Eb
})).s("gm_string_ensemble_1").gain(0.32)

// other · orchestral harp · "Harp"
const orchestral_harp = note("<~@32 A B ~@10 C ~@20 A B ~@4>".pickRestart({
  A: "~@14 [eb3,f3] [g3,ab3,bb3] c4 [d4,eb4] [f4,g4,ab4] bb4 [c5,d5] [eb5,f5,g5] ab5 [bb5,c6]", B: "[d6,eb6] ~@23",
  C: "[ab5,bb5] g5 [eb5,f5] [f5,g5,ab5] eb5 [c5,d5] [eb5,f5,g5] d5 [bb4,c5] [f4,g4,ab4] eb4 [c4,d4] [ab3,bb3] c4 [d4,eb4] [f4,g4,ab4] bb4 [c5,d5] [eb5,f5,g5] ab5 [bb5,c6] [d6,eb6,f6] g6 [ab6,bb6]", // Absus2 Ebsus2 Fm Csus2 Eb Bbsus2 Fm Csus2 …
})).s("gm_orchestral_harp").gain(0.21)

// drums · ride
const ride = s("rd").struct("<~@68 [~@5 x ~@6] ~@2>").gain(0.39)

stack(piano, bass, string_ensemble_1, orchestral_harp, ride)

More by Television Theme Songs