Strudelify
Sacrifice cover art

Sleeping With The Past

Sacrifice

Elton John

KeyD♭ majorTempo113 bpm
0:00/0:00
// Sacrifice — John Elton
// 113 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(113/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.

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@93 A B ~@2 A B ~@24 A B ~@2 A B ~@8>".pickRestart({
  A: "~@3 ab4 f5 eb5 db5@2", B: "~@3 gb4 db5 bb4 gb4@2",
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.7)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A B C D A B E F A G H I J E K L M F N O P F Q R S E T U A E N V W X Y Z AA AB AC X AD AE@3 AF AG A B C D A G H I J E
  K L M F N O P F Q R S E T U A E N V W X Y Z AA AB AC X AD AE@3 AF AG A B C D AH AI AJ AK AH AI AJ AK S E T U A E N V W
  X Y Z AA AB AC X AD AE@3 AF AG AH AI AJ AK AH AI AJ AK A B C D AL@2
>`.pickRestart({
  A: "db2", B: "f1@7 f1", C: "gb1@3 gb1@2 gb1@2 gb1", D: "gb2", E: "gb1", F: "gb1@3 gb1 gb1@4", G: "gb1@6 db2 d2",
  H: "eb2@7 eb2", I: "ab2@3 ab1", J: "db2@3 ab1", K: "eb2@7 ab2", L: "ab2@3 ab2 ab1@4", M: "bb1", N: "ab1@3 ab1 ab1@4",
  O: "ab1@3 ab1 ab1@2 ab1 a1", P: "bb1@3 bb1 bb1@2 bb1@2", Q: "ab1@3 ab1 ab1@3 eb2", R: "ab2@4 ab1 bb1 c2@2",
  S: "db2@2 db2 ab1", T: "eb2@3 eb2 eb2@3 gb2", U: "ab2 ab1!2 ab1@4 ab1", V: "ab1!3 ab1@3 ab1@2",
  W: "db2@3 db2 db2@3 ab1", X: "db2 db2@2 db2 db2@2 ab1@2", Y: "gb1@3 gb1 gb1@3 gb1", Z: "gb1 gb1@2 gb1 gb1@2 gb1 g1",
  AA: "ab1@3 ab1 ab1@3 ab1", AB: "ab1 ab1@2 ab1 ab1@2 ab1@2", AC: "db2@3 db2 db2@2 ab1@2", AD: "db2@3 db2 db2@3 db2",
  AE: "db2@3 db2 db2@4", AF: "f1@3 f1 f1@4", AG: "gb1@3 ab1 ab1@4", AH: "db2!2", AI: "gb1@4 gb1@2 db2 d2",
  AJ: "eb2@3 eb2 eb2@2 bb2@2", AK: "ab2@3 ab1 ab1@2 ab1@2", AL: "[db2@5 ~@3]/2",
})).s("gm_fretless_bass").gain(0.48)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A B C@2 A B C@2 D E F G H I J K L M N@2 O P Q@2 R S T U V S W@2 X Y Z AA AB AC AD Y AE Y Z AA AF AG A B C@2 D E F G
  H I J K L M N@2 O P Q@2 R S T U V S W@2 X Y Z AA AB AC AD Y AE Y Z AA AF AG A B C@2 AH AI AJ AK AL AI AJ AK R S T U V
  S W@2 X Y Z AA AB AC AD Y AE Y Z AA AF AG AL AI AJ AK AL AI AJ AK A B C@2 AM@2
>`.pickRestart({
  A: "ab3@3 ab3 f4 db4 ab3@2, db3, f4 ~", B: "~@3 ab3 c4 ab3 f3@2, f4, f3@3 ~, c4 ~",
  C: "[gb3@2 gb3 db4@2 db4@2 db4@2 gb3 ab3 bb3@2 db4@3, bb3@11 ~@5, db4@3 ~@13]/2",
  D: "[f3,ab3]@3 [f3,ab3]@2 [f3,ab3]@3", E: "[bb3,db4]@3 [bb3,db4]@2 [bb3,db4]@3, gb3",
  F: "gb3@3 [gb3,bb3]@2 [bb3,db4]@3", G: "eb3@3 eb3 ab3@2 c4@2, c4@3 ~, ab3 ~",
  H: "db4@3 [db4,f4]@2 [f3,ab3] [f3,db4]@2, [f3,ab3]@5 ~@3", I: "gb3@3 gb3@2 bb3 [bb3,db4]@2, bb3@5 ~@3",
  J: "~@3 [bb3,db4]@2 [bb3,db4]@3, gb3", K: "[ab3,c4]@5 [ab3,c4]@3, eb3", L: "[bb3,db4]@3 [bb3,db4]@2 [db4,f4]@3, f3",
  M: "bb3@3 [bb3,db4]@5, gb3", N: "[~@3 [c3,eb3]@2 [c3,eb3]@3 [c3,eb3]@3 [c3,eb3]@2 [c3,eb3]@3, [ab3,c4,eb4]]/2",
  O: "bb3@3 [db3,bb3]@2 [db3,bb3]@3, [db4,f4]", P: "gb3@3 [gb3,bb3]@2 [gb3,bb3]@3, db4",
  Q: "[eb3@3 [c3,eb3]@2 [c3,eb3]@2 [c3,eb3] ab3 [ab3,c4]@4 [c4,eb4]@3, c4@9 ~@7, ab3 ~]/2", // Cm Ab Cm
  R: "[f3,ab3]@3 [f3,ab3]@2 [f3,ab3]@3, db4", S: "[gb3,bb3]@3 [gb3,bb3]@2 [gb3,bb3]@3, db4",
  T: "~@3 [gb3,bb3]@2 [gb3,bb3]@3, db4", U: "ab3@3 [c3,ab3]@2 ab3@3, [eb3,c4]", V: "f3@3 [f3,ab3]@2 [f3,ab3]@3, db4",
  W: "[eb3@3 [c3,eb3]@2 [c3,eb3]@3 ~@3 [c3,eb3]@2 [c3,eb3]@3, [ab3,c4]]/2", // Cm Ab
  X: "[f3,db4]@2 [f3,db4] [f3,ab3]@2 [f3,db4]@3, ab3@3 ~@5", Y: "~@2 [f3,ab3] [db3,f3]@2 [f3,ab3]@3",
  Z: "[bb3,db4]@2 [bb3,db4] [gb3,bb3]@2 [bb3,db4]@3, gb3@3 ~@5", AA: "~@2 [gb3,bb3] [db3,gb3]@2 [gb3,bb3]@3",
  AB: "[ab3,c4]@2 [ab3,c4] [eb3,ab3]@2 [eb3,c4]@3, eb3@3 ~@5", AC: "~@2 [eb3,ab3] [c3,eb3]@2 [eb3,ab3]@3",
  AD: "[f3,db4]@2 [f3,db4] [f3,ab3]@2 [f3,db4]@3", AE: "db4@2 [f3,db4] [f3,ab3]@2 [f3,db4]@3", AF: "[f3,ab3,c4,eb4]",
  AG: "[gb3,bb3,db4,eb4] [ab3,c4,eb4]", AH: "[f3,ab3]", AI: "[gb3,bb3,db4]", AJ: "[gb3,bb3,eb4]", AK: "[ab3,c4,eb4]",
  AL: "[f3,ab3,db4]", AM: "[[f3,ab3]@5 ~@3]/2",
})).s("gm_epiano2").gain(0.3).pan(0.6)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<~@51 A B C D A B C D A B D@2 A B D@2 ~@26 A B C D A B C D ~@36>".pickRestart({
  A: "~@2 [f4,ab4,db5]!7 ~@7", B: "~@2 [gb4,bb4,db5]!7 ~@7", C: "~@2 [gb4,bb4,eb5]!7 ~@7", D: "~@2 [ab4,c5,eb5]!7 ~@7",
})).s("gm_lead_3_calliope").gain(0.1).pan(0.4)

// other · pad new age · "FANTASIA"
const pad_new_age = note(`<
  ~@4 A@2 ~@2 B@2 ~@15 C ~@3 C ~@12 D E ~@2 F@2 ~@2 B@2 ~@15 C ~@3 C ~@12 D E ~@2 F@2 ~@2 G@2 H@2 ~@2 H@2 ~ C ~@3 C ~@12
  D E ~@2 F@2 H@2 ~@2 H@2 ~@4 A@2 ~
>`.pickRestart({
  A: "[~@2 db6 eb6@2 ab6@2 f6@2 ~@7]/2", B: "[~@3 eb6@2 ab6@2 f6@3 ~@6]/2", C: "~ ab5 db6 ab6@5", D: "db6", E: "gb6",
  F: "[~@2 db6 gb6@2 c6@2 db6@2 ~@7]/2", G: "[~@3 eb6@2 ab6@2 f6@2 ~@7]/2", H: "[~@4 gb6 f6@2 eb6@2 db6@2 bb5@5]/2",
})).s("gm_pad_new_age").gain(0.31).pan(0.4)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@59 A@2 B@2 A@2 C@2 ~@70>".pickRestart({
  A: "db4/2", B: "c4/2", C: "eb4/2",
})).s("gm_string_ensemble_1").gain(0.11)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@3 B A@3 B A@17 C A C A C A C A C A@15 B A@17 C A C A C A C A C A@15 B A@3 B A@3 B A C A C A C A C A C A@15 B A@3 B
  A@3 B ~@2
>`.pickRestart({
  A: "x!2", B: "x ~@3 x!3 ~", C: "x!5 ~@3",
})).gain(0.25)

// drums · rim
const rim = s("rim").struct("<~ [~@3 x]!134 ~@2>").gain(0.28)

// drums · hihat
const hihat = s("hh").struct("<[~@6 x!3 ~@3 x ~@3] [x!8]!134 ~@2>").gain(0.12)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~@3 A ~@3 A ~@23 A ~@7 A ~ A ~ A ~ A ~@3 A ~@23 A ~@7 A ~ A ~ A ~ A ~@3 A ~@15 A ~@7 A ~ A ~ A ~ A ~@11 A ~@2
>`.pickRestart({
  A: "~@3 x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@3 A ~@3 A ~@23 A ~@7 B ~ A ~ A ~ C ~@3 A ~@23 A ~@7 B ~ A ~ A ~ C ~@3 A ~@15 A ~@7 B ~ A ~ A ~ C ~@11 A ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x!2 ~@3", C: "~@2 x ~@2 x ~@2",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A ~@3 A ~@31 B ~ C ~ D ~ B ~@3 A ~@31 B ~ C ~ D ~ B ~@3 A ~@23 B ~ C ~ D ~ B ~@11 A ~@2
>`.pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@6", C: "~ x", D: "~@3 x!2 ~@3",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@134 [~@15 x] ~@2>").gain(0.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!8]!134 ~@2>").gain(0.94)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<[~@7 x] ~@136>").gain(0.36)

// drums · shaker
const shaker = s("sh").struct("<~ [~@3 x]!134 ~@2>").gain(0.25)

stack(
  acoustic_guitar_steel, bass, epiano2, lead_3_calliope, pad_new_age, string_ensemble_1, kick, rim, hihat, low_tom,
  mid_tom, high_tom, ride, cabasa, woodblocks, shaker
)

More by Elton John