Strudelify

scars to your beautiful

Ofri Shalev

KeyF majorTempo90 bpm
0:00/0:00
// scars to your beautiful — Ofri Shalev
// 90 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 9, 4/4 at bar 10) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5868731; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 33 bars on a 16-step grid, each part at one level. 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("<A@4 B@5 C D E F G H I@2 J K J L M N@2 O P Q P R S T@2 U>".pickRestart({
  A: "[~@8 [f2,f3]@15 ~ [a2,a3]@15 ~ [f2,f3]@15 ~ [a2,a3]@8]/4", // F A F A
  B: "[[g2,g3]@8 [f2,f3]@15 ~ [a2,a3]@15 ~ [f2,f3]@15 ~ [f2,f3]@15 ~@3 [g2,g3,e4,g4,c5,e5]@2 [g2,g3,e4,g4,c5,e5]@2 [e2,e3,c4,e4,g4,c5]@2]/5", // G F A F C
  C: "[f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [c4,e4,c5] ~@6 [c4,g4,c5], [c4,f4,a4,c5]@2 ~@2 [f2,f3]!4, ~@9 [c4,e4,c5]@2 d4@2 [c4,g4,c5]@2 ~", // F C C5 F C C5
  D: "[a2,a3]@2 [a2,a3]@2 [a2,a3]@2 [a2,a3]@2 [c4,e4,a4,c5]!6 [a2,a3,e4,g4,c5,e5]@2, [c4,e4,a4,c5]@2 ~@2 [a2,a3]!3 ~", // A Am Am7 Am A
  E: "[f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [c4,e4,a4,c5]!6 [f2,f3,c4,e4,g4,c5]@2, [f4,a4,c5,f5]@2 ~@2 [f2,f3]!3 ~", // F Am C F
  F: "[a2,a3,c4,e4,c5]@4 [a2,a3,c4]@4 [d4,f4]@2 [c4,e4]@2 [b3,d4]@2 [a3,c4] [b3,d4], ~@2 [g2,g3]!2", // Am Dm C Bm Am Bm G
  G: "[f2,f3]@2 [f2,f3]@2 [f2,f3]@2 ~ [a3,c4] [f2,f3,d4,f4]@2 [f2,f3,c4,e4]@2 [f2,f3,c4,e4]@2 [f2,f3,b3,d4]@2, [c4,e4,c5]@2 ~ [f2,f3] ~@4", // F Am Dm Fmaj7 Bdim C F
  H: "[a3,b3,d4] a3 [a2,a3]@2 [a2,a3]@2 [c4,c5] ~@8 [e4,e5], a2 ~@2 [a2,a3]!5, ~ [f3,c4]@2 ~@4 [f4,f5]@2 [e4,e5]@2 [e4,e5]@2 [d4,d5]@2 ~", // Bm7 A C E A F5 F E …
  I: "[[f2,f3,d4]@2 [f2,f3]@2 [f2,f3]@2 ~ c4 f4 ~@8 [a3,c4,f4]@4 ~@7 [f2,f3] [c2,c3] [a1,a2] [f1,f2], ~ [a3,c4,f4]@2 [f2,f3]!5 [f2,f3]@4 ~@4, ~@9 e4@2 e4@2 d4@2 e4@2 ~@11 [e5,e6]@2 [g5,g6]@2]/2", // Dm F C A F E G
  J: "[f1,f2,f5,a5]@3 [f1,f2,g5] [f1,f2,f5,a5]@3 [f1,f2,g5] [f1,f2,f5,a5]@3 [f1,f2] ~@2 [f5,a5]@2, ~@11 b5@2 [f1,f2]@2 ~", // F Fsus2 F Fsus2 F
  K: "[g4,e5] [e4,a4,c5,e5]@2 [a1,a2] [a1,a2]@2 ~ [a1,a2] [a1,a2,g4,e5]@3 [a1,a2,f4,d5] ~ [a1,a2]@2 [c5,g5], [a1,a2]@2 ~@10 [g4,e5]@3 ~", // C Am A A7 Dm A C5 A …
  L: "[g4,g5] [e4,a4,c5,e5]@2 [a1,a2] [a1,a2]@2 ~ [a1,a2,e5,g5] [g1,g2,e5,c6]@2 ~ [g1,g2] ~@2 [g4,c5,g5]@2, [a1,a2] ~@4 [b4,g5]!2 ~, ~@13 [g1,g2]@2 ~", // G Am A A7 C G C5 A …
  M: "[f1,f2,c4,f4,a4]@3 g4 [f1,f2,c4,f4,a4]@3 g4 [f1,f2,f4,a4,c5]@3 ~ [f1,f2]@2 [f1,f2]!2, ~@11 [f4,a4,b4]@3 [c4,f4,a4]@2", // F Bm7b5 F
  N: "[[f1,f2,g4,c5] [e4,a4]@2 [a1,a2] [a1,a2]@2 ~ [a1,a2] [g4,e5] [g4,e5]@2 [a4,f5]@2 [a1,a2,b4,g5]@2 ~@2 [b4,g5]@2 [f1,f2] [f1,f2]@2 ~ [f1,f2,g4,e5] [f1,f2,g4,e5]@2 ~ [f1,f2] ~@2 [c5,a5]@2, [a1,a2]@2 ~@6 [a1,a2]@2 ~ [a1,a2] ~@3 [c5,a5]@2 ~@2 [c5,a5]@2 ~@5 [a4,f5]@2 [b4,g5]@2 ~@2, ~@16 [f1,f2]@2 ~@11 [f1,f2]@2 ~]/2", // Fsus2 A5 A C Dm Em F C …
  O: "[a1,a2,b4,g5]@2 ~ [a1,a2] [a1,a2]@2 ~ [a1,a2] [g1,g2]@2 ~ [g1,g2] [d6,eb6,e6,f6,gb6,g6] [d5,eb5,e5,f5,gb5,g5,ab5,a5,bb5,b5,c6,db6] [ab4,a4,bb4,b4,c5,db5] ~, ~@2 [c5,a5]@4 [g4,b4,d5,g5]@4 ~@3 [g1,g2]@2 ~, ~@7 g4", // Em A G F G
  P: "~@15 [c4,c5], [f1,f2], f5 [a3,f5]!3, ~ c5@2 c5@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 ~, ~ a4@2 [f4,a4]@2 [f4,a4]@2 [f4,a4]", // C F Dm C F
  Q: "~@15 [c4,c5], [a1,a2], e5 [a3,e5]!3, ~ c5@2 c5@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 ~, ~ a4@2 [e4,a4]@2 [e4,a4]@2 [e4,a4]", // C A A5 C A5
  R: "~@15 b4, [a1,a2]@8 [g1,g2,d5] b4 g4 b4 [gb1,gb2,d5] b4 g4@2, e5 [ab1,ab2,e5]@3, ~ c5@2 c5@2 c5@2 c5@9, ~ a4@2 a4@5", // A G5 D Dbm
  S: "f2 a2 c3 [f3,g5] a3 c4 f4 [a4,g5] f4 c4 a3 f3 c3 a2 f2 a2, [c5,f5,a5]@3 ~ [c5,f5,a5]@3 ~ [f5,a5,c6]@3 [f5,a5,b5]@3 [c5,f5,a5]@2", // Fsus2 A7 F Bm7b5 F
  T: "[[e2,c5,e5,g5] a2 c3 e3 a3 c4 e4 a4 [e4,g4,e5] c4 a3 e3 c3 a2 e2 a2 f2 a2 c3 f3 a3 c4 f4 [g4,a4,e5] f4 c4 a3 f3 c3 a2 f2 a2, ~ [a4,c5,e5]@3 ~@5 [g4,e5]@2 [a4,f5]@2 [b4,g5]@2 [c5,a5]@2 [b4,g5]@2 [c5,a5]@2 ~@3 [g4,e5]@2 [a4,f5]@2 [b4,g5]@2 [c5,a5]@2]/2", // C Em A7 Am C Dm Em F …
  U: "a2 c3 e3 a3 c4 e4 [g1,g2,g4,b4,d5,g5]@9 ~, [b4,g5] [c5,a5]@2 ~@5", // G Em F
})).s("gm_piano").gain(0.3)

// chords · acoustic guitar nylon · "Classical Guitar"
const acoustic_guitar_nylon = note("<A@4 B@5 C D C E C D C F G H G I G H G I G H G I G H G J>".pickRestart({
  A: "[~ [f3,c4,f4,a4,c5,f5]@2 [a3,e4,a4,c5,e5]@2 [f3,c4,f4,a4,c5,f5]@2 [a3,e4,a4,c5,e5]]/4", // F Am F Am
  B: "[[g3,b3,d4,g4,b4,d5] [f3,c4,f4,a4,c5,f5]@2 [a3,e4,a4,c5,e5]@2 [f3,c4,f4,a4,c5,f5]@2 [f3,c4,f4,a4,c5,f5]@2 ~]/5", // G F Am F
  C: "[f3,c4,f4,a4,c5,f5]!4", D: "[a3,e4,a4,c5,e5]!4", E: "[a3,e4,a4,c5,e5]!2 [g3,b3,d4,g4,b4,d5]!2",
  F: "[f3,c4,f4,a4,c5,f5]", // F
  G: "[f3,c4,f4,a4,c5,f5]@2 ~ [f3,c4,f4,a4,c5,f5] [f3,c4,f4,a4,c5,f5]@2 ~ [f3,c4,f4,a4,c5,f5] [f3,c4,f4,a4,c5,f5]@2 ~ [f3,c4,f4,a4,c5,f5] ~ [f3,c4,f4,a4,c5,f5]@2 ~", // F
  H: "[a3,e4,a4,c5,e5]@2 ~ [a3,e4,a4,c5,e5] [a3,e4,a4,c5,e5]@2 ~ [a3,e4,a4,c5,e5] [a3,e4,a4,c5,e5]@2 ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5]@2 ~", // Am
  I: "[a3,e4,a4,c5,e5]@2 ~ [a3,e4,a4,c5,e5] [a3,e4,a4,c5,e5]@2 ~ [a3,e4,a4,c5,e5] [g3,b3,d4,g4,b4,d5]@2 ~ [g3,b3,d4,g4,b4,d5] ~ [g3,b3,d4,g4,b4,d5]@2 ~", // Am G
  J: "[a3,e4,a4,c5,e5]@2 ~ [a3,e4,a4,c5,e5] [a3,e4,a4,c5,e5]@2 [g3,b3,d4,g4,b4,d5]@10", // Am G
})).s("gm_acoustic_guitar_nylon").gain(0.3)

stack(piano, acoustic_guitar_nylon)