Strudelify
Greensleeves cover art

Greensleeves

Scorpions

KeyE minorTempo130 bpm
0:00/0:00
// Greensleeves — Scorpions
// 130 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 3 "Synth Harp" named as a string part, played on orchestral harp (its harmonica patch is not one); ch 4 "Synth Harp" named as a string part, played on orchestral harp (its acoustic bass patch is not one); ch 6 "Fingered Bass" named as a bass, played on electric bass finger (its baritone sax patch is not one)
// note: duplicate parts dropped: ch 4 "Synth Harp" orchestral harp (copy of ch 3 "Synth Harp" orchestral harp)
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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.

// chords · epiano1 · "Electric Piano"
const epiano1 = note("<~@26 A B C D E F G H I J C K L M@3 ~@16 A B C D E F G H I J C K L N@4>".pickRestart({
  A: "g3 ~@3 [g4,b4,d5] ~ [b4,d5] ~@5 [g4,b4,d5] ~ g3 ~", // G Bm G
  B: "~@2 g3 ~ [g4,b4,d5] ~ [b4,d5] ~ g3 ~@3 [g4,d5] ~@3, ~@6 b4 ~", // G Bm G5
  C: "d3 ~ d3 ~ [d4,f#4,a4] ~ d3 ~ d3 ~@3 [d4,f#4,a4] ~ d3 ~", // D
  D: "~@2 d3 ~ [f#4,a4] ~ d3 ~ d3 ~ d3 ~ [d#4,f#4]@2 ~@2, ~@12 a4 ~@3", // F#m D#m
  E: "e3 ~ e3 ~ [e4,g4,b4] ~ e3 ~ e3 ~@3 [e4,g4,b4] ~ a2 ~", F: "~@2 a2@2 [a3,c4,e4] ~ a2 ~@5 [a3,c4,e4] ~ b2@2",
  G: "~@2 b2@2 [b3,d#4,f#4] ~ [d#4,f#4] ~ b2 ~ b2 ~ [b3,d#4,f#4] ~ b2 ~", // B D#m B
  H: "~@2 b2 ~ [b3,d#4,f#4] ~ b2 ~ b2 ~ b2 ~ [b3,d#4,f#4] ~@3", // B
  I: "g3 ~ g3 ~ [g4,b4,d5] ~ g3 ~ g3 ~@3 [g4,b4,d5] ~ g3 ~", J: "~@2 g3 ~ [g4,b4] ~ g3 ~ g3 ~ g3 ~ [g4,b4,d5] ~ b4 ~",
  K: "~@2 d3 ~ [d4,a4] ~ d3 ~ d#3 ~ d#3 ~ [d#4,f#4,a4] ~ [f#4,a4] ~, ~@2 f#4 ~@5", // D5 D#dim F#m
  L: "e3 ~ e3 ~ [e4,g4,b4] ~@3 a3 ~ a3 ~ [a4,c5,e5] ~ b2 ~", // Em Am
  M: "[~@2 b2 ~ [b3,d#4,f#4] ~ b2 ~ b2 ~ b2 ~ [b3,d#4,f#4] ~ e3@6 [e4,g4,b4] ~ e3 ~ e3@4 ~@2 e3@16 ~@2, ~@14 [e4,g4,b4]@9 ~]/3", // B Em
  N: "[~@2 b2 ~ [b3,d#4,f#4] ~ b2 ~@2 b2 ~ b2 ~ [b3,d#4,f#4] ~ e3@6 [e4,g4,b4] ~ e3 ~ e3@4 ~@3 e3@19 ~@13, ~@30 [e4,g4,b4]@21 ~@13]/4", // B Em
})).s("gm_epiano1").gain(0.2)

// chords · epiano1 · "Electric Piano" · soft notes
const epiano1_soft = note("<~@26 A B ~ C ~ D E ~@2 F ~ G ~@20 A B ~ C ~ D E ~@2 F ~ G ~@5>".pickRestart({
  A: "~@6 g4 ~ g3 ~@7", B: "~@6 g4 ~@3 g3 ~@5", C: "~@4 d4 ~@11", D: "~@8 a2@3 ~@5", E: "~@6 b3 ~@9",
  F: "~@4 d5@2 ~@8 [g4,d5] ~", G: "~@14 d#4 ~",
})).s("gm_epiano1").gain(0.15)

// chords · piano · "Acoustic Piano"
const piano = note(`<
  ~@2 A B C D E F G H A B C D E F G H I J K L M N O@2 ~@16 A B C D E F G H I J K L M P O@2 ~@17
>`.pickRestart({
  A: "e3@4 b3@4 [e4,g4,b4] ~@3 e3@2 b3@2", B: "~@2 [e4,g4,b4] ~@3 e3@2 b3@2 ~@2 [e4,g4,b4] ~ [e4,g4,b4] ~",
  C: "d3@4 a3@4 [d4,f#4,a4] ~@3 d3@2 a3@2", D: "~@2 [d4,f#4,a4] ~@3 d3@2 a3@3 ~ [d#4,f#4,a4] ~ [d#4,f#4,a4] ~",
  E: "e3@4 b3@4 [e4,g4,b4] ~@3 e3@2 a3@2", F: "~@2 [a4,c5]@2 ~@2 e3@2 a3@2 ~@2 [e4,a4,c5] ~ [e4,a4,c5] ~, ~@2 e4 ~@13",
  G: "b2@4 f#3@4 [b3,d#4,f#4] ~@3 b2@2 f#3@2", H: "~@2 [b3,d#4,f#4] ~@3 b2@2 [f#3,d#4,f#4]@8, ~@8 b3@5 ~@3",
  I: "e3@4 b3@3 ~ [e4,g4,b4] ~@3 e3@2 b3 ~", J: "~@2 [e4,g4,b4] ~@3 e3@2 b3 ~@3 [e4,g4,b4] ~ [e4,g4,b4] ~",
  K: "d3@4 a3@3 ~ [d4,f#4,a4] ~@3 d3@2 a3 ~", L: "~@2 [d4,f#4,a4] ~@3 d3@2 a3@2 ~@2 [d#4,f#4,a4] ~ [d#4,f#4,a4] ~",
  M: "~@2 b3@2 [g4,b4] ~@2 a3, e3@6 ~@2 e4 ~@3 e3@4", // G
  N: "~@2 [e4,c5]@2 ~@2 b2@2 f#3@4 [b3,d#4,f#4] ~ [b3,d#4,f#4] ~, ~@2 a4 ~@13", // C B
  O: "[~@4 b3@4 [e4,g4,b4] ~@5 [e4,g4,b4]@17 ~, e3@7 ~@5 e3@4 ~@16, ~@14 b3@15 ~@3]/2", // Em
  P: "~@2 [e4,a4] ~@3 b2@2 f#3@4 [b3,d#4,f#4] ~ [b3,d#4,f#4] ~, ~ c5 ~@6", // A5 B
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Fingered Bass"
const bass = note(`<
  A B A B C D A E F@2 A B C D A E F@2 G@2 C D H I A J K L M N O P Q R K L M S T U V W A B C D A E F@2 G@2 C D H I A J K
  L M N O P Q R K L M S T X@2 Y@2
>`.pickRestart({
  A: "e2@6 b2 ~@3 e3@2 g3@2 e3@2", B: "e2@3 b2 ~ e3 g3 e3", C: "d2@3 a2 ~ d3 f#3 d3", D: "d2@3 a2 ~ d3 f#3 d#3",
  E: "a2@3 e3 ~ a3 c4 a3", F: "b2@3 f#3 ~ b3 d#4 b3", G: "[e2@3 b2 ~ e3 g3 ~ e2@3 b2 ~ e3 g3 e3, ~@7 e3@2 ~@7]/2",
  H: "e2@3 b2 ~ e3 a3 e3", I: "b2@6 f#3@3 ~ b3@2 d#4@2 b3@2", J: "e2@7 ~", K: "g3 ~ g3 ~ d4 ~ g3 ~ g3 ~@3 d4 ~ g3 ~",
  L: "~@2 g3 ~ d4 ~ g3 ~ g3 ~ a3 ~ b3 ~ a3 ~", M: "d3 ~ d3 ~ a3 ~ d3 ~ d3 ~@3 a3 ~ d3 ~",
  N: "~@2 d3 ~ a3 ~ d3 ~ d3 ~ d3 ~ d#3 ~ d#3 ~", O: "e3 ~ e3 ~ b3 ~ e3 ~@3 e3 ~ b3 ~ a3 ~",
  P: "~@2 a3 ~@2 e4 ~@2 a3 ~ e4!2 ~@2 b2 ~", Q: "~@2 b2 ~ f#3 ~ b2 ~ b2 ~ b2 ~ f#3 ~ b2 ~",
  R: "~@2 b2 ~ f#3 ~ b2 ~ b2 ~ c#3 ~ d3 ~ e3 ~", S: "~@2 d3 ~ a3 ~ d3 ~ d#3 ~ d#3 ~ d#3 ~ d#3 ~",
  T: "e3 ~ e3 ~ b3 ~ a3 ~@3 a3!2 ~@2 b2 ~", U: "~@2 b2 ~ b2 ~ f#3 ~@4 b2 f#3 ~ e3 ~",
  V: "~@2 e3 ~ b3 ~ a#3 ~ a3 ~ g#3 ~ g3 ~ f#3 ~", W: "e3@15 ~",
  X: "[~@2 b2 ~ b2 ~ f#3 ~@5 b2 f#3 ~ e3@2 ~@2 e3 ~ b3 ~ a#3 ~ a3 ~@2 g#3 ~ g3 ~]/2", Y: "[f#3 ~ e3@18 ~@12]/2",
})).s("gm_electric_bass_finger").gain(0.25)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@10 A@2 B@2 C D E@2 A@2 B@2 F G A@2 ~@16 A@2 B@2 C D E@2 A@2 B@2 F G A@2 ~@17
>`.pickRestart({
  A: "[e3,b3,g4,e5]/2", B: "[[d3,d5], [a3,f#4]@7 ~]/2", C: "[e3,b3,g4,e5]", D: "[a3,e4,c5,a5]",
  E: "[f#3,b3,b4,d#5,f#5]/2", F: "[e3,e5]@7 ~ [c4,a4]@8, [b3,g4]", G: "[f#3,b3,f#4,b4,d#5]",
})).s("gm_string_ensemble_1").gain(0.05)

// drums · kick
const kick = s("bd").struct("<~@26 A@15 B ~@16 A@13 C D E ~>".pickRestart({
  A: "x ~@5 x ~@4 x!2 ~@3", B: "x", C: "x ~@5 x ~@5 x!2 ~@2", D: "~ x ~@5 x ~@5 x!2 ~", E: "~ x ~@6",
})).gain(0.35)

// drums · rim
const rim = s("rim").struct("<~@10 A@7 B A B A C@2 A@2 B ~@16 A@7 B A B A C@2 A@2 B ~@17>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.4)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@14 A ~@4 B ~ C@2 ~@23 A ~@4 B ~ C@2 ~@20>".pickRestart({
  A: "~@5 x ~@10", B: "~@3 x", C: "~ x ~@2",
})).gain(0.05)

// drums · snare
const snare = s("sd").struct("<~@26 A@15 B ~@16 A@13 C D E ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@8 x ~@2", D: "~@5 x ~@8 x ~", E: "~@7 x ~@8",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@26 A@15 B ~@16 A@13 C D E ~>".pickRestart({
  A: "x ~ x ~@3 x ~@3 x!2 ~@2 x ~", B: "x!2 ~@6", C: "x ~ x ~@3 x ~@4 x!2 ~@2 x", D: "~ x ~ x ~@3 x ~@4 x!2 ~@2",
  E: "x!3 ~@5",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@26 A@15 B ~@16 A@13 C D E ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@8 x ~@2", D: "~@5 x ~@8 x ~", E: "~@7 x ~@8",
})).gain(0.3)

// drums · congas
const congas = s("conga:13").struct("<~@9 [~@7 x] ~@7 [~@10 x!3 ~ x ~] ~@31 [~@10 x!3 ~ x ~] ~@25>").gain(1.11)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ A B@3 C B C B D B C B C B E B C B@2 E F B@2 G ~@17 B C B C B E B C B@2 E F B@2 G ~@18
>`.pickRestart({
  A: "~@11 x!2 ~ x ~", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@5 x!2 ~@4", E: "~@3 x", F: "~@2 x ~@3 x!2",
  G: "~ x ~@3 x ~@2",
})).gain(1.11)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~ A ~@3 B ~ B ~@5 B ~ C ~@4 C A ~@23 B ~ C ~@4 C A ~@21>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x", C: "~ x ~@2",
})).gain(0.32)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@2 A B C D E F G B H I J K L M N B J O P Q R I S T ~@16 H I J K L M N B J O P Q R I S T ~@17
>`.pickRestart({
  A: "~@6 x ~@4 x ~@4", B: "~ x ~ x ~@4", C: "x ~@4 x ~ x", D: "~@2 x ~@8 x ~@4", E: "~ x ~@3 x ~ x",
  F: "~@2 x ~@3 x ~ x ~ x!2 ~@4", G: "~@4 x!2 ~@2", H: "x ~@3 x ~@2 x", I: "~ x ~@2 x ~@2 x", J: "x ~@2 x!2 ~@2 x",
  K: "~@2 x ~@5 x ~@2 x ~@2 x ~", L: "x ~@6 x", M: "~ x ~ x!2 ~@3", N: "~@7 x", O: "~@3 x ~@2 x ~ x ~@7",
  P: "x ~@2 x ~@3 x", Q: "~@3 x ~@2 x ~@9", R: "~ x ~ x ~@3 x", S: "~@2 x!3 ~@2 x", T: "~ x!2 ~@5",
})).gain(1.11)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct(`<
  ~@2 A B C D E A F G ~@2 H ~ I ~ J K ~ B L ~ M H ~@20 H ~ I ~ J K ~ B L ~ M H ~@19
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x", C: "~@7 x!2 ~@7", D: "~@10 x ~@4 x", E: "~@3 x!2 ~@3", F: "x ~@6 x", G: "~@7 x ~@8",
  H: "~@5 x ~@2", I: "~ x ~ x!3 ~@2", J: "x ~@2 x!3 ~@2", K: "~ x", L: "~@2 x!2 ~@12", M: "x ~@4 x ~@2",
})).gain(0.32)

stack(
  epiano1, epiano1_soft, piano, bass, string_ensemble_1, kick, rim, rim_soft, snare, hihat, open_hat, congas, congas_2,
  congas_soft, congas_3, congas_soft_2
)

More by Scorpions