Strudelify

Joy of Remembrance

Lena Raine

KeyC minorTempo120 bpm
0:00/0:00
// Joy of Remembrance — Lena Raine
// 120 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5985182; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 82 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.

// other · viola
const viola = note("<~@18 A B C D E F G H I J K L M N O P ~@24 A B C D E F G H I J K L M N O P ~@8>".pickRestart({
  A: "~@4 c4@4 g4 ~@3 c5 ~@3", B: "d5@4 b4 ~@3 g4@8", C: "~@4 bb3@4 f4 ~@3 bb4 ~@3", D: "c5@4 g4 ~@3 eb4@8",
  E: "~ c4 eb4 ab4", F: "~ bb3 eb4 g4", G: "f3 ab3", H: "g3 b3", I: "c4 g3 c4 e4", J: "d4 g3 d4 f4", K: "e4 c4 e4 a4",
  L: "g4 d4 b3 ab3", M: "a3 f3 a3 c4", N: "c3 c4 e4 g4", O: "f4 gb4", P: "g4 ~",
})).s("gm_viola").gain(0.3)

// other · viola · soft notes
const viola_soft = note("<~ A B C D E F G H I ~@31 C B C D E F G H I ~@31 C>".pickRestart({
  A: "~@3 g3@5", B: "c3", C: "g3", D: "eb3", E: "bb3", F: "ab3", G: "eb4@3 bb3", H: "a3@4 g3@2 eb3 f3", I: "d3 g3",
})).s("gm_viola").gain(0.2)

// other · pizzicato strings
const pizzicato_strings = note("<~@10 A B C D E F G H ~@16 I@7 ~@9 A B C D E F G H ~@16 I@7 ~>".pickRestart({
  A: "~ g4 c5 ~", B: "bb3 ~ bb4 ~", C: "ab3 eb4 ab4 ~", D: "eb3 ~ eb4 ~", E: "f3 c4 f4 ~", F: "g3 ~ eb4 ~",
  G: "f3 ab3 c4 ~", H: "b3 ~ g4 ~", I: "a4 ~ a4 ~ a4 ~ a4 ~",
})).s("gm_pizzicato_strings").gain(0.2)

// other · cello
const cello = note(`<
  ~@10 A ~@7 B C D E F G H I J K L M N O P Q R I S T R I U T ~@8 A ~@7 B C D E F G H I J K L M N O P Q R I S T R I U T
>`.pickRestart({
  A: "c2 ~@3", B: "c3@3 g3", C: "b2", D: "bb2@3 g3", E: "a2", F: "ab2 eb3", G: "g2 eb3", H: "c4@6 b3 c4", I: "d4",
  J: "~ g2 c3 ~", K: "~@2 d3 ab2", L: "a2 e3 a3 c4", M: "~ g3 e3 b2", N: "~ a2 c3 f3", O: "~ c2 e2 g2", P: "~ f2 a2 c3",
  Q: "d3 b2 g2@2", R: "~@4 c4@3 b3", S: "~@4 b3@3 a3", T: "c4", U: "~@4 bb3@3 a3",
})).s("gm_cello").gain(0.3)

// other · cello · soft notes
const cello_soft = note("<~@2 A B C D E F G H ~@32 A B C D E F G H ~@32>".pickRestart({
  A: "c3", B: "g2", C: "eb3", D: "bb2", E: "ab2", F: "eb2", G: "f2", H: "b2 g2",
})).s("gm_cello").gain(0.2)

// other · pizzicato strings
const pizzicato_strings_2 = note("<~@10 A B C D E F G H ~@32 A B C D E F G H ~@24>".pickRestart({
  A: "~@2 c3 ~", B: "bb2 ~@3", C: "~@2 ab2 ~", D: "eb2 ~@3", E: "~@2 d3 ~", F: "g2 ~@3", G: "~@2 f2 gb2",
  H: "g2 ~ b2 ~",
})).s("gm_pizzicato_strings").gain(0.2)

// 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 ~@7 AB@2 AC@2 AD@2 AE@2 AF D E F G H I J K L M N O P Q R S T U
  V W X Y Z AA ~@7 AB@2 AC@2 AD@2 AE@2
>`.pickRestart({
  A: "~ f3 g3 [f3,f4] [g3,g4] [c4,c5] [f3,f4] [g3,g4], [c6,c7] ~@3", // F G C F G C
  B: "[c4,c5]@2 [g3,g4]@2 [c4,c5]@2 [d4,d5]@2 [c4,c5]@2 [d4,d5]@2 [g5,a5] [b5,c6] [d6,e6,f6] [g6,a6], ~@3 g4", // C G C D C D Gsus2 Cmaj7 …
  C: "c7@4 g4@2 b4@2 c5@3 d5 b4@2 g4@2, [c2,c3]@15 ~, b6 ~@11 c5 ~@3", D: "[g1,g2]@15 ~, d4@11 ~@5",
  E: "~@4 c5@2 d5@2 eb5@3 f5 d5@2 c5@2, [eb1,eb2]@15 ~, ~@12 eb5 ~@3", F: "[bb1,bb2]@15 ~, d5@11 ~@5",
  G: "~@4 eb5@2 g5@2 ab5@3 bb5 g5@2 eb5@2, [ab1,ab2]@15 ~, ~@12 ab5 ~@3", // Ab
  H: "~ eb5@7 ~ bb4@3 g4@4, [eb1,eb2]@15 ~, bb4@2 g4 ~", I: "f4@11 ~ d5@2 c5@2, [f1,f2]@15 ~",
  J: "~ [d4,b4]@15, [g1,g2,g3]", K: "~@2 c5 c6", L: "bb5 g5", M: "~@2 eb5 ab5", N: "g5 ab5 g5@6 eb5@8", O: "~@2 d5 eb5",
  P: "bb4 bb5", Q: "~@2 ab5 g5", R: "~ b4", S: "~@2 eb5 f5 g5 ab5 g5 ab5, c2@15 ~", T: "bb5@2 f5 d5, b1@15 ~",
  U: "~@2 c5 d5 eb5 f5 eb5 f5, bb1@15 ~", V: "g5@2 d5 bb4, a1@15 ~", W: "~@2 c5 d5 eb5@2 d5 c5, ab1@15 ~",
  X: "bb4@2 eb5 g5, g1@15 ~", Y: "ab5@4 g5 ab5 g5@2 f5@4 eb5@4, [f1,f2]@15 ~", Z: "[g1,g2,d5]@15 ~", AA: "c2 ~@3",
  AB: "[~@27 [f5,f6]@2 [g5,g6]@3, [a0,a1]@15 ~]/2", AC: "[[f1,f2]@15 ~, [eb5,eb6]@15 ~@17]/2",
  AD: "[[a5,a6]@25 ~@2 [f5,f6]@2 [g5,g6]@3, [c1,c2]@15 ~]/2", // A F G C
  AE: "[[eb5,eb6] [db5,db6] [eb5,eb6]@13 ~@17, [eb1,eb2]@15 ~]/2", // Eb Db Eb
  AF: "c7@4 g4@2 b4@2 c5@3 d5 b4@2 g4@2, [c2,c3]@15 ~, ~@12 c5 ~@3", // C
})).s("gm_piano").gain(0.2)

stack(viola, viola_soft, pizzicato_strings, cello, cello_soft, pizzicato_strings_2, piano)

More by Lena Raine