Strudelify

Zonnestraal

Long Dinh

KeyF majorTempo124 bpm
0:00/0:00
// Zonnestraal — Long Dinh
// 124 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5906406; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 52 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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@2 C A D@2 C ~@20 E F G H A B@2 C A B@2 C A B@2 C A B@2 C A B@2 I>".pickRestart({
  A: "[c3,eb3,g3]@11 ~@5 [c3,eb3,g3]@3 ~@3 [c3,eb3,g3]@2 ~@2 [c3,eb3,g3]@2 ~@2 [c3,eb3,g3] ~", // Cm
  B: "[[eb3,f3,g3,bb3]@11 ~@5 [eb3,f3,g3,bb3]@3 ~@3 [eb3,f3,g3,bb3]@2 ~@2 [eb3,f3,g3,bb3]@2 ~@2 [ab2,c3,eb3,g3]@12 ~@6 [ab2,c3,eb3,g3]@3 ~@3 [ab2,c3,eb3,g3]@2 ~@6 [ab2,c3,eb3,g3] ~]/2", // Eb Abmaj7
  C: "[bb2,d3]@11 ~@17 [c3,eb3,g3]@4", // Bb Cm
  D: "[[eb3,f3,g3,bb3]@11 ~@5 [eb3,f3,g3,bb3]@3 ~@3 [eb3,f3,g3,bb3]@2 ~@2 [eb3,f3,g3,bb3]@2 ~@2 [ab2,c3,eb3,g3]@12 ~@6 [ab2,c3,eb3,g3]@3 ~@3 [ab2,c3,eb3,g3]@2 ~@6 [ab2,c3,eb3,g3]@2]/2", // Eb Abmaj7
  E: "~@11 [g4,bb4]@2 [g4,bb4]@3 [g4,bb4]@3 [g4,bb4]@2 [g4,bb4]@3 [g4,bb4]@3 [g4,bb4]@2 [g4,bb4]@3", // Gm
  F: "[bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3 [bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3 [bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3 [bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3", // Bb
  G: "[eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3 [eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3 [eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3 [eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3", // Eb
  H: "[g4,bb4]@27 ~@5", I: "[bb2,d3]@15 ~",
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@8 A B C D A B C D A B C D A B C D E F G E H ~@23>".pickRestart({
  A: "c3@15 ~", B: "bb2@15 ~", C: "ab2@15 ~", D: "[g2,bb2]@15 ~",
  E: "[g4,bb4]@3 [g4,bb4]@2 [g4,bb4]@3 [g4,bb4]@3 [g4,bb4]@2 [g4,bb4]@3 [g4,bb4]@3 [g4,bb4]@2 [g4,bb4]@3 [g4,bb4]@3 [g4,bb4]@2 [g4,bb4]@3", // Gm
  F: "[bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3 [bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3 [bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3 [bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@3", // Bb
  G: "[eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3 [eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3 [eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3 [eb4,g4]@3 [eb4,g4]@2 [eb4,g4]@3", // Eb
  H: "[g4,bb4]@3 [g4,bb4]@2 [g4,bb4]@3 [g4,bb4]@3 ~@21", // Gm
})).s("gm_piano").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!16 ~@8 [x!2]!20>").gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@32 [~ x ~ x]!20>").gain(0.3)

stack(piano, piano_soft, kick, clap)