Strudelify

Evening Prayer From Hansel and Gretel Act II

Humperdinck

KeyG majorTempo95 bpm
0:00/0:00
// Evening Prayer From Hansel and Gretel Act II — Humperdinck
// 95 bpm, 4/4, key G 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/5978189; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 31 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/4)

// 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 · recorder · "Soprano Recorder"
const recorder = note("<~@8 A B C D E F G H ~@3 I@7 J@5>".pickRestart({
  A: "d#5@2 d#5@2 d5@2 d5 d#5", B: "f5@2 f5@2 e5@3 f5", C: "g5@2 g5@2 f#5@3 g5", D: "a5@2 a5@2 g5@2 a5 b5",
  E: "c6 e6!2 g6", F: "g6 d6", G: "a5 f5", H: "a5@2 a5 ~",
  I: "[c6@9 ~ b5@4 a5@5 g5@4 b5@4 b5@4 d6@4 e6@4 d6@4 d6@8 g6@4 d6@4 d6@4 b5@4 b5@4 a5@2 g5@2 a5@4 g5@2 a5@2 b5@4 a5@2 g5@2 a5@4 e5@2 f#5@2 g5@12 ~]/7",
  J: "[~@15 e5@2 f#5@2 g5@8 g5@8 g5@8 a5@8 b5@24 ~@5]/5",
})).s("gm_recorder").gain(0.2)

// other · recorder · "Tenor Recorder"
const recorder_2 = note("<A B C D E F G H I J K L ~ M N O P Q R S@8 T@4>".pickRestart({
  A: "b4 d5!2 g4", B: "c5@2 a4@2 b4 f#4 g4 a4", C: "b4 g4", D: "g4@2 f#4 e4 f#4@3 d4", E: "a4!2 g4!2",
  F: "e4@4 e4 f#4 g4 a4", G: "g4 g#4 a4@2", H: "g#4@3 g#4 e4@4", I: "a4 a#4", J: "b4 c5", K: "g4@4 f#4 e4 f#4 g4",
  L: "a4@2 b4 ~", M: "c5@2 b4 a4 b4@4", N: "d4 f4!2 a4", O: "f4@2 e4 d4 e4@2 ~@2", P: "g4 b4!2 d5", Q: "d5 c#5 b4 g4",
  R: "b4 a#4", S: "[a4@19 b4@8 g5@8 g5@12 f#5@4 f5@16 e5@8 d#5@8 d5@8 c5@8 b4@4 b4@2 a4@2 b4@8 ~@4 a4@2 g4@2 a4@5]/8",
  T: "[~@3 c5@4 b4@2 b4@2 c5@4 b4@2 b4@2 c5@8 c5@8 b4@24 ~@5]/4",
})).s("gm_recorder").gain(0.2)

// other · recorder · "Bass Recorder"
const recorder_3 = note("<A B C D E F G H I J K L ~ M ~ N O P Q R ~@5 S@6>".pickRestart({
  A: "g4 f#4 e4 d4", B: "c4@2 d4 e4 g4 a4 b4 a4", C: "g4@2 b3 d4", D: "d4@7 b3", E: "a3 b3", F: "c4 d4 c4 d4",
  G: "d4 d4@3", H: "e4 d4 c4@2", I: "d#4 d4", J: "f4 e4", K: "c#4@4 d4 c#4 d4 e4", L: "f#4 d#4 e4 ~", M: "g4",
  N: "a3@2 c4 a3", O: "e4!2", P: "a4 a3", Q: "d4", R: "a3@9 ~@7",
  S: "[~@3 g4@16 d4@4 f#4@2 e4@2 f#4@8 g3@16 g3@8 g4@16 g3@16 ~@5]/6",
})).s("gm_recorder").gain(0.25)

stack(recorder, recorder_2, recorder_3)