Strudelify

hallelujah

L. Cohen

KeyE♭ majorTempo85 bpm
0:00/0:00
// hallelujah — L. Cohen
// 85 bpm, 6/8, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5981117; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 78 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trombone
const trombone = note(`<
  A B A B A@3 C D E F G C H I J K L M@2 N O P Q N O R N S T@2 A@3 C H@2 U V W X I Y Z AA M@2 N O P Q N O R N S AB@2 AC
  AD AE AF K L AG@2 AH@2 AI@2 AH@2 AJ AK N@2 AL@2
>`.pickRestart({
  A: "g4", B: "g4@5 ~", C: "g4@5 g4", D: "ab4@2 ab4@2 ab4!2", E: "ab4@2 ab4 ab4@2 f4", F: "g4@4 ab4 g4", G: "f4@5 ~",
  H: "ab4@2 ab4 ab4@2 ab4", I: "g4!2 g4@3 g4", J: "ab4!2 ab4@3 ab4", K: "bb4!2 bb4@3 c5", L: "b4 b4@3 b4!2",
  M: "[c5 c5@3 ~@2]/2", N: "ab4", O: "ab4@3 ab4@2 ab4", P: "g4 bb4", Q: "c5@3 bb4@2 g4", R: "bb4", S: "~ ab4",
  T: "[g4@7 ~@5]/2", U: "g4@2 g4@2 ab4 g4", V: "f4@2 ~", W: "g4@4 g4!2", X: "ab4@2 ab4 ab4@2 g4",
  Y: "ab4@4 ab4@2 ab4@4 ab4!2", Z: "bb4@3 bb4!2 c5", AA: "b4 b4@3 b4@2", AB: "[g4@7 ~@4 g3]/2",
  AC: "bb3@2 bb3 bb3@2 bb3", AD: "c4@2 c4 d4@2 bb3", AE: "eb4!2 eb4@3 c4", AF: "eb4!2 f4@2 ~ ab4",
  AG: "[c5@2 c5@6 ~ c5@2 eb5]/2", AH: "[f5@3 f5@6 f5@2 eb5]/2", AI: "[c5@3 c5@6 c5@2 eb5]/2", AJ: "c5@4 db5 c5",
  AK: "bb4@5 ab4", AL: "[g4@5 ~]/2",
})).s("gm_trombone").gain(0.25)

// other · trombone
const trombone_2 = note(`<
  A B A B A@3 C D E F@2 C G H I J K L@2 A M N O A M P@2 Q R@2 A@3 M S E T@2 U V H W X Y L@2 A M N O A M P@2 Q Z@2 AA AB
  H I J K L@2 AC AD AE AF AC AD AG@2 ~ AH AI@2
>`.pickRestart({
  A: "eb4", B: "eb4@5 ~", C: "eb4@5 eb4", D: "eb4@2 eb4@2 eb4!2", E: "eb4@2 eb4 d4@2 d4", F: "[eb4@2 eb4@7 d4@3]/2",
  G: "eb4@2 eb4 f4@2 d4", H: "c4!2 c4@3 eb4", I: "c4!2 c4@3 c4", J: "eb4!3 d4@2 d4", K: "f4 f4@3 f4 d4",
  L: "[g4 g4@3 ~@2]/2", M: "eb4@3 eb4@2 eb4", N: "eb4 f4", O: "g4@3 eb4@2 eb4", P: "[eb4@3 d4]/2", Q: "~ eb4",
  R: "[eb4@7 ~@5]/2", S: "eb4@2 eb4 eb4@2 eb4", T: "[eb4@2 eb4@7 d4@2 ~]/2", U: "eb4@4 eb4!2", V: "eb4@2 eb4 f4@2 eb4",
  W: "c4@4 c4@2 c4@4 c4!2", X: "eb4@3 eb4 d4!2", Y: "f4 f4@2 f4@2 d4", Z: "[eb4@7 ~@4 g3]/2", AA: "bb3@2 bb3 bb3@2 bb3",
  AB: "c4@2 c4 d4@2 bb3", AC: "ab3", AD: "ab3@3 ab3@2 ab3", AE: "ab3 bb3", AF: "c4@3 ab3@2 ab3", AG: "[ab3@3 g3]/2",
  AH: "d4", AI: "[eb4@5 ~]/2",
})).s("gm_trombone").gain(0.25)

// other · trombone
const trombone_3 = note(`<
  A B A C D B D E F G H I J K L M N O P Q R S T@2 R S U V W@3 D B D E X G H Y Z AA L AB AC AD P Q R S T@2 R S U V AE@3
  AF K L M N O P Q AG AH AI AJ AG AH AK@2 ~ I AL@2
>`.pickRestart({
  A: "eb3@4 eb3 d3", B: "c3@5 bb2", C: "c3@5 ~", D: "eb3@5 d3", E: "c3@5 c3", F: "ab2@2 eb3@2 ab3 g3",
  G: "f3@2 f3 f3@2 bb2", H: "eb3", I: "bb2", J: "eb3@5 eb3", K: "ab2@2 ab3 bb3@2 f3", L: "c3 g3 c4@3 bb3",
  M: "ab3!2 f3@3 ab3", N: "bb3!2 bb3@3 ab3", O: "d4 d4@3 d4 g3", P: "c4@5 g3", Q: "c3 ~@2", R: "ab2 eb3",
  S: "ab3@3 c4@2 bb3", T: "[g3@3 g3@6 eb3@2 eb3]/2", U: "g3@4 ab3 g3", V: "f3@5 eb3", W: "[eb3@13 ~@5]/3",
  X: "ab2@2 eb3 ab3 g3 f3", Y: "bb2@5 ~", Z: "eb3@4 eb3!2", AA: "ab3@2 ab3 bb3@2 bb3", AB: "ab3@4 ab3@2 f3@4 ab3!2",
  AC: "bb3@3 bb3!2 ab3", AD: "d4 d4@2 d4@2 g3", AE: "[eb3@13 ~@4 g3]/3", AF: "bb3@2 bb3 bb3@2 eb3", AG: "db2 ab2",
  AH: "db3@3 f2@2 f2", AI: "f2 g2", AJ: "ab2@3 ab2@2 ab2", AK: "eb2/2", AL: "[eb2@5 ~]/2",
})).s("gm_trombone").gain(0.25)

stack(trombone, trombone_2, trombone_3)

More by L. Cohen