Strudelify

the letter that never came

Thomas Newman

KeyF majorTempo72 bpm
0:00/0:00
// the letter that never came — Thomas Newman
// 72 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/135813; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/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(`<
  A B C D E F G H I B C D E F G H I J K L M N O N P Q R S T@2 U V W X Y Z AA AB AC AD AE
>`.pickRestart({
  A: "~@2 c4", B: "[c3,f4]@2 ~ g4 ~ f4, c4, a4@2 ~, ~@2 f4@3 ~, ~ c3 [c3,a4]",
  C: "[d3,d4,f4,bb4]@3 [c3,c4,f4,a4]@2 [c3,d4]", D: "[c3,f4]@2 ~ g4 ~ d4, c4, a4@2 ~, ~ f4@2, ~ c3 [c3,a4]",
  E: "[d3,bb3,d4,f4]@3 [d3,a3,d4,f4]@2 [d3,d4]", F: "~@3 d4 [g3,f4]@2, [bb3,g4]@2 ~, d4 ~, g3!2 ~, ~ f4@2 ~@3",
  G: "d3@2 d3@2 ~ d4, [a3,d4,f4]@2 d3", H: "~@2 [g3,f4], [bb3,g4], d4!2, g3!2 ~, ~ f4@2 ~@3",
  I: "d3@3 d3@2 [c3,c4], [a3,d4,f4]@2 ~", J: "f2@2 f4 g4 a4 f4, f4 ~ a2@2 c3@2",
  K: "[d3,d4,f4,bb4]@3 [c4,f4,a4]@2 c4, ~ c3", L: "f2@2 f4 g4 a4 d4, f4 ~ a2@2 c3@2", M: "[bb2,f4]@3 f4@2 d4, ~ d3",
  N: "g4 ~@2 d4 [bb2,f4]@2, [bb2,g3] d3 ~, ~ f4@2 ~@3", O: "[a2,f3]@2 d3@2 ~ d4, f4@2 a2",
  P: "[a2,e3,f3]@2 d3@2 ~ c4, f4@2 a2, ~ f3@2", Q: "f3 c3 bb2 d3 f3 [bb3,d4,f4,bb4,d5], [c4,f4,a4,c5]@2 ~",
  R: "~ f3 c3 a2 f2 [a2,c4,f4,a4,c5], [a3,c4,f4,a4]@2 ~", // F
  S: "f3@2 c3@2 bb2@2 d3@2 f3@2 [bb3,c4,eb4,f4,eb5] [bb3,d4,f4,d5], [c4,f4,a4,c5]@2 ~", // Bbsus4 Bb F
  T: "[~ f3 c3 a2 f2 a2 g4 f4@2 d4 [a2,c3,e3,c4,f4,a4]@2, [a3,c4,f4,a4,c5]@4 ~ f4@2 ~@5, ~@3 [f2,a2,d3]@2 ~, ~@2 d4 ~]/2", // Fmaj7 F Dm
  U: "[bb2,d3,f3,bb3,f4]@2 [a2,c3,e3,c4,f4]", V: "[f4,g4] f4@2 d4 [a2,c3,e3,c4,f4,a4]@2, [f2,a2,d3]@2 ~, d4 ~",
  W: "[bb2,d3,f3,bb3,f4]@2 ~", X: "[c3,f3]@2 ~ [eb4,eb5] [c3,f3,d4,d5]@2, c4@2 ~, [f4,c5] f4, ~ [bb2,f3] ~",
  Y: "[c3,f3] [bb2,f3] [c3,f3,c4,f4,a4], [c4,f4,c5]@2 ~", Z: "[bb2,d3,d4,f4,bb4] [c3,e3] [d3,f3], ~ [d4,f4,c5]@2",
  AA: "[a3,c4,f4,a4,c5]@2 [f3,a4], c3", AB: "[bb2,d3,d4,f4,bb4]@2 [d4,f4,c5]@2 ~ [f3,a3,f4], ~@2 [c3,e3]@3 ~",
  AC: "[e3,g3,e4,g4] [f3,a3,f4,a4]@2", AD: "e4 ~@2 g4 [c3,a4]@2, c3 d3 ~, ~ f4@2 ~@3",
  AE: "g2 f2@2, [a2,c3,f3,c4,f4,c5]", // F
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note("<~@17 A B A C D E D F G H G I J K J K L M N O P Q R S>".pickRestart({
  A: "f2 c3 a3 ~@2 c4, a4, f4@2 f4, c4@3 c4@2 ~", B: "bb2 d3 f3 a3 f3 c3, [d4,f4,bb4] [c4,f4,a4]",
  C: "bb2 d3 f3 a3 f3 d3, [d4,f4,bb4] [d4,f4,a4]", D: "bb2 d3 f3 d3 bb2 f2, [bb3,d4,g4]",
  E: "d2 f2 a2 d3 a2 f2, [a3,d4,f4]", F: "d2 f2 a2 d3 a2 e2, [a3,d4,f4]",
  G: "[c4,f4,a4,c5] ~ [f2,f3], [f2,f3]@2 ~, ~ [c4,d4,f4,bb4,d5]@2", H: "[f2,f3]@2 [f2,f3], [c4,f4,a4,c5]",
  I: "[f3,a3,c4,f4,c5]@2 c3", J: "[f2,bb2,f3,f4]@2 [a2,c3,a3,e4]", K: "[f2,bb2,d3] ~ f4, d4@2 ~",
  L: "f2 c3 f3 eb3 d3@2, [c4,f4,c5]", M: "c3 a2 f2 a2 c3 d3", N: "bb2 f2 bb2 c3 d3 f3, [d4,f4], bb4@2 d5",
  O: "~ f3 c3 a2 f2 a2, [a3,c4,f4,a4]@2 ~", P: "bb2 f2 bb2 c3 d3 f3, [bb3,d4,bb4] [c4,d4,f4,c5] ~",
  Q: "a3 f3 c3 a2 f2 a2, [c4,e4,g4,c5] [c4,f4,a4,c5]@2", // C F
  R: "[c2,e4] [f2,f4] g2 [a2,bb4] c3 [f3,f4], [c4,g4,c5] [c4,c5]@2, ~@2 f4@3 ~, ~ a4!2", S: "g3 f3@2, [c3,a3,c4,a4,f5]",
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)