Strudelify

Please Release Me (Let Me Go)

Engelbert Humperdinck

KeyF majorTempo126 bpm
0:00/0:00
// Please Release Me (Let Me Go) — Humperdinck Engelbert
// 126 bpm, 6/8, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 142 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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.

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@9 A@4 B@4 C@4 A@2 C@2 A@4 B@4 A@2 C@2 A@2 C@2 A@4 B@4 C@4 A@2 C@2 A@4 B@4 A@2 C@2 A@2 C@2 A@4 B@4 C@4 A@2 C@2 A@4
  B@4 A@2 C@2 A@2 D@2 E@4 F@4 G@4 E@2 G@2 E@4 F@4 E@2 G@2 E@2 F@2 E@2 ~@3
>`.pickRestart({
  A: "~@4 [c4,f4,a4] ~@3", B: "~@4 [d4,f4,bb4] ~@3", C: "~@4 [c4,e4,g4] ~@3", D: "~@4 [db4,gb4,bb4] ~@3",
  E: "~@4 [b3,eb4,gb4] ~@3", F: "~@4 [b3,e4,ab4] ~@3", G: "~@4 [bb3,db4,gb4] ~@3",
})).s("gm_piano").gain(0.4)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@9 A B C D E F G H I J K L M N B O M B C D E F G H M P N O M N B Q A B C D E F G H I J K L M N B O M B C D E F G H M
  P B O M N B R M B C D E F G H I J K L M N B O M B C D E F G H M P B Q M P S T U V W X Y Z AA AB AC AD AE AF U X V AG U
  V W X AH Z AI AJ AK X V AL AK AM AA AN AO AP AQ@3
>`.pickRestart({
  A: "f1@9 ~@4 f1 ~@2", B: "c2@8 ~@5 c2@2 ~", C: "f2@8 ~@5 f2 ~@2", D: "c2@8 ~@5 f2@2 ~", E: "bb1@9 ~@4 bb1 ~@2",
  F: "f2@11 ~@5", G: "bb1@8 ~@5 bb1 ~@2", H: "d2@7 ~ f2@7 ~", I: "c2@9 ~@4 c2@2 ~", J: "g2@8 ~@5 g2 ~@2",
  K: "c3@8 ~@5 c2@2 ~", L: "g2@3 ~ e2@3 ~", M: "f2@9 ~@4 f2 ~@2", N: "c2@11 ~@5", O: "e2@3 ~ g2@3 ~",
  P: "c2@3 ~ f2@3 ~", Q: "c2@6 ~@2 e2@4 ~ g2@2 ~", R: "e2@6 ~@2 g2@4 ~ c3@2 ~", S: "gb2@8 ~@5 gb2@2 ~",
  T: "db2@3 ~ gb2@3 ~", U: "b1@9 ~@4 b1 ~@2", V: "gb1@8 ~@5 gb1@2 ~", W: "b1@8 ~@5 b1 ~@2", X: "gb1@3 ~ b1@3 ~",
  Y: "e1@9 ~@4 ab1@2 ~", Z: "b1@11 ~@5", AA: "e1@8 ~@5 e1@2 ~", AB: "b1@7 ~ e1@7 ~", AC: "gb1@9 ~@4 gb1@2 ~",
  AD: "db2@8 ~@5 db2 ~@2", AE: "gb1@8 ~@5 db2 ~@2", AF: "db2@8 ~@5 bb1@2 ~", AG: "bb1@3 ~ db2@3 ~",
  AH: "e1@9 ~@4 e1 ~@2", AI: "e1@8 ~@5 e1 ~@2", AJ: "ab1@7 ~ b1@7 ~", AK: "b1@9 ~@4 b1@2 ~", AL: "db2@3 ~ gb1@3 ~",
  AM: "gb1@7 ~ b1@7 ~", AN: "ab1@3 ~ b1@3 ~", AO: "b1@8 ~@5 b1@2 ~", AP: "gb1@3 ~ gb1@3 ~", AQ: "[b1@35 ~@13]/3",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A B@2 C D@3 E@2 ~@4 F G@2 ~@5 H I J@2 ~@4 F K@3 ~@4 H I L M ~@4 F G@2 ~@5 H I J@2 ~@4 F K@3 ~@4 H I L M ~@4 F G@2 ~@5
  H I J@2 ~@4 F K@3 ~@4 H I N O@2 ~ P Q R@3 S ~@6 T U ~@2 P Q V@3 S ~@5 W@2 X Y@5
>`.pickRestart({
  A: "~ [d5,bb5]", B: "[[c5,a5]@7 ~ [c5,a5]@15 ~ [d5,bb5]@8]/2", C: "a5 g5, c5",
  D: "[e5@7 g5@8 ~@9 c5@8 [a5,c6]@8 [a4,c5]@8, bb4@15 f5@25 ~@8, ~@15 a4@17 ~@16]/3", E: "[[e5,g5,bb5]@31 ~]/2",
  F: "~@8 [bb4,d5]@4 ~ [c5,e5,c6,e6]@2 ~, ~@7 [bb5,d6]@4 ~@5", // Bb C Bb
  G: "[[d5,f5]@9 ~@4 [bb4,bb5,d6]@2 ~ f5@5 ~@3 [bb4,d5,bb5]@8, [d6,f6]@7 ~@6 d5@8 ~@11, ~@15 [d6,f6]@6 ~@2 d6@8 ~]/2", // Dm Bb Dm
  H: "~ [c4,c5]", I: "[f4,f5] [a4,a5]", J: "[[g4,g5] [c5,e5,c6]@3]/2",
  K: "[[d5,f5,d6,f6]@7 ~ [d5,f5,d6,f6]@5 [bb4,bb5,d6]@2 ~ f5@6 ~@2 [bb4,d5,bb5]@24, ~@13 d5@8 ~@27, ~@15 [d6,f6]@6 ~@2 d6@24 ~]/3", // Dm Bb Dm
  L: "[c5,a5,c6] [c6,c7]", M: "[g5,g6] [bb5,bb6]",
  N: "[bb2,bb3,bb4,bb5]@2 [ab2,ab3,ab4,ab5]@3 [gb2,gb3,gb4,gb5]@2 ~ [gb2,gb3,gb4,gb5]@2 ~ [ab3,ab5]@2 [bb2,bb3,bb4,bb5]@2 ~, ~@10 [ab2,ab4]@3 ~@3", // Bb Ab Gb Ab Bb Ab
  O: "[[bb2,bb3,bb4,bb5]@2 ~ [b2,b4]@2 [db3,db4,db5,db6]@3 ~ [b2,b4] [db3,db4,db5,db6]@2 ~@2 [gb4,gb6]@2 ~@16, ~@2 [b3,b5]@3 ~@3 [bb2,bb3,bb4,bb5]@2 ~@2 [eb3,eb4,eb5,eb6]@2 gb3@7 ~@11, ~@9 b3@7 ~@16, ~@9 b5@2 ~@2 [e3,e4,e5,e6]@2 ~@17, ~@14 gb5 ~@17]/2", // Bb B Db B Db Gb B Bb …
  P: "~@13 [gb4,eb5,gb5,eb6]@3", Q: "[a4,gb5,a5,gb6]@4 ~ [a4,gb5,a5,gb6]@5 ~@6",
  R: "[~@8 [e4,ab4,e5]@4 ~ [gb4,bb4,gb5,bb5]@2 ~ [ab5,b5]@4 ~@4 [ab5,b5]@4 ~ [e4,e5,ab5]@2 ~ [b4,ab5,b5]@4 ~ [ab4,b4,ab5,b5]@4 ~@4 [ab4,e5,ab5,e6]@3, ~@7 ab5@3 ~@5 [ab4,b4]@6 ~@2 [ab4,b4]@5 ~ ab4@7 ~@12]/3", // E Gb Abm E Abm Dbm Abm
  S: "[ab4,e5,ab5,e6]@4 ~ [ab4,e5,ab5,e6]@4 ~@7", // Dbm
  T: "[bb4,db5,bb5,db6]@5 ~@3 [bb4,db5,bb5,db6]@4 ~ [b4,eb5,b5,eb6]@2 ~", // Bbm B
  U: "[db5,e5,db6,e6]@4 ~@2 e5@2 [bb4,gb5,bb5,gb6]@7 ~, ~@5 [db5,db6,e6]@3 ~@8", // Dbm Ebm Dbm
  V: "[~@8 [e4,ab4,e5]@4 ~ [gb4,bb4,gb5,bb5]@2 ~ [ab5,b5]@4 ~@4 [ab5,b5]@4 ~ [e4,e5,ab5]@2 ~ [b4,ab5,b5]@4 ~@4 [ab4,e5,ab5,e6]@4 ~ [ab4,e5,ab5,e6]@3, ~@7 ab5@3 ~@5 [ab4,b4]@6 ~@2 [ab4,b4]@5 ~ ab4@7 ~@12]/3", // E Gb Abm E Dbm Abm
  W: "[[gb4,eb5,gb5,eb6]@7 ~ [gb4,eb5,gb5,eb6]@7 ~ [e5,ab5,e6]@14 ~@2, ~@15 ab4@15 ~@2]/2", // Ebm E
  X: "[ab4,e5,ab5,e6]@7 ~ [ab4,e5,ab5,e6]@7 ~", Y: "[[gb4,eb5,gb5,eb6]@67 ~@13]/5",
})).s("gm_string_ensemble_1").gain(0.16)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B@4 C@2 D@2 E@8 F@8 G@7 H@8 I E@8 F@8 G@7 H@8 I E@8 F@8 G@7 J@7 K@2 L@8 M@8 N@7 O@4 P@8 ~@2
>`.pickRestart({
  A: "~ [d4,bb4]", B: "[[c4,a4]@24 [d4,bb4]@7 ~ a4@8 g4@8 e4@8 g4@8, f3@31 c3@32 ~, ~@2 c4 bb3]/4", C: "[f3,a3,f4]/2",
  D: "[c3,bb3,g4]/2", E: "[~ eb4 [d4,bb4]@2, f4, [c4,a4] ~]/8",
  F: "[[e4,g4]@63 [f4,a4]@32 ~@17 bb3@16, c4, ~@95 g4@32 ~, ~@3 e4]/8", G: "[~@3 eb4 [d4,bb4]@3, f4, a4@4 ~@3]/7",
  H: "[~@15 a4@32 [e4,g4]@32 ~ a4@31 ~ g4@16, ~@15 c4@113, ~@79 f4@32 e4@17]/8", I: "bb3",
  J: "[~@15 a4@32 [e4,g4]@32 ~ a4@31 gb4, ~@15 c4@96 ~, ~@79 f4@32 ~]/7", K: "[~ e4, [db4,bb4]]/2",
  L: "[gb4 a3 [e4,ab4]@2, b3, eb4 ~]/8", M: "[[bb3,db4]@63 [b3,eb4]@32 ~@17 e4@16, gb4, ~@95 db4@32 ~, ~@3 bb3]/8",
  N: "[~@3 a3 [e4,ab4]@3, b3, eb4@4 ~@3]/7", O: "[~@15 eb4@32 [bb3,db4]@17, ~@15 gb4@49]/4",
  P: "[~@16 eb4@31 ~ ab4@31 ~ gb4@48, ~@15 b3@113, ~@47 e4@32 eb4@49]/8",
})).s("gm_synth_strings_1").gain(0.15)

// chords · synth bass 2 · "SYN BASS 2"
const synth_bass_2 = note(`<
  ~@9 A@3 B C@4 D@4 A@2 D E A@3 B C@4 A@2 F@2 A@2 D G A@3 B C@4 D@4 A@2 D E A@3 B C@4 A@2 F@2 A@2 D G A@3 B C@4 D@4 A@2
  D E A@3 B C@4 A@2 F@2 A@2 H I J@3 K L@4 M@4 J@2 M N J@3 K L@4 J@2 M@2 J@2 L O J@2 ~@3
>`.pickRestart({
  A: "~@3 [c4,f4,a4] ~ [c4,f4,a4] ~@7 [c4,f4,a4] ~@2", B: "~@3 [c4,eb4,f4,a4] ~ [c4,eb4,f4,a4] ~@7 [c4,eb4,f4,a4] ~@2",
  C: "~@3 [d4,f4,bb4] ~ [d4,f4,bb4] ~@7 [d4,f4,bb4] ~@2", D: "~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@7 [c4,e4,g4] ~@2",
  E: "~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~@2", // C
  F: "~@3 [bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~@7 [bb3,c4,e4,g4] ~@2", // C7
  G: "~@3 [bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~@5 [bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~@2", // C7
  H: "~@3 [db4,gb4,bb4] ~ [db4,gb4,bb4] ~@7 [db4,gb4,bb4] ~@2", // Gb
  I: "~@3 [db4,e4,gb4,bb4] ~ [db4,e4,gb4,bb4] ~@5 [db4,e4,gb4,bb4] ~ [db4,e4,gb4,bb4] ~@2", // Gb7
  J: "~@3 [b3,eb4,gb4] ~ [b3,eb4,gb4] ~@7 [b3,eb4,gb4] ~@2", // B
  K: "~@3 [a3,b3,eb4,gb4] ~ [a3,b3,eb4,gb4] ~@7 [a3,b3,eb4,gb4] ~@2", // B7
  L: "~@3 [b3,e4,ab4] ~ [b3,e4,ab4] ~@7 [b3,e4,ab4] ~@2", M: "~@3 [bb3,db4,gb4] ~ [bb3,db4,gb4] ~@7 [bb3,db4,gb4] ~@2",
  N: "~@3 [bb3,db4,e4,gb4] ~ [bb3,db4,e4,gb4] ~@5 [bb3,db4,e4,gb4] ~ [bb3,db4,e4,gb4] ~@2", // Gb7
  O: "~@3 [b3,e4,ab4] ~ [b3,e4,ab4] ~@5 [b3,e4,ab4] ~ [b3,e4,ab4] ~@2", // E
})).s("gm_synth_bass_2").gain(0.15).pan(0.3)

// chords · pad new age · "FANTASIA"
const pad_new_age = note(`<
  ~@13 A B C ~@5 D E F ~@5 A G C ~@5 H I J K ~@4 A B C ~@5 D E F ~@5 A G C ~@5 H I J K ~@4 A B C ~@5 D E F ~@5 A G C ~@5
  H I L ~@3 M N O P Q R ~@6 S T ~@2 U N V P W R ~@5 X Y Z AA ~ AA ~@2
>`.pickRestart({
  A: "~@8 [bb5,d6] ~@4 [c6,e6] ~@2", B: "[d6,f6] ~@12 [bb5,d6] ~@2", C: "[d6,f6] ~@7 [bb5,d6] ~@7", D: "~@8 c6 ~@7",
  E: "f6 ~@7 a6 ~@7", F: "g6 ~@7 [e6,c7] ~@7", G: "[d6,f6] ~@7 [d6,f6] ~@4 [bb5,d6] ~@2", H: "~@8 c5 ~@7",
  I: "f5 ~@7 a5 ~@7", J: "[a5,c6] ~@7 c7 ~@7", K: "g6 ~@7 bb6 ~@7", L: "[db5,bb5] ~@15", M: "~@13 [b5,eb6] ~@2",
  N: "[a5,gb6] ~@4 [a5,gb6] ~@10", O: "~@8 [e5,ab5] ~@4 [gb5,bb5] ~@2", P: "[ab5,b5] ~@7 [ab5,b5] ~@4 [e5,ab5] ~@2",
  Q: "[ab5,b5] ~@4 [ab5,b5] ~@7 [ab5,e6] ~@2", R: "[ab5,e6] ~@4 [ab5,e6] ~@10",
  S: "[bb5,db6] ~@7 [bb5,db6] ~@4 eb6@2 ~, ~@13 b5 ~@2", T: "[db6,e6] ~@4 db6@2 ~ [bb5,gb6] ~@7, ~@5 e6 ~@10",
  U: "~@13 [b5,eb6]@2 ~", V: "~@8 [e5,ab5] ~@4 bb5@2 ~, ~@13 gb5 ~@2", W: "[ab5,b5] ~@7 [ab5,e6] ~@4 [ab5,e6] ~@2",
  X: "[gb5,eb6] ~@7 [gb5,eb6] ~@7", Y: "[ab5,e6] ~@15", Z: "[e6,ab6] ~@7 [e6,ab6] ~@7", AA: "[eb6,gb6] ~@15",
})).s("gm_pad_new_age").gain(0.48)

// chords · marimba
const marimba = note(`<
  ~@73 A B A C D E D E F G F G A B H I A B A C D E D E J K F G A B L M N O N O P Q P Q L M L M N O L M N O N O P Q P Q R
  O L M N O P Q N O S ~@2
>`.pickRestart({
  A: "[c4,f4,a4]@9 ~@4 [f4,a4]@2 ~, ~@13 c4 ~@2", B: "[c4,f4,a4]@4 ~ [c4,f4,a4]@5 ~@6",
  C: "[c4,eb4,a4]@4 ~ [c4,eb4,a4]@5 ~@6", D: "[d4,f4,bb4]@9 ~@4 [f4,bb4]@2 ~, ~@13 d4 ~@2",
  E: "[d4,f4,bb4]@4 ~ [d4,f4,bb4]@5 ~@6", F: "[e4,g4,c5]@9 ~@4 [g4,c5]@2 ~, ~@13 e4 ~@2",
  G: "[e4,g4,c5]@4 ~ [e4,g4,c5]@5 ~@6", H: "[c4,e4,g4]@9 ~@4 [e4,g4]@2 ~, ~@13 c4 ~@2",
  I: "[c4,e4,g4]@4 ~ [c4,e4,g4]@5 ~@6", J: "[f4,a4,c5]@9 ~@4 [a4,c5]@2 ~, ~@13 f4 ~@2",
  K: "[f4,a4,c5]@4 ~ [f4,a4,c5]@5 ~@6", L: "[db4,gb4,bb4]@9 ~@4 [gb4,bb4]@2 ~, ~@13 db4 ~@2",
  M: "[db4,gb4,bb4]@4 ~ [db4,gb4,bb4]@5 ~@6", N: "[eb4,gb4,b4]@9 ~@4 [eb4,gb4]@2 ~, ~@13 b4 ~@2",
  O: "[eb4,gb4,b4]@4 ~ [eb4,gb4,b4]@5 ~@6", P: "[e4,ab4,b4]@9 ~@4 [ab4,b4]@2 ~, ~@13 e4 ~@2",
  Q: "[e4,ab4,b4]@4 ~ [e4,ab4,b4]@5 ~@6", R: "[eb4,gb4,b4]@9 ~@4 [gb4,b4]@2 ~, ~@13 eb4 ~@2", S: "[eb4,gb4,b4]@9 ~@7",
})).s("gm_marimba").gain(0.3).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@4 B ~@2
>`.pickRestart({
  A: "x ~@12 x ~@2", B: "x",
})).gain(0.64)

// drums · rim
const rim = s("rim").struct(`<
  ~@7
  [~@13 x ~@2]
  ~@2
  [~ x]!14
  [~@3 x ~ x ~@5 x ~ x ~@2]
  [~ x]!15
  [~@3 x ~ x ~@5 x ~ x ~@2]
  ~@101
>`).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@41 A@15 B A@15 C A@15 B A@15 D A@15 B A@18 ~@3>".pickRestart({
  A: "~ x", B: "~@8 x ~@2 x ~@4", C: "~@3 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "~@8 x ~@2 x ~ x ~@2",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B A B C B A D C B A B C B A B C B A B C B A D C
  B A B C B A B C B A B C B A D C B A B C B A B C B A B C B A D C B A B C D C D C B A B C B A D C B A B C B A B C B A B
  C B A D C B A B C D C D C D E ~@2
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", B: "x ~@4 x ~@2 x ~@2 x ~ x ~@2", C: "x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2",
  D: "x ~@4 x ~@2 x ~@2 x ~@4", E: "x",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@10 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~@3 A ~@3
>`.pickRestart({
  A: "~@3 x ~@12",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@48 A ~@15 A ~@15 A ~@15 A ~@5 A ~ B ~@7 A ~@15 A ~@5 A ~ B ~ A ~@3>".pickRestart({
  A: "~@13 x ~@2", B: "~@3 x ~@9 x ~@2",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@11 A ~@3 A ~ A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [~ x]!130 ~@3>").gain(0.56)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@9 [x ~@4 x ~@2 x ~@4 x ~@2]!130 x ~@2>").gain(1.62)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@9 [~ x ~@3 x ~@2]!130 ~@3>").gain(0.81)

stack(
  piano, bass, string_ensemble_1, synth_strings_1, synth_bass_2, pad_new_age, marimba, kick, rim, snare, hihat,
  hihat_soft, open_hat, crash, tambourine, cabasa, cabasa_soft
)

More by Engelbert Humperdinck