Strudelify

Negra Sombra

Joan Montes by MST

KeyD♭ majorTempo70 bpm
0:00/0:00
// Negra Sombra — Joan Montes by MST
// 70 bpm, 3/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5190470; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 90 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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
const piano = note(`<
  ~@5 A B@2 C D@2 E ~@2 F@2 E ~@4 E ~@2 F@2 E ~@4 G H ~@5 I J@2 K@2 L@2 M N O P@2 Q R@2 E ~@2 F@2 E ~@4 G H ~@5 I J@2
  K@2 L@2 M N O P@2 S@2 T@2 U V W X
>`.pickRestart({
  A: "~@5 [eb2,eb3], ~@2 [f2,f3]", // Eb F
  B: "[~@5 [f4,f5] ~@5 [eb4,eb5], d2@3 [ab4,ab5] [gb4,gb5]@2 ~ [ab4,ab5]@5, [f4,f5] [d3,f3]@2 [eb3,gb3,gb4,gb5] [eb3,gb3,b3,gb4,gb5]@2, d3 bb3@5, ~ [bb4,bb5]@5 ~@4 [f4,f5]@2]/2", // F Eb Ab Gb Ab F Dm Ebm …
  C: "[bb3,db4] bb3 ~@3 [eb4,eb5], db5@2 [a3,c4,c5], ~ [db4,f4,f5]@5, ~ bb3@2, ~@6 a3 g3@5", // Bbm Eb Am Db
  D: "[~@8 [gb2,eb3,gb3]@16 [bb1,bb2]@15 ~@9, [bb2,f3,db5] ~, [bb3,db4]@4 [bb3,db4,gb4,bb4]@15 ~@5, ~ [c4,c5]@5 ~@6]/2", // Ebm Bb Bbm Gb C
  E: "[bb2,f3,db4]@2 ~", F: "[db4 [gb2,gb3]@2 bb2@3, [bb2,f3] ~, ~ [bb3,db4,gb4,bb4]@5]/2",
  G: "[db3,f4,ab4] [f4,ab4] [f3,f4,ab4], db4, ~ db3@2", H: "[ab2,ab3,eb4], ab4@2 ~",
  I: "~@5 [c2,c3,ab3,eb4], ~@2 [db2,db3]", J: "[[bb2,f4,bb4] ~ db3 f3@2 f3, db4 ab4, ~ f4@5, ~ [bb2,bb4]@2 ~@3]/2",
  K: "[[ab2,eb4,ab4] ~ c3 eb3@2 eb3, ~ eb4@5, ~ [ab2,ab4]@2 gb4@3]/2", // Ab5 Ab
  L: "[[gb2,db4,gb4] ~ bb2 [db3,f4] ~ [c3,c4,eb4], ~ db4@3 [db3,db4,f4]@2, ~ [gb2,gb4]@2 db2@3]/2", // Gb5 Db Cm Db Gb
  M: "[bb3,db4]@2 [bb3,db4]@2 ~ ab4, ~@2 [bb3,db4,gb4]", N: "~@3 f4 f4@4 [ab3,b3,f4]@4, [a3,c4,gb4]",
  O: "bb3 [bb3,e4]@2, f4", P: "[f4!2 a3 bb3 [bb3,e4]@2, c4 ~, ~ f4@2]/2", Q: "[f3,f4] [f3,f4]@2, c4",
  R: "[[f3,f4]@2 ~@3 db4 ~@5 c4, ~ f3@3 [f3,eb4]@2, ~@2 f4@4 ~ db4@3 db4@2, ~@4 eb4@2 c4@5 ~]/2", // F F7
  S: "[[f3,f4]@2 ~@9 eb3, c4 [f2,a3,c4], ~ f4@5, ~ f3@4 f3]/2", // F
  T: "[~ [bb4,bb5] ~@3 [bb4,bb5] ~ [gb4,gb5] ~@3 [eb4,eb5], [f4,f5]@3 ~@2 [f4,f5], d3 bb3@5, ~ [d3,f3]@2 [eb3,gb3] [eb3,gb3,b3,gb4,gb5]@2, ~ [bb4,bb5] [ab4,ab5] [ab4,ab5]@3]/2", // Bb Gb Eb F Dm Ebm B Bb …
  U: "db4 [f4,f5] ~@3 [eb4,eb5], db5@2 [a3,c4,c5], bb3 [bb3,f4,f5]@2, ~ db4@5, ~@6 a3 g3@5", // F Eb Am Bb5
  V: "~ [c4,c5]@5, [bb2,db4,db5], bb3 ~@2", W: "[db4,bb4] [gb2,gb3,db4,gb4,bb4]@2, [bb2,f4]",
  X: "~ [f4,bb4]@23, [bb1,bb2,db4]", // Bb5 Bbm
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note(`<
  A B@2 A C@2 ~@5 D E@2 ~@2 D F G H@2 D E@2 ~@2 D F G I J ~ K L M@2 N O P ~@14 D E@2 ~@2 D F G I J ~ K L M@2 N O P ~@16
  Q ~@2
>`.pickRestart({
  A: "~@5 [c3,c4], [bb2,bb3]@2 [bb2,bb3], ~ [db3,db4]@5, ~@3 [c3,c4]@2 ~", // C Bb Db C
  B: "[~@4 a3@4 ~@8 [bb3,db4]@8 [a3,c4]@15 ~@9, bb2 ~, bb3 [a3,c4]@2 ~@3, ~ a2@5 ~@6, ~@4 [f2,f3,f4]@15 ~@5]/2", // Bbm Am F
  C: "[~ a3 ~@2 [bb3,db4]@2 [a3,c4]@6, bb2 [a3,c4]@2 ~@3, bb3 [f2,f3]@4 ~, ~ a2@5 ~@6, ~ f4@5]/2", // Bbm Am F
  D: "~@2 [bb2,f3,db4]", E: "[f3@2 ~ bb2@2 [bb2,f3,eb4], [bb2,eb4] db4, ~@2 f3@3 ~]/2", F: "[f2,f3,c4]@2 [f2,f3,c4]",
  G: "[eb2,eb3,bb3,eb4]@2 [eb2,eb3,bb3,eb4]", // Eb5
  H: "[f3@4 [bb2,bb3,db4]@2 ~@5 c3, [f2,a3,c4] [a3,c4,f4], ~ f3 f3, ~@5 eb3]/2", I: "f3@2 [bb2,f3,bb3,db4], [f2,a3,c4]",
  J: "c4@2 [eb2,eb3,ab3,c4,gb4,ab4], [f2,f3,a3,f4]", K: "~@2 [db3,f4,ab4]", L: "[gb3,db4,gb4]@2 [gb3,db4,gb4], gb2",
  M: "[f4@4 ~ [eb2,eb3] bb3@2 ~@2 d3@2, [db2,db3,db4] d2, ~ f4 [bb3,f4], ~@2 [f2,f3,c4] d3@2 ~]/2", // Eb Db Bb5 F5
  N: "eb4@2 ~@3 [db2,db3], [eb2,bb3], eb3@2 eb3, ~ [a3,eb4]@2", O: "[ab3,eb4] ~ c3, c2, c3@2 ~, ~ [ab3,eb4]@2",
  P: "[db2,db3]@2 ~, db4, ab3@5 ~", Q: "~@2 [gb2,gb3], ~ bb3@2",
})).s("gm_piano").gain(0.2)

// other · recorder · "Flauta dulce"
const recorder = note("<~@53 A B C D@2 A E F G@2 ~@16 A H A H ~@4 I J K>".pickRestart({
  A: "bb5 db6!2 c6 bb5 c6", B: "bb5 a5 f5@4", C: "bb5 db6!3 c6 db6", D: "[c6@3 bb5 bb5@16 ~@4]/2",
  E: "bb5 bb5@3 ab5@4 ab5@8 bb5@8, ~ c6 ~@22", F: "bb5 ab5 gb5@2 ab5@2", G: "[gb5 f5 f5@18 ~@4]/2",
  H: "bb5 bb5@3 a5@12 ~@8, ~ c6 ~@22", I: "db6 c6 bb5@2 [bb5,db6]@2", J: "bb5 bb5@2", K: "bb5",
})).s("gm_recorder").gain(0.3)

stack(piano, piano_soft, recorder)