Strudelify
Rosenmelodie cover art

Gefühle

Rosenmelodie

Henry Arland

KeyG majorTempo120 bpm
0:00/0:00
// Rosenmelodie — Henry Arland
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 60 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · pad new age
const pad_new_age = note(`<
  A B C D ~@4 E F G H I J K H L M N O P Q R S P ~ T A B C D ~@4 E F G H I J K H L M N O P Q R S P ~ T A B C D L ~
>`.pickRestart({
  A: "b5 ~@2 b5 ~@2 c6 ~ d6 ~@2 c6 ~@2 b5 ~", B: "e6 ~@5 d6 ~ c6 ~@3 b5 ~@3",
  C: "a5 ~@2 a5 ~@2 a5 ~ d6 ~@2 d6 ~@2 d6 ~", D: "b5 ~@3 d6 ~ c6 ~ b5 ~@7", E: "b5 ~@5 g5 ~ a#5 ~@5 e5 ~",
  F: "a5 ~@5 c6 ~ c6 ~ b5 ~ b5 ~ a5 ~", G: "a5 ~@15", H: "~@6 [d5,b5] ~ [d5,b5] ~ [c5,a5] ~ [c5,a5] ~ [b4,g5] ~",
  I: "[b4,g5] ~@15", J: "~@6 [d5,b5] ~ [c5,a5] ~ [b4,g5] ~ [b4,g5] ~ [a4,f#5] ~", K: "[a4,f#5] ~@15", L: "[d5,b5] ~@15",
  M: "~@6 [e5,c6] ~ [g5,e6] ~@3 [e5,c6] ~@3", N: "[d5,b5] ~@7 [c5,a5] ~@7",
  O: "[b4,g5] ~@5 [b5,d6] ~ [b5,d6] ~ [a5,c6] ~ [a5,c6] ~ [g5,b5] ~", P: "[g5,b5] ~@15",
  Q: "~@6 g5 ~ f#5 ~ d5 ~ d6 ~ a5 ~", R: "[e5,c6] ~@15", S: "~@6 [b5,d6] ~ [b5,d6] ~ [a5,c6] ~ [a5,c6] ~ [g5,b5] ~",
  T: "c6 ~ b5 ~ g5 ~@7 f#5 ~@3",
})).s("gm_pad_new_age").gain(0.21)

// chords · piano
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD
  D AE ~
>`.pickRestart({
  A: "[d5,g5]@3 ~@3 a5@2 ~@6 g5@2, g3, b4@8 ~@3 a5@5, ~@3 d5@13, ~@3 g5@5 b5@8", B: "c6@6 b5@2 a5@4 g5@3 ~, [c4,e5]",
  C: "a5@3 a5@3 ~@2 d6@3 d6@3 d6@2, [d5,f#5], d4!2, ~@3 a5@5", // D
  D: "[g5,b5]@6 ~@6 b5 a5 g5@2, g3, d5@5 d5@3, ~@3 g4@5, ~@2 [g5,b5] ~", E: "~@2 g5@2 b5@2 g5@2 d6@4 b5@3 ~",
  F: "~ a5 c6 a5 e6 a5 c6 a5", G: "~ d5 a5 d5 c6 d5 a5 d5", H: "~@2 g5 ~ b5@2 g5@2 [b5,d6]@4 [a5,c6]@4",
  I: "~ d5 b5 g5 ~ c#5 a#5 e5", J: "a5@2 a5!2 [a5,c6] [g5,b5]!2 [e5,a5], ~@6 c6 ~@9",
  K: "[f#5,a5] d5 d6 d5 ~ d5 d6 a#5", L: "b5@4 d5 ~ [b5,d6] ~ [b5,d6]@2 [a5,c6] ~ [a5,c6]@2 [g5,b5]@2",
  M: "[g5,b5]@2 g5@2 b5@2 g5@2 d6@2 g5@2 b5 a5 g5@2", // G
  N: "[a5,c6]@5 ~ [e5,c6] ~ [e5,c6]@2 [d5,b5] ~ [d5,b5]@2 [c5,a5]@2", O: "[c5,a5]@3 ~ c6@2 a5@2 e6@2 a5@2 c6@2 a5@2",
  P: "[d5,b5]@5 ~ [d5,b5] ~ [d5,b5]@2 [c5,a5] ~ [c5,a5]@2 [b4,g5]@2", // G F Em
  Q: "[d5,b5]@3 ~ b5@2 g5@2 [b5,d6]@2 g5@2 b5@2 g5@2", R: "[e5,c6]@3 ~ g5@2 c6 ~ [e5,c6]@4 [c5,a5]@4",
  S: "[g5,b5]@3 ~ b5@2 d5@2 a5@2 d5@2 a5@2 c5@2", T: "[b4,g5]@4 d5@2 [b5,d6] ~ [b5,d6]@2 [a5,c6] ~ [a5,c6]@2 [g5,b5]@2",
  U: "[g5,b5]@3 ~ g5@2 d5@2 b5@2 g5@2 d6@2 b5@2", V: "g5 f#5@3 ~@2 d6 a5", W: "c6@4 g5@5 ~ g5 ~ [a5,c6]@2 e5@2",
  X: "[b4,g5]@5 ~ [b5,d6] ~ [b5,d6]@2 [a5,c6] ~ [a5,c6]@2 [g5,b5]@2", Y: "[g5,b5]@3 ~ g5@2 a5@2 b5@2 g5@3 ~ g5@2",
  Z: "c6 g5 c6 g5", AA: "c6@2 b5@2 g5@7 ~ f#5@4", AB: "g5@3 ~@3 a5@2 ~@6 g5@2, ~@3 g5@5 b5@8, ~@11 a5@5",
  AC: "c6@6 b5@2 a5@4 g5@3 ~", AD: "a5@3 a5@3 ~@2 d6@3 d6@3 d6@2, f#5, ~@3 a5@5", AE: "[b4,g5]@15 ~",
})).s("gm_piano").gain(0.29).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D ~@6 E F ~ G H I J K L M N O P Q R S T A B C D ~@6 E F ~ G H I U K L M N O P Q R S T A B C V@2 ~
>`.pickRestart({
  A: "[g4,b4]@3 [g4,b4]@3 [a4,c5]@2 [b4,d5]@3 [a4,c5]@3 [g4,b4]@2", B: "[c5,e5]@15 ~",
  C: "[d5,f#5]@3 [d5,f#5]@3 [e5,g5]@2 [f#5,a5]@3 [e5,g5]@3 [d5,f#5]@2", D: "[b4,g5]@7 ~", E: "~@7 a#5",
  F: "b5@2 g5@5 ~", G: "~@3 [d5,b5] [c5,a5] [b4,g5]!2 [a4,f#5]", H: "[a4,f#5]@15 ~",
  I: "~@3 [d5,b5]!2 [c5,a5]!2 [b4,g5]", J: "[b4,g5]@3 f5", K: "e5 c5", L: "[d5,d6] [c5,c6]", M: "[b4,b5]",
  N: "[b5,d6]@2 [b5,d6]@5 [g5,b5]", O: "[g5,b5]@2 [f#5,a5]@2 [f#5,a5]@11 ~", P: "[c6,e6] [c6,e6]@2 [a5,c6]",
  Q: "[g5,b5]@15 ~", R: "[b5,d6] [b5,d6]@2 [d5,g5]", S: "[c6,e6]@11 ~ [d6,f#6]@2 [c6,e6]@2",
  T: "[c6,e6] [b5,d6] [b5,d6]@4 [a5,c6] [b5,d6]", U: "g5@3 f5", V: "[[b4,g5]@31 ~]/2",
})).s("gm_string_ensemble_1").gain(0.16).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G D H I J K E F G D L M N O@2 P Q D O R N A B C D E F G D H I J K E F G D L M N O@2 P Q D O R N A B C S@3
>`.pickRestart({
  A: "[b3,d4,g4]@2 [b3,d4,g4] [b3,d4,g4]@2 [b3,d4,g4]!3", B: "[c4,e4,g4]@2 [c4,e4,g4]!6",
  C: "[a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2", // D
  D: "[b3,d4,g4]@4 [b3,d4,g4]@2 [b3,d4,g4]@4 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4] ~", // G
  E: "[b3,d4,g4]@2 [b3,d4,g4] [b3,d4,g4]@2 [b3,d4,g4] [b3,d4,g4]@2", // G
  F: "[c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]!3", G: "[a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4]!3",
  H: "[b3,d4,g4]@2 [b3,d4,g4]@2 [a#3,e4,g4] [c#4,e4,g4] [a#3,c#4,e4,g4]!2", // G Edim C#dim A#dim
  I: "[a3,c4,e4,g4]@2 c4 ~ [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~", // Am7
  J: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a#3,d4,f#4] d4 [a#3,d4,f#4] [a#3,f#4]", K: "[b3,d4,g4]@3 [b3,d4,g4]!5",
  L: "[g3,b3,d4]@2 [g3,b3,d4] [g3,b3,d4]@2 [g3,b3,d4]!3", M: "[g3,c4,e4]@2 [g3,c4,e4] [g3,c4,e4]@2 [g3,c4,e4]!3",
  N: "[b3,d4,g4]@2 [b3,d4,g4]!2 [a3,d4,f#4] [d4,f#4] [a3,d4,f#4] a3", O: "[b3,d4,g4]@2 [b3,d4,g4]!3 ~ [b3,d4,g4] ~",
  P: "[a3,d4,f#4]@2 [a3,d4,f#4]!3 ~ [a3,d4,f#4] f#4", Q: "[c4,e4,g4]@2 [c4,e4,g4]!3 ~ [c4,e4,g4] ~",
  R: "[c4,e4,g4]@2 [c4,e4,g4]!3 ~ [c4,e4,g4]!2", // C
  S: "[[b3,d4,g4]@4 [b3,d4,g4]@2 [b3,d4,g4]@4 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4] ~ [d4,g4]@17 ~@15, ~@5 [g3,b3]@6 ~@5]/3", // G G5 G
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(0.3)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@8 A B C ~@7 D E@2 F G ~ E H D ~@8 A B C ~@7 D E@2 F G ~ E H D ~@6
>`.pickRestart({
  A: "~@4 c#4 a#3 ~@2", B: "~@2 [a3,e4,g4] [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~ [a3,c4,e4,g4]", C: "~@5 [a#3,f#4] ~ d4",
  D: "~@5 a3 ~ [d4,f#4]", E: "~@5 [b3,d4,g4] ~ [b3,d4,g4]", F: "~@5 [a3,d4,f#4] ~ [a3,d4]",
  G: "~@5 [c4,e4,g4] ~ [c4,e4,g4]", H: "~@5 [c4,e4,g4] ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.08).pan(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A B C A D E C A F@2 G D@2 E C A@2 B H A@2 C B A@2 B H A B C A D E C A F@2 G D@2 E C A@2 B H A@2 C B A@2 B H A B C I@2
  ~
>`.pickRestart({
  A: "[g3,b3,d4]", B: "[g3,c4,e4]", C: "[f#3,a3,d4]", D: "[b3,d4,g4]", E: "[a3,c4,e4], g4 ~",
  F: "[[b3,d4] [a#3,c#4] [a3,c4]@2, g4, ~ e4@3]/2", G: "a3 a#3, [d4,f#4]", H: "[g3,b3,d4] [f#3,a3,d4]",
  I: "[[g3,b3,d4]@31 ~]/2", // G
})).s("gm_synth_strings_1").gain(0.13)

// other · clarinet
const clarinet = note("<~@20 A B@2 C D E F@2 ~@19 A B@2 C D E F@2 ~ G H@2 ~>".pickRestart({
  A: "b4@4 b4@10 g4 ~", B: "[g4@2 f#4@2 f#4@11 c5@4 ~ c5@8 a4@4]/2", C: "g4@15 ~", D: "b4 b4@2 d4",
  E: "c5@11 ~ d5@2 c5@2", F: "[c5@2 b4@2 b4@8 a4@3 ~ g4@9 ~@7, ~@15 b4@2 ~@15]/2", G: "d5@3 d5@3 e5@2 f#5@3 e5@3 d5@2",
  H: "[b4@31 ~]/2",
})).s("gm_clarinet").gain(0.43).pan(0.7)

// bass · electric bass finger
const bass = note(`<
  A B C D A E F D G H I D A E J K L M N K O P Q R S T N S B C D A E F D G H I D A E J K L M N K O P Q R S T N S B C D U
  ~
>`.pickRestart({
  A: "g1@5 ~ g1 ~ g1@5 ~ g1@2", B: "c2@5 ~ e2 ~ g2@4 e2@4", C: "d2@6 a1 ~ d2@4 d2@4", D: "g1@5 ~ d2 ~ e2@4 d2@4",
  E: "a1@5 ~ a1 ~ a1@4 e2@4", F: "d2@6 d2 ~ d2@6 d2@2", G: "g1@5 ~ g1@2 a#1@5 ~ a#1@2", H: "a1@6 c2 ~ e2@4 c2@4",
  I: "d2@5 ~ a1 ~ d2@5 ~ d2@2", J: "d2@6 d2 ~ d2@4 a1@4", K: "g1@5 ~ d2 ~ e2@2 d2@2 b1@2 a1@2",
  L: "g1@5 ~ g1 ~ g1@4 a1@2 b1@2", M: "c2@5 ~ g1 ~ c2@3 ~ c2@3 ~", N: "g1@5 ~ g1@2 d2@5 ~ d2@2",
  O: "g1@6 b1 ~ d2@4 b1@2 c2@2", P: "d2@6 f#2 ~ a2@4 f#2@2 d2@2", Q: "c2@6 e2 ~ g2@4 c2@4",
  R: "g1@5 ~ b1 ~ e2@2 d2@2 b1@2 a1@2", S: "g1@5 ~ b1 ~ d2@4 g1@4", T: "c2@5 ~ e2 ~ g2@4 e2@2 c2@2", U: "g1@15 ~",
})).s("gm_electric_bass_finger").gain(0.5)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@3]!58 x ~>").gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  [~ x ~ x]!11
  [~@2 x ~@2 x!3]
  [~ x ~ x]!26
  [~@2 x ~@2 x!3]
  [~ x ~ x]!14
  [~@4 x ~@7 x ~ x!2]
  [~ x ~ x]!4
  ~@2
>`).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@15 A ~@10 B ~@15 A ~@10 B ~@2>".pickRestart({
  A: "~@7 x", B: "~@14 x!2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C B C@2 D B C A E A C B C B C A E B C A C B C A D A C A D C E F B C E A G F E B F C B C B C B C B C A D A C A D H
  ~
>`.pickRestart({
  A: "x!7 ~", B: "x ~ x ~ x ~ x ~ x ~ x!3 ~@3", C: "x!8", D: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2",
  E: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", F: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", G: "x ~ x!3 ~ x ~ x ~ x ~ x ~@3", H: "x",
})).gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@15 B ~@10 A ~@15 A ~@10 A ~@2>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@11 x!2 ~@3",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@2 ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4 A ~@2 A@2 ~@2 A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@7 x",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@26 A ~@15 A ~@10 A ~@2>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<A ~@3 A ~@7 A ~@7 A ~@6 A ~@3 A ~@7 A ~@7 A ~ A ~@4 A ~ A@3 ~>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  ~@2 A@2 ~@4 A ~@7 A ~@5 A ~ A ~ A ~@2 A@2 ~@4 A ~ A ~@5 A ~ B A ~@4 A ~ A ~ A C ~@3
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<[~@3 x]!58 ~@2>").gain(0.35)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@6 x!2 ~@8]!58 ~@2>").gain(0.88)

// drums · shaker
const shaker = s("sh").struct("<[~@5 x ~@2]!58 ~@2>").gain(0.23)

stack(
  pad_new_age, piano, string_ensemble_1, acoustic_guitar_steel, acoustic_guitar_steel_2, synth_strings_1, clarinet,
  bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, tambourine, cabasa, shaker
)

More by Henry Arland