Strudelify

to the stars

Randy Edelman

KeyC majorTempo84 bpm
0:00/0:00
// to the stars — Randy Edelman
// 84 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5419849; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 48 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/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 · violin · "Violin II"
const violin = note("<A B C B D E F@2 G H@2 I@3 J@2 K@2 L M K@2 N O@2 P Q R ~@3 S T@2 U V W X Y@7 Z@3>".pickRestart({
  A: "e4@3 e4", B: "g4", C: "e4@3 d4", D: "c5", E: "c5@3 b4", F: "a#4/2", G: "d4", H: "[d4 a4@2 a4]/2", I: "[d4 c#4]/3",
  J: "d4/2", K: "e4", L: "e4 g4", M: "d4 c4", N: "e4@4 e5 c5 g4 e4", O: "[d4@2 c4 d4@5]/2", P: "d5 c5", Q: "d5 b4",
  R: "c5@2 c5 b4", S: "~@3 b4", T: "e5 d5 e5 f5 e5 d5 e5 f5", U: "g5 f5 g5 a5 g5 f5 g5 b5",
  V: "c6 b5 c6 e6 d6 g5 b5 d6", W: "c6 b5 c6 d6 c6 b5 c6 d6", X: "e6 d6 e6 f6 e6 d6 e6 f6",
  Y: "[a6@3 g6@3 a6@3 ~ b6@3 a6@3 g6@3 ~ f6@3 c6@3 ~ e6@3 d6@3 e6@3 ~ c6@3 d6@15 ~ g3@26 c4@27 g3@26 a3@20 g3@7 a4@3 b4@3]/7",
  Z: "[c5@3 ~ e5@3 d5@7 g4@6 [c5,e5]@30 ~@22]/3", // C
})).s("gm_violin").gain(0.3)

// other · violin · "Violin II" · soft notes
const violin_soft = note("<~@28 [e5 d5] [c5 e5] [c5!2] [e5@2 c5 ~] ~@16>").s("gm_violin").gain(0.2)

// chords · viola
const viola = note("<~@3 A B C D@2 E@3 F@3 G H I J K L M N O P Q R S T ~@8 U V W X@8 ~>".pickRestart({
  A: "e3@3 d3", B: "f3@3 f4", C: "g4@3 g4", D: "f4/2", E: "[f3 a3]/3", F: "[a#3 a3]/3", G: "a3", H: "b3", I: "[g3,c4]",
  J: "[g3,d4]", K: "[e3,c4] [f3,c4]", L: "[g3,c4] [g3,b3]", M: "[e3,c4]", N: "[e3,d4]", O: "e3 f3, c4",
  P: "[e3,c4]@2 [c4,d4] [b3,c4]", Q: "[e3,b3] [e3,c#4]", R: "[a3,d4]", S: "[e3,b3] [e3,c4]", T: "[f3,c4] [d3,d4]",
  U: "e3@3 d3 f3@2 e3@2", V: "e3@2 d3@2 f3@3 e3", W: "e3@6 d3@7 a3@10 c3",
  X: "[~ d3@2 e3@10 f3@3 [b3,d4]@15 ~ [c3,g3,c4]@26 [c3,g3,c4]@27 [c3,g3,c4]@26 [e3,a3]@20 g3@7 [c3,f3]@13 d4@7 g3@6 c3@28]/8", // Bm C5 A5 F5
})).s("gm_viola").gain(0.25)

// other · pizzicato strings
const pizzicato_strings = note("<~@28 A B C D E F G H ~@12>".pickRestart({
  A: "e4 g4 b4 e5 a3 g4 c#5 e5", B: "d4 g4 a4 d5 d4 f4 a4 d5", C: "e3 g#3 b3 e4 a3 e4 a4 c5",
  D: "f3 a3 c4 f4 g3 c4 d4 f4", E: "c4 e4 g4 c5 c4 e4 g4 c5", F: "b3 d4 g4 d5 b3 d4 g4 d5",
  G: "a3 c4 e4 a4 a3 d4 f4 a4", H: "c4 e4 g4 c5 g3 b3 d4 g4",
})).s("gm_pizzicato_strings").gain(0.25)

// chords · cello · "Violoncello"
const cello = note("<A B A C D B ~ E F@3 G@3 H A B I J K L M L M@2 N O P Q R S T U V W X Y Z AA AB@8 ~>".pickRestart({
  A: "g3", B: "c3", C: "b2@3 b2", D: "f3@3 e3", E: "a#2", F: "[d3 e3]/3", G: "[a#2 a2]/3", H: "f#3", I: "b2", J: "a2!2",
  K: "c3 g2", L: "a2", M: "g2", N: "g2 d2", O: "g#2 a2", P: "a2 g2", Q: "[e2,b2] [a2,c#3]", R: "d2!2",
  S: "[e2,d3] [a2,c3]", T: "[f2,c3] [g2,d3]", U: "[c3,e3]", V: "[b2,d3]", W: "[a2,c3]", X: "[c3,e3] [g2,b2,d3]",
  Y: "[e2,a2,c3,e3]", Z: "[d2,g2,d3]", AA: "[c2,a2,c3]",
  AB: "[~@3 [c2,g2,c3]@29 [c2,g2,c3]@26 [c3,g3,c4]@27 [c2,g2,c3]@26 [a1,e2,a2]@27 [f2,c3,f3]@13 [g2,b2,d3]@13 [c2,g2,c3]@28]/8", // C5 A5 F5 G C5
})).s("gm_cello").gain(0.4)

stack(violin, violin_soft, viola, pizzicato_strings, cello)