Strudelify

Greensleeves

Rinnosuke

KeyE majorTempo52 bpm
0:00/0:00
// Greensleeves — Rinnosuke
// 52 bpm, 6/8, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 2 "Piccolo" named as a pipe, played on piccolo (its tremolo strings patch is not one); ch 1 "Flutes" named as a pipe, played on flute (its pizzicato strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5593151; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 57 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(52/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · piccolo
const piccolo = note("<~@32 A B C D A B E F A B C D A B E G ~@9>".pickRestart({
  A: "~@2 c#6 ~ e6 ~ c#6 ~ f#6 ~ e6 ~@3 c#6 ~ e6 ~ c#6 ~ g#6 ~ f#6 ~",
  B: "~@2 b5 ~ d#6 ~ f#6 ~ b6 ~ f#6 ~@3 b5 ~ d#6 ~ f#6 ~ b6 ~ d#7 ~",
  C: "~@2 c#6 ~ e6 ~ f#6 ~ g#6 ~ a6 ~@3 f#6 ~ g#6 ~ a6 ~ g#6 ~ f#6 ~",
  D: "~@2 g#5 ~ c6 ~ d#6 ~ f#6 ~ g#6 ~@3 c6 ~ d#6 ~ g#6 ~ c7 ~ d#7 ~",
  E: "~@2 c#6 ~ e6 ~ f#6 ~ g#6 ~ a6 ~@3 g#6 ~ f#6 ~ e6 ~ d#6 ~ e6 ~", F: "~@2 c#6 ~ e6 ~ f#6 ~ g#6 ~ b6 ~ c#7@2 ~@10",
  G: "~@2 c#6 ~ d#6 ~ f#6 ~ a6 ~ c7 ~ c#7@2 ~@10",
})).s("gm_piccolo").gain(0.35)

// other · flute · "Flutes"
const flute = note("<~@32 A B C D A B E F A B C D A B E G ~@9>".pickRestart({
  A: "~@2 c#5 ~ e5 ~ c#5 ~ f#5 ~ e5 ~@3 c#5 ~ e5 ~ c#5 ~ g#5 ~ f#5 ~",
  B: "~@2 b4 ~ d#5 ~ f#5 ~ b5 ~ f#5 ~@3 b4 ~ d#5 ~ f#5 ~ b5 ~ d#6 ~",
  C: "~@2 c#5 ~ e5 ~ f#5 ~ g#5 ~ a5 ~@3 f#5 ~ g#5 ~ a5 ~ g#5 ~ f#5 ~",
  D: "~@2 g#4 ~ c5 ~ d#5 ~ f#5 ~ g#5 ~@3 c5 ~ d#5 ~ g#5 ~ c6 ~ d#6 ~",
  E: "~@2 c#5 ~ e5 ~ f#5 ~ g#5 ~ a5 ~@3 g#5 ~ f#5 ~ e5 ~ d#5 ~ e5 ~", F: "~@2 c#5 ~ e5 ~ f#5 ~ g#5 ~ b5 ~ c#6@2 ~@10",
  G: "~@2 c#5 ~ d#5 ~ f#5 ~ a5 ~ c6 ~ c#6@2 ~@10",
})).s("gm_flute").gain(0.35)

// other · tremolo strings · "Timpani"
const tremolo_strings = note("<~@31 [~@12 a2!12] c#3 ~@24>").s("gm_tremolo_strings").gain(0.2)

// chords · string ensemble 1 · "Harp"
const string_ensemble_1 = note(`<
  A@2 B C D E F G D E H I D E F J D E K L M N O P Q N R S A@3 T D U F G D E V W D E F J D E K L X Y Z AA X AB AC AD AE
>`.pickRestart({
  A: "c#4 e4 c#4 f#4 g#4 c#5 c#4 e4 c#4 f#4 g#4 c#5",
  B: "e4!2 c#4 f#4 g#4 c#5 [c#4,e4] e4 c#4 f#4 g#4 c#5, [c#3,g#3] [e3,b3], c#4 ~@5", // C#m C#5 E5
  C: "c#4 e4 c#4 f#4 g#4 c#5 [c#4,e4] e4 c#4 f#4 g#4 c#5, [b2,f#3,b3,d#4] e3, ~@3 [a2,a3]@2 [b2,b3,d#4]", // C#m B A B
  D: "e4!2 c#4 f#4 g#4 c#5 [c#4,e4] e4 c#4 f#4 g#4 c#5, [c#3,g#3] [e3,g#3,b3], c#4 ~@5", // C#m C#5 E
  E: "~ c#4 d#4 f#4 d#5 b4 ~ c#4 ~ f#4 d#5 b4, [b2,f#3,b3] [g#2,d#3,g#3,b3], d#4 ~@2 e4 d#4@2", // B5 G#m
  F: "c#4!2 a3 c#4 e4 a4 c#4!2 a3 c#4 e4 a4, [a2,e3] [f#2,c#3,f#3], a3 ~@2 a3 ~@2", // A5 F#5
  G: "d#4!2 g#3 c4 d#4 g#4 g#3 d#4 g#3 c4 g#3@2, g#2, d#3 c3, g#3@2 ~@2 c#4@2 c4@3 ~@3",
  H: "c#4!2 a3 c#4 e4 a4 ~@2 d#4@2 c4@2, [a2,e3] [g#2,d#3,g#3], a3 ~@2 c4@2 ~", // A5 G#5
  I: "~ e4 c#4 f#4 g#4 c#5 c#4@2 e5@2 c#5@2, [c#3,g#3], c#4 ~ f#4 e4@3", // C#5
  J: "d#4!2 g#3 c4 d#4 g#4 g#3 d#4 c4 g#4 d#4 c5, g#2, d#3 c3, g#3@2 ~@2 c#4@2 [c4,g#4]@3 ~ f#4@2", // Fm
  K: "c#4!2 a3 c#4 e4 a4 ~ d#4 g#4 c5 d#5 g#5, [a2,e3] [g#2,d#3,g#3,c4], a3 ~@4 e4", // A5 G#
  L: "c#4 e4 c#4 f#4 g#4 c#5 ~ e4 c#4 f#4 g#4 c#5, [c#3,g#3], d#4@3 c#4 ~@2", // C#5
  M: "g#4!2 b4 e5 g#5 b5 e4 g#4 b4 e5 b5 g#5, [e3,b3], e4 ~", // E5
  N: "~ d#4 f#4 b4 d#5 f#5 ~ b3 d#4 g#4 f#5 d#5, [b2,f#3,b3] [g#2,d#3,g#3], f#4 ~@2 d#4 ~ f#4", // B5 G#5
  O: "~ c#4 e4 a4 c#5 e5 ~ a3 c#4 f#4 a4 c#5, [a2,e3,a3] [f#2,c#3,f#3], e4 ~@2 c#4 ~ e4", // A5 F#5
  P: "~ c4 d#4 g#4 c5 d#5 g#5 d#5 c5 g#4 d#4 g#4, [g#2,d#3,g#3], d#4 ~ c#4 c4@3", // G#5
  Q: "g#4!2 b4 e5 g#5 b5 e4 g#4 b4 e5 b5 g#5, [e3,b3], e4@3 b4 ~@2", // E5
  R: "~ c#4 e4 a4 c#5 e5 d#4!2 g#4 c5 d#5 g#5, [a2,e3,a3] [g#2,d#3,g#3,c4], e4 ~ c#4 ~@2 e4", // A5 G#
  S: "~@2 e4@2 f#4@2 g#4@2 c#5@2 d#5@2 ~ [c#5,e5]@11, [c#3,g#3], [c#4,d#4] [c#4,e4,g#4]", // C#m C#5 C#sus2 C#m
  T: "c#4 e4 c#4 f#4 g#4 c#5 ~@6",
  U: "c#4 e4 c#4 f#4 g#4 c#5 [c#4,e4] e4 c#4 f#4 g#4 c#5, [b2,f#3,b3,d#4] [g#2,d#3,g#3,b3], ~@2 d#4", // C#m B G#m
  V: "c#4@2 c#4@2 a3@2 c#4@2 e4@2 a4@2 c4@4 ~ g#4@3 ~ c5@3, [a2,e3] [g#2,d#3,g#3], a3 ~@3 [c4,d#4] [d#4,g#4]", // A5 G#5 Cm G#5
  W: "~@2 e4@2 c#4@2 f#4@2 g#4@2 c#5@2 c#4@4 ~ e5@3 ~ c#5@3, [c#3,g#3], c#4 ~ f#4 e4@2 [e4,g#4], ~@4 [g#4,c#5] ~", // C#5 E C#5
  X: "e4 g#4 b4 e5 g#5 b5 e4 g#4 b4 e5 b5 g#5", Y: "b3 d#4 f#4 b4 d#5 f#5 g#3 b3 d#4 g#4 f#5 d#5",
  Z: "a3 c#4 e4 a4 c#5 e5 f#3 a3 c#4 f#4 a4 c#5", AA: "g#3 c4 d#4 g#4 c5 d#5 g#5 d#5 c5 g#4 d#4 g#4",
  AB: "b3@2 d#4@2 f#4@2 b4@2 ~ d#5@2 f#5@2 g#3@2 b3@2 d#4@2 g#4@2 ~ f#5@2",
  AC: "d#5@2 a3@2 c#4@2 ~ e4@2 a4@2 c#5@2 ~ e5@2 g#3@2 d#4@3 g#4@3",
  AD: "c5@2 d#5@3 g#5@2 ~ [e4,g#4,c#5]@5 ~ [c#5,e5]@5 ~ g#5@4, ~@7 c#4@5 ~ [e4,g#4]@6 [g#4,c#5,e5]@5", // C#m E C#m
  AE: "~@3 c#6@19 ~@2, ~ c#5@21 ~@2, ~ [e5,g#5]@10 ~", // E
})).s("gm_string_ensemble_1").gain(0.4)

// other · string ensemble 1 · "Violin II"
const string_ensemble_1_2 = note("<~@20 A B C D E B F G ~@3 H I J K L I J M N I J K L I O M P ~@9>".pickRestart({
  A: "e5@6 e5@3 f#5 e5@2", B: "d#5@4 c#5@2 g#4@3 a#4 b4@2", C: "c#5@4 g#4@2 a4@3 g#4 a4@2", D: "c5@2 a4 d#4@3",
  E: "e5@6 e5@3 f#5 e5@2, c#5 ~@23", F: "c#5@3 b4 a4@2 g#4@3 f#4 d#4@2", G: "e4", H: "~@5 c#5",
  I: "e5@4 f#5@2 g#5@3 a5 g#5@2", J: "f#5@4 d#5@2 b4@3 c#5 d#5@2", K: "e5@4 c#5@2 c#5@3 c5 c#5@2",
  L: "d#5@2 c5 g#4@2 c#5", M: "e5@3 d#5 c#5@2 c5@3 a#4 c5@2", N: "c#5@4 ~ c#5", O: "f#5@2 b5!2 a5 g#5", P: "c#5",
})).s("gm_string_ensemble_1").gain(0.4)

// chords · string ensemble 1 · "Viola"
const string_ensemble_1_3 = note("<~@20 A B C D A B E F ~@4 G H I J G H K L G H I J G H K L ~@9>".pickRestart({
  A: "[g#4,b4]@3 b4@2 c#5, ~ g#4", B: "[f#4,b4]@3 d#4@2 f#4, ~ g#4", C: "[e4,a4]@3 g#4 a4 [e4,f#4], ~@3 f#4@2 ~",
  D: "[g#4,c5]@3 e4@2 d#4, ~ g#4", E: "[e4,a4]@3 [g#4,c5]@2 [e4,g#4]", F: "f#4 e4 d#4 e4@3, c#4",
  G: "[g#3,c#4,e4] [c#4,e4,g#4]", H: "b3@2 a3 a4 g#4 f#4, f#4 [g#3,c#4]", I: "[a3,c#4,e4]@3 f#4@2 e4, ~ [f#3,b3]",
  J: "e4@2 f#4 d#4@3, [g#3,c4]", K: "e4@2 f#4 d#4@2 e4, [a3,c#4] [g#3,c4]", L: "f#4 e4 d#4 e4@3, [g#3,c#4]",
})).s("gm_string_ensemble_1").gain(0.25)

// other · string ensemble 1 · "Contrabasses"
const string_ensemble_1_4 = note(`<
  ~@2 A B A C D E A C F G A C D E A C F G H C D E H C F G ~@4 A C D E A C F G A C D E A C F G ~@9
>`.pickRestart({
  A: "c#2 e2", B: "b1@3 a1@2 b1", C: "b1 g#1", D: "a1 f#1", E: "g#1", F: "a1 g#1", G: "c#2", H: "e2",
})).s("gm_string_ensemble_1").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@32 A B A C A B A D A B A C A B A E ~@9>".pickRestart({
  A: "x ~ x!3 ~ x ~ x!5 ~ x!3 ~ x ~ x!4", B: "x ~ x!3 ~ x ~ x!5 ~ x!3 ~ x ~ x ~ x ~",
  C: "x ~ x!3 ~ x ~ x!5 ~ x!3 ~ x ~ x ~ x!2", D: "x ~ x!3 ~ x ~ x!3 ~ x ~ x!3 ~ x ~ x!4",
  E: "x ~ x!3 ~ x ~ x!3 ~ x ~ x!3 ~ x ~ x ~@3",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~@2 x ~]!27 [~ x ~@4] ~@2 [~ x ~@2 x ~] [~ x ~@4] ~@25>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@31 [~@12 x!12] x ~@7 x ~@16>").gain(0.2)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@31 [~ x] ~@25>").gain(0.07)

stack(
  piccolo, flute, tremolo_strings, string_ensemble_1, string_ensemble_1_2, string_ensemble_1_3, string_ensemble_1_4,
  snare, tambourine, crash, woodblocks
)