Strudelify

Hymne

Vangelis

KeyD majorTempo69 bpm
0:00/0:00
// Hymne — Vangelis
// 69 bpm, 6/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 63 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(69/3)

// 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 · synth strings 1
const synth_strings_1 = note(`<
  A B C D E F G H I B C J E F G K L M N O P Q R J S T G H U B R J V F W X Y B R J V F G Z U B R J V F AA AB AC B R J AD
  AE AF@5
>`.pickRestart({
  A: "d4@4 f#4@7 g4", B: "a4@3 ~ a4@8", C: "b4@3 c#5 d5@7 c#5", D: "b4@3 a4 b4@8", E: "a4@3 ~ f#4@7 e4",
  F: "f#4@3 ~ e4@8", G: "d4@3 ~ b3@8", H: "c#4@3 d4 e4@8", I: "d4@3 e4 f#4@7 g4", J: "b4@3 ~ b4@8", K: "d4@3 e4 d4@8",
  L: "e4@3 ~ g4@6 ~ f#4", M: "e4@3 d4 e4@8", N: "e4@3 f#4 g4@6 ~ a4", O: "g4@3 ~ e4@8", P: "d4@3 e4 f#4@8",
  Q: "a4@3 b4 a4@8", R: "b4@3 ~ d5@8", S: "a4@3 g4 f#4@8", T: "f#4@3 a4 e4@8", U: "d4@3 ~ f#4@8", V: "a4@3 ~ f#4@8",
  W: "e4@3 ~ g4@4 ~@4", X: "e4 d4@2", Y: "d4@3 ~ f#4@7 g4", Z: "c#4@3 ~ e4@8", AA: "e4@3 ~ g4@8", AB: "e4@3 ~ e4@8",
  AC: "d4@3 ~ f#4@6 ~@2", AD: "b4@3 ~ d5@4 a4@4", AE: "f#4@2 ~@3 g4", AF: "[e4 ~@9 d5@5, ~ d4@11 ~@3]/5",
})).s("gm_synth_strings_1").gain(0.27)

// other · bagpipe
const bagpipe = note("<~@20 A B C D E F G H A B C D E F I J ~@27>".pickRestart({
  A: "d4@3 e4 f#4@7 g4", B: "a4@3 b4 a4@8", C: "b4@3 c#5 d5@7 c#5", D: "b4@3 a4 b4@8", E: "a4@3 g4 f#4@7 e4",
  F: "f#4@3 a4 e4@8", G: "d4@3 c#4 b3@8", H: "c#4@3 d4 e4@8", I: "e4@3 f#4 g4@4 f#4@4", J: "e4 d4@2",
})).s("gm_bagpipe").gain(0.26)

// other · sitar · ""Opera Sauvage.""
const sitar = note("<~@36 A B C D E F G H A B C D E F I J K B L D M N O@4 ~>".pickRestart({
  A: "d4@3 e4 f#4@7 g4", B: "a4@3 b4 a4@8", C: "b4@3 c#5 d5@7 c#5", D: "b4@3 a4 b4@8", E: "a4@3 g4 f#4@7 e4",
  F: "f#4@3 a4 e4@8", G: "d4@3 c#4 b3@7 a3", H: "c#4@3 d4 e4@8", I: "e4@3 f#4 g4@7 f#4", J: "e4@3 d4 e4@8",
  K: "d4@3 e4 f#4@6 ~ g4", L: "b4@3 c#5 d5@6 ~ c#5", M: "b4@3 c#5 d5@4 a4@4", N: "f#4@2 a4@3 g4", O: "[e4 d4@11]/4",
})).s("gm_sitar").gain(0.37)

// other · whistle
const whistle = note("<~@44 A B C D E F G H A B C D I J K@2 ~@3>".pickRestart({
  A: "d6@3 e6 f#6@7 g6", B: "a6@3 b6 a6@8", C: "b6@3 c#7 d7@7 c#7", D: "b6@3 a6 b6@8", E: "a6@3 g6 f#6@7 e6",
  F: "f#6@3 a6 e6@8", G: "e6@3 f#6 g6@7 f#6", H: "e6@3 d6 e6@8", I: "b6@3 c#7 ~@8", J: "~@5 g6", K: "[e6 d6@3 ~@2]/2",
})).s("gm_whistle").gain(0.31)

// chords · synth strings 2
const synth_strings_2 = note("<A@6 B@8 C@8 D@4 E F@6 G@8 H@8 I@8 J@6>".pickRestart({
  A: "[~@5 a3@8 ~ b3@5 ~ g3@5 ~ [d3,f#3]@5 ~ a3@4, ~ [d3,f#3]@2 ~@15]/6", // D
  B: "[~@8 [b2,e3]@19 ~@5 [c#3,e3]@20 ~@16 a3@32 ~@4 b3@20 ~@4 g3@20 ~@4 [d3,f#3]@20 ~@4 a3@16, ~@7 [d3,f#3]@2 ~@15]/8", // E5 C#m D
  C: "[~@2 [b2,e3]@5 ~ [a2,d3]@5 ~ [b2,e3]@5 ~ [a2,c#3]@5 ~ [b2,e3]@5 ~ [a2,c#3]@5 ~@4 a3@7, ~@19 [d3,f#3]@2 ~@3]/8", // E5 D5 E5 A E5 A D
  D: "[~@2 b3@5 ~ g3@5 ~ [d3,f#3]@5 ~ a3@4]/4", E: "~ [b2,e3]@2",
  F: "[~@2 [c#3,e3]@5 ~@7 [c#5,e5]@6 [b4,d5]@6 [b4,d5,b5]@6 [d3,f#3]@4, ~@4 [f#5,a5]@3 ~@11, ~@2 [d3,f#3] ~@6, ~@11 a3@8 ~ b3@5 ~ g3@5 ~@5]/6", // C#m Bm D F#m D
  G: "[~ [a5,c#6]@3 [e5,b5]@3 [d5,a5]@3 ~@3 [c#5,e5]@3 [b4,d5]@3 [b4,d5,b5]@3 [d3,f#3]@2, ~@2 a3@5 ~ [b2,e3]@5 ~ [a2,d3]@5 ~ [f#5,a5]@6 ~@22, ~@5 [d3,f#3] ~@6, ~@23 a3@8 ~ b3@5 ~ g3@5 ~@5]/8", // A E5 D5 C#m Bm D E5 D5 …
  H: "[~ [a5,c#6]@3 [e5,b5]@3 [e5,c#6]@3 ~@3 [c#5,e5]@3 [b4,d5]@3 [b4,d5,b5]@3 [d3,f#3]@2, ~@8 a3@20 ~@4 [b2,e3]@19 ~@5 [c#3,e3]@20 ~@4 [f#5,a5]@24 ~@88, ~@5 [d3,f#3] ~@6, ~@23 a3@8 ~ b3@5 ~ g3@5 ~@5]/8", // A E5 C#m Bm D E5 C#m F#m …
  I: "[~ [a5,c#6]@3 [e5,b5]@3 [a5,c#6]@3 ~@3 [c#5,e5]@3 [b4,d5]@3 [b4,d5,b5]@3 [d3,f#3]@2, ~@2 a3@5 ~ [b2,e3]@5 ~ [a2,c#3]@5 ~ [f#5,a5]@6 ~@22, ~@5 [d3,f#3] ~@6, ~@23 a3@8 ~ b3@5 ~ g3@5 ~@5]/8", // A E5 A C#m Bm D E5 A …
  J: "[~ [a5,c#6]@3 ~@6 a3@8, ~@2 a3@5 ~ [d3,d6]@28, ~@7 f#5@11]/6", // A D
})).s("gm_synth_strings_2").gain(0.2)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@8 A@8 B@6 C@5 D@8 E F@7 D@8 G H@5 I@6>".pickRestart({
  A: "[~@4 [f#4,a4]@12 [c#4,e4]@12 b3@23 ~ f#4@12 ~@4 a4@8 [b3,e4]@12 [a3,d4]@8, ~@7 d4@9 [a3,c#4]@3 ~@5]/8", // F#m C#m E5 D5 A
  B: "[~@2 b4@2 ~ a4@2 ~ b4@2 ~ a4@2 [f#4,a4]@3 [c#4,e4]@2, ~ [b3,e4]@3 [a3,c#4]@3 [b3,e4]@3 [a3,c#4]@3 ~@5]/6", // F#m C#m E5 A E5 A
  C: "[~@4 b3@23 ~ f#4@12 ~@4 a4@8 [b3,e4]@8, ~ d4@9 [a3,c#4]@3 ~@2]/5", // E5 A
  D: "[~@4 [c#4,e4]@12 [f#4,a4]@12 [c#4,e4]@12 b3@23 ~ f#4@12 ~@4 a4@8 [b3,e4]@8, ~@10 d4@9 [a3,c#4]@3 ~@2]/8", // C#m F#m C#m E5 A
  E: "~ [a3,d4]@2", F: "[~@4 [f#4,a4]@12 [c#4,e4]@12 b3@23 ~ f#4@12 ~@4 a4@8 [b3,e4]@8, ~@7 d4@9 [a3,c#4]@3 ~@2]/7",
  G: "~ [a3,c#4]@2", H: "[~@4 [f#4,a4]@12 [c#4,e4]@12 b3@23 ~ f#4@8, ~@7 d4@8]/5",
  I: "[~ a4 d4@7, ~ [a3,c#4]@3 ~@14]/6", // A
})).s("gm_string_ensemble_1").gain(0.07)

// other · timpani
const timpani = note("<~@36 A B C@3 ~@3 A B C@3 ~@3 A B C@3 ~ D E F ~@2>".pickRestart({
  A: "~ a2@2", B: "a2@3 b2 a2@8", C: "[~ b2@3 a2@3 ~@2]/3", D: "~@8 d2@3 d2!13", E: "d2!24", F: "d2!7 d2@2 ~@15",
})).s("gm_timpani").gain(0.4)

stack(synth_strings_1, bagpipe, sitar, whistle, synth_strings_2, string_ensemble_1, timpani)

More by Vangelis