Strudelify

Nocturne Night

Angel Fransisca

KeyC majorTempo90 bpm
0:00/0:00
// Nocturne Night — Angel Fransisca
// 90 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4791770; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · piano
const piano = note(`<
  ~@6 A B C D E@2 F G@2 H I J K L M N O P Q R S T Q U V W X Y Z@2 AA AB AC AD AE@2 AF AG AH AI AJ@3 AK@2 AL AM AL AM AN
  AO AP AQ AL AM AL AM@2 AL AM AL AM AR AS
>`.pickRestart({
  A: "c2 e2 g2 ~ e4 f4 g4 b4, ~@3 c3@4 ~", B: "c2 f2 g2 b4 g4@2 f4@2, c5@3 c3@4 ~",
  C: "c2 e2 g2 c3@2 d2 e2 g2, g4@15 ~", D: "c2 f2 g2 c3@4 ~",
  E: "[~@2 [g4,b4,e5]@2 [e4,g4,b4,e5]@4 c5 e5 c5 e2 g2 b2 c3 [e3,c5], [e3,g3,b3]@8 [b2,e3,g3]@11 ~@3 b4@8 ~@2]/2", // Em C Em
  F: "[g3,c5] [b3,e5] g3 f3 e2 g2 b2 c3, ~ c5 [b3,b4]@2", // C5 E5 B
  G: "[c5@2 g4@2 b4@2 ~@2 c3@2 g2@2 b2@2 ~@2 c5@2 [e4,c5]@2 [c4,e5]@2 [g3,g5]@2 f2@2 g2@2 f5 g5 f5 g5, e3@3 [e4,g4]@4 ~@9, ~@3 c2 ~@3 c3@2 ~@5 f2 e2, ~@7 c5@7 ~@10 f5@4 ~@4]/2", // C G Em
  H: "b5 c6 e6 c6 g5@2 f5@2 ~@4 f5@2 e5@2, f2 g2@4 g3@3, ~@2 e5 ~", I: "[c3,c5] ~", J: "c3 e3 c3 [g2,b2,e3]@4 c3",
  K: "c3 e3 c3 [b2,e3,g3]@4 ~", L: "c5@2 e5@2 g5@2 f3 g3 f3 g3 b3@6, ~@3 f5@4 ~",
  M: "e3 f3 e3 f3 ~@2 g5@2 f5@2 e5@2 f3 e3 f3 e3, e5!2 g3@3 ~ c5@2", N: "[c3,e4,g4,c5]@15 ~",
  O: "c2 e2 f2 g2 [b2,e4,e5] [c3,f4,f5] e3 f3, [c4,c5]@2 ~ [g4,g5]", // E5 F5 C G
  P: "g3 b3 c4 [e4,c5] [f4,b4] [g4,c5] b4 c5, [b4,b5] ~@3", Q: "e5 f5 g5 b5 c6 b5 g5 f5, ~ [e3,e4]",
  R: "[c4,e5] [g3,c5] [f3,b4] [g3,g4] [c2,f4] [c2,e4]@3", S: "c2 e2 f2 g2 b2 c3 e3 f3", T: "g3 b3 c4 e4 g4!2 b4 c5",
  U: "[c4,e5]@2 [g3,c5]@2 [f3,b4]@2 [g3,g4]@2 [c2,f4]@2 [e4,f4] f4 e4@4, ~@5 c2@3", // C C5 Fdim G F5 Fmaj7
  V: "b3 c4 e4 f4 g4 b4 c5 b4 g4 f4 e4 c4 [b3,c4] c4 e4 f4, [g2,g3]@2 [b2,b3]@2 [c3,c4]@2 c3 ~", // Cmaj7 G B C
  W: "g4 b4 c5 b4 g4 f4 e4 ~ b3 ~ e4 f4 g4 b4 c5 b4, [b2,b3]@2 ~@2 c3@11 ~, ~@4 c4@3 c4@2 c4@6 ~", // B
  X: "g4 f4 e4 c4 b3 c4 e4 f4 g4 b4 c5 b4 g4 f4 e4 c4",
  Y: "b3 c4 e4 f4 g4 b4 c5 b4 g4 f4 e4 c4 b3 c4 e4 f4, e4 c4 g3 f2 g2 f2 e2@2",
  Z: "[g4 b4 c5 b4 g4 f4 e4 c4@2 e4 f4 g4 b4 ~@9 c4@2 e4@2 c4@2 b3@2 g3@2, ~@13 c5@14 ~@5]/2",
  AA: "e3 g3 b3 c4 e4 c4 b3 g3", AB: "~ g3 b3 c4 e4 c4 b3 g3, [e5,g5], e3 ~@7, ~ [b5,e6]@15",
  AC: "~ b3 c4 e4 g4 e4 c4 b3, [g5,b5], g3 ~@7, ~ [e6,g6]@15", // G Em
  AD: "~ c4 e4 a4 e4 c4 a3 b3, [a5,c6], a3 ~@7, ~ [e6,a6]@15", // Am A5
  AE: "e5 e6 b5 e6 c6 e6 b5 e6 g5 e6 b5 e6 g5 e6 f5 e6, e3 g3 b3 c4 e4 c4 b3 g3",
  AF: "e5 e6 b5 e6 c6 e6 b5 e6 g5 e6 b5 e6 g5 e6 f5 e6, g3 b3 c4 e4 g4 e4 c4 b3",
  AG: "e5 e6 b5 e6 c6 e6 b5 e6 c6 e6 b5 e6 a3@4, a3 c4 e4 a4 e4 c4 ~@2",
  AH: "[a3,a5] [b3,b5] [a3,a5] [b3,b5] c6@8 e4@2 g4@2, ~@2 c4 ~@5", AI: "b4 c5 b4@2 f4@4",
  AJ: "[~@8 f3 g3 f3 g3 ~@2 f5 g5 f5 g5 e3 f3 e3 f3 ~@2 g5@2 f5@2 e5@2 f3 e3 f3 e3 [c3,e4,g4,c5]@13 ~, ~@6 b3@3 e5!2 g3@3 ~ c5@2 ~@7]/3", // C
  AK: "c3 e3 f3 e3 f3 e3 c3 b2",
  AL: "[b3,e4,f4,b4] ~ e3@2 f3@2 e3@2 f3@2 e3@2 c3@2 b2@2, c3 ~@7, ~ [b3,e4,f4,b4]@11 ~@4", // E
  AM: "[c4,f4,g4,c5] ~ e3@2 f3@2 e3@2 f3@2 e3@2 c3@2 b2@2, c3 ~@7, ~ [c4,f4,g4,c5]@11 ~@4", // Csus4
  AN: "c3@2 b5 c6 b5 g5 b5 c6 e6 c6 b5 g5 f5 g5 b5 c6, ~ e3 f3 e3 f3 e3 c3 b2",
  AO: "e6 c6 e3@2 f3@2 e3@2 f3@2 e3@2 c3@2 g5 f5, c3 b5@4 ~@2 b2",
  AP: "e5 f5 e5 b5 g5 b5 e3@2 f3@2 e3@2 c3@2 c4 e4, c3 e3 f3 c6@4 b2",
  AQ: "c4 e4 c4 b3 a3 ~ e3@2 f3@2 e3@2 c3@2 b2@2, c3 e3 f3 ~@5, ~@5 b3@4 ~@7", AR: "c3 b2 c3 b2 g2 f2 g2 f2",
  AS: "~@5 e6@7 ~@4, e2 ~, ~ [e5,b5]@2 ~", // E5
})).s("gm_piano").gain(0.3)

stack(piano)