Strudelify

Mellow

Deemo

KeyA minorTempo65 bpm
0:00/0:00
// Mellow — Deemo
// 65 bpm, 6/8, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/1734686; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 45 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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.

// chords · piano
const piano = note(`<
  A B A C D E F G H I H J K L M N O P Q R S T U V W X Y Z AA AB AC AD W AE AF AG AH AI AJ AK AL AM AN AO AP
>`.pickRestart({
  A: "a3@4 [c#4,e4]@4 [c#4,e4]@4 a3@4 [c#4,e4]@4 [c#4,e4,d5]@3 e5, e5 ~@2", // C#m
  B: "a3 [d4,f4]!2 a3 [d4,f4]!2, f5@2 ~ g5@2 ~", // Dm
  C: "a3@4 [d4,f4]@4 [d4,f4]@4 a3@4 [d4,f4]@4 [d4,f4,a4]@3 b4, f5@2 ~ e5@2 ~", // Dm
  D: "d3@4 [f3,a3,c4]@4 [f3,a3,c4]@4 d3@4 [f3,a3,c4]@4 [f3,a3,c4,b4]@3 a4, c5 ~@2", // F
  E: "g3@4 [b3,d4]@4 [b3,d4]@4 [g3,b4]@8 ~@3 c5, e5 ~@2", F: "d3 [f3,a3,c4]!2 d3 [f3,a3,c4] [f3,c4,e5], a4 ~@2",
  G: "[g3,g4,b4] [b3,d4] [d4,g4,b4] [b3,d4]@2 ~", // G Bm G Bm
  H: "[a3,e4,e5,e6]@3 d6 [c#4,e4,c#6]@3 d6 [c#4,e4,e6]@4 a3@4 [c#4,e4]@4 [c#4,d4,e4,d6]@3 [e4,e6]", // A5 C#m E
  I: "[a3,f4] [d4,f4]!2 [a3,g4] [d4,f4]!2, f6@2 ~ [g5,g6]@2 ~", // Dm A7 Dm G
  J: "[a3,f4]@4 [d4,f4]@4 [d4,f4]@3 e4 a3@4 [d4,f4]@4 [d4,f4,a4,a5]@3 [b4,b5], f6@2 ~ e6@2 ~", // Dm B
  K: "d3@4 [f3,a3,c4]@4 [f3,a3,c4]@4 d3@4 [f3,a3,c4,b4,b5]@4 [f3,a3,c4,a4,a5]@3 e5, [c5,c6] ~@2", // F C
  L: "g3@4 [b3,d4]@4 [b3,d4]@4 [g3,b3,d4,f4,b4,b5]@8 [c5,c6]@3 [b4,b5], e6 ~@2", // Bm G7 C B
  M: "d3 [f3,a3,c4]!2 d3 [f3,a3,c4,g4,e5,e6] [f3,c4,f5,f6], [a4,a5] ~@2", // F Fmaj7 F5 A
  N: "[g3,g4] [b3,d4]!2 g3 [b3,d4] g3, [e5,e6]@2 ~ [d5,d6]@2 ~", O: "[d3,f4,a4] [f3,a3,c4]!2 d3 [f3,a3,c4]!2",
  P: "g2 [d3,b3,d4] [d3,b3,f4] g2 f3!2", Q: "[g3,d4,b4] g4 [d4,g4] g3 [d4,g4,b4]!2",
  R: "a3 [c#4,e4]!2 a3 [c#4,f4] [c#4,e4,g4]", S: "d3 [f3,a3,c4]!2 [d3,f4] [f3,a3,c4]!2",
  T: "f3 [a3,c4,e4]!2 f3 [a3,c4,e4]!2", U: "g3 [b3,d4,g4]!2 g3 [b3,d4] g3",
  V: "[e3,g3,b3,d4,g#4]@11 ~ [b3,d4,g#4]@11 [e5,e6]", // E7 G#dim E
  W: "[f3,e5,e6]@3 [c5,c6] [a3,c4,f4,c5,c6]@3 a5 [a3,c4,f4,a4,a5]@3 [f4,f5] [f3,e4,e5]@3 [f4,f5] [a3,c4,f4,a4,a5]@3 [c5,c6] [a3,c4,f4,c5,c6]@3 [e5,e6]", // Fmaj7 C F Fmaj7 F C F E
  X: "[g3,e5,g5,e6]@4 [d4,f4]@4 [d4,f4]@4 g3@3 g5 [d4,f4,d5]@3 g5 [d4,f4,d6]@4, ~ [d5,g5,d6]@2 ~@3", // C Dm G5
  Y: "[e3,d5,g5,d6]@3 [b4,b5] [b3,d4,b4,b5]@3 g5 [b3,d4,g4,g5]@3 [e4,e5] [e3,d4,d5]@3 [e4,e5] [b3,d4,g4,g5]@3 [b4,g5,b5] [b3,d4,b4,g5,b5]@3 [g5,d6]", // Em7 B Bm G E E7 E G …
  Z: "[g3,d5,g5,d6]@4 [c4,e4]@4 [c4,e4]@4 g3@3 [c5,c6] [c4,e4,a4,a5]@3 [f4,f5] [c4,e4,e5]@3 [f4,f5], ~ [c5,g5,c6]@2 ~@3", // G5 C Am F C F C5
  AA: "[d3,a4,a5] [f3,a3,c4,c5,c6] [f3,a3,c4,a4,a5] [d3,c5,f5] [f3,a3,c4,c5,e5] [f3,a3,c4,c5,g5,c6]", // D5 F Dm7 Fmaj7 F
  AB: "g3@4 [b3,d4,f4]@4 [b3,d4,f4]@4 [g3,g4,b4,g5,b5]@4 [b3,d4,f4,g4,g5]@4 [b3,d4,f4]@3 [d4,d5], [g4,b4,g5,b5] ~@2", // Bdim G G7 Bdim D G
  AC: "[c3,e4,g4,e5]@4 [g3,b3,d4,d5]@4 [g3,b3,e4,e5]@4 [g4,g5] [e4,e5] ~ [g4,g5] [g3,b3,b4,b5]@3 [g4,g5] [g3,b3,b4,b5]@3 [c5,c6], ~@3 c3 ~@2", // C G Em G E G C
  AD: "[c3,d5,d6]@3 [c5,c6] [g3,b3,d5,d6]@3 [e5,e6] [g3,b3,f5,f6]@3 [g4,g6] [c3,b4,g5,g6]@4 [g3,b3,f5,f6]@4 [g3,b3,e5,e6]@4", // Csus2 C G E G7 G Cmaj7 G7 …
  AE: "[g3,e5,e6]@4 [d4,f4]@4 [d4,f4]@4 g3@3 b4 [d4,f4,g4,g5]@3 b4 [d4,f4,d5,g5]@4, ~ [d5,d6]@2 ~@3", // C Dm G7 D
  AF: "[e3,d5,g5,d6]@3 [b4,b5] [b3,d4,b4,b5]@3 g5 [b3,d4,g4,g5]@3 [b4,b5] [e3,b4,b5]@4 [b3,d4,g5,g6]@4 [b3,d4,d5,g5,d6]@4", // Em7 B Bm G B E5 G
  AG: "[e3,d5,g5,d6] [a3,c4]!2 [f3,c5,g5,c6] [a3,c4,d5,g5,d6] [a3,c4,e5,e6], ~ [e5,e6]@2 ~@3", // Em7 Am Fsus2 Am7 Am E
  AH: "d3@4 [f3,a3,c4]@4 [f3,a3,c4]@4 [c5,g5,c6]@4 [d5,g5,d6]@4 ~@3 e6, [f4,a4,f5,a5]@2 ~ d3@2 ~", // F C5 G5 F
  AI: "g3 [d4,f4]!2 [g3,b4,g5,b5]@2 ~, [g4,b4,g5,b5] ~@2", AJ: "~ [e5,e6]@7 ~@4 e5@8 ~@4, [a4,c6] ~@2",
  AK: "~ [d6,f6]@7 ~@4 [f5,g6]@8 ~@4, [a4,f5] ~@2", AL: "~ [e5,e6]@7 ~@8 d6@4 e6@4, [a4,c6] ~@2",
  AM: "~ f6@7 ~@4 g6@8 ~@4, [a4,f5] ~@2", AN: "~ [e5,e6]@7 ~@16, [a4,c6] ~@2",
  AO: "~ [f5,f6]@7 ~@4 [f5,d6]@8 ~@4, [a4,d5] ~@2", AP: "~ [e5,e6]@15 ~@8, [a4,c6]@5 ~@3",
})).s("gm_piano").gain(0.3)

// other · glockenspiel
const glockenspiel = note("<~@7 A ~@2 B C D E F G H I J ~ K ~@24>".pickRestart({
  A: "~@3 e7@2 ~", B: "~@12 e7@3 d7 c#7@3 d7 e7@4", C: "f7@2 ~ e7@2 ~", D: "c7 ~@2", E: "e7@2 ~ b6@2 ~",
  F: "a6@2 ~ e7@2 ~", G: "e7 ~@2", H: "~@8 e7 f7 e7 d7", I: "c7 d7 c7 d7 c7 b6 a6 b6 a6 b6 a6 g6",
  J: "~ a6!3 a6@2 ~ a6!3 a6@2", K: "~@3 f6 a6 c7 f7@4 ~@2",
})).s("gm_glockenspiel").gain(0.25)

// other · glockenspiel · soft notes
const glockenspiel_soft = note("<~@16 [b7 a7 g7 a7 g7 f7 e7 f7 ~@4] ~@28>").s("gm_glockenspiel").gain(0.15)

stack(piano, glockenspiel, glockenspiel_soft)