Strudelify

Berceuse de Jocelyn from Jocelyn Op 100

Godard

KeyA minorTempo120 bpm
0:00/0:00
// Berceuse de Jocelyn from Jocelyn Op 100 — Godard
// 120 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 4/4 at bar 33) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5917222; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 55 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// other · flute
const flute = note(`<
  ~@14 A B C D E F G H I J K L M N M O P Q R S@2 T U@2 V@2 W X Y@2 Z AA AB@2 AC AD AE@2 AF@3
>`.pickRestart({
  A: "~@11 b4@5", B: "b4@8 b4@3 b4@2 b4@3", C: "e5@10 ~ f5@5", D: "e5@8 d5@3 c5@2 b4@3", E: "a4@15 ~", F: "~@11 a4@5",
  G: "c5@8 c5@3 b4@2 a4@3", H: "c5@10 ~ c5@5", I: "d5@8 d5@3 c5@2 a#4@3", J: "d5@8 d5@3 d5@2 d5@3", K: "f5@10 ~ c5@5",
  L: "c5@10 ~ c5@2 c5@3", M: "a#4@10 ~ a4@2 g4@3", N: "a4@10 ~ a4@2 a4@3", O: "f4@3 g4@2 a4@3 d5@3 e5@2 f5@3", P: "a5",
  Q: "g5@15 ~", R: "a4@5 c5@3 a4@3 a#4@2 c5@3", S: "[e5@3 c5@2 f5@23 ~ c5@3]/2", T: "b4@3 c5@2 e5@3 d5@3 c5@2 a#4@3",
  U: "[a4@10 ~ g4@10 ~@3 a4@3 c5@2 a4@3]/2", V: "[a#4@3 c5@2 e5@3 c5@3 g5@10 f5@8 f5@3]/2", W: "a5@10 ~ g5@5",
  X: "f5@3 d5@2 c5@3 a4@3 e5@4 d5", Y: "[c5@10 ~ f4@20 ~]/2", Z: "~@5 e5@5 ~@6", AA: "g5@13 f5@3",
  AB: "[e5@3 f5@2 c5@4 a4 ~ c5@20 ~]/2", AC: "a4@5 f5@10 ~", AD: "f5@5 e5@10 ~", AE: "[a4@5 c5@5 ~ d5@10 g5@8 f5@3]/2",
  AF: "[f5@20 ~ f6@20 ~@7]/3",
})).s("gm_flute").gain(0.15)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B A C D@2 E F G@2 H I J K L ~@3 A B M@2 N@2 O P@2 N P Q R S T@2 U@2 V@2 W@2 X@2 Y@2 Z@2 AA@2 AB@3 AC AD AE@2
>`.pickRestart({
  A: "e5", B: "d5@5 e5@5 ~ d5@5", C: "d5@5 b4@5 ~ c5@5", D: "a4@8 b4@3 c5@5", E: "b4@8 c5@3 d5@5", F: "c5@8 d5@3 e5@5",
  G: "d5@3 g5@2 e5@3 g5@3 f5@2 g5@3", H: "d5@3 g5@2 e5@3 f5@3 d5@2 e5@3", I: "c5@3 d5@2 b4@3 c5@3 a4@2 b4@3",
  J: "g#4@8 a4@3 f4@2 a4@3", K: "g#4@5 a4@3 c5@3 b4@2 a4@3", L: "g#4@11 ~@5", M: "[e5@21 ~@11]/2", N: "f4", O: "a4",
  P: "g4", Q: "a4@11 a4@5", R: "a#4", S: "c5", T: "[f3@11 g3@10 a3@11]/2", U: "[a#3@11 a3@10 g3@11]/2",
  V: "[a#3@11 c4@10 f3@11]/2", W: "[g3@11 a3@10 a3@11]/2", X: "[a#3@11 b3@10 c4@11]/2", Y: "[c4@11 f3@10 a3@11]/2",
  Z: "[g3@11 c4@10 a3@11]/2", AA: "[f3@11 g3@10 c4@11]/2", AB: "[f3@11 d4@10 a3@21 ~ d4@5]/3", AC: "g4@5 c4@11",
  AD: "f3@3 c4@2 d4@3 f4@3 a4@2 c5@3", AE: "[d5@3 f5@2 c6@21 ~@6]/2",
})).s("gm_clarinet").gain(0.15)

stack(flute, clarinet)