Strudelify
KeyE majorTempo95 bpm
0:00/0:00
// Lit — Kensuke Ushio
// 95 bpm, 3/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (3/4 at bar 1, 4/4 at bar 25, 3/4 at bar 26, 4/4 at bar 65, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/6223963; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 72 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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.

// other · piccolo · "Ottavino"
const piccolo = note("<~@28 A B@4 ~ C D@5 E@4 A F@2 A G@2 ~@2 H@4 I@5 ~@11>".pickRestart({
  A: "~@2 g#6", B: "g#6/4", C: "~@2 b6", D: "b6/5", E: "e6/2", F: "g#6/2", G: "[g#6@5 ~]/2", H: "b6/4",
  I: "[e6@33 ~@7]/5",
})).s("gm_piccolo").gain(0.25)

// other · timpani
const timpani = note("<~@25 [~@8 g#2!16] a2 ~@45>").s("gm_timpani").gain(0.2)

// other · timpani · soft notes
const timpani_soft = note("<~@25 [~@2 g#2!6 ~@16] ~@46>").s("gm_timpani").gain(0.1)

// other · xylophone · "Xilofono"
const xylophone = note("<~@26 A@3 B A C A D A@3 B A C A D ~@30>".pickRestart({
  A: "g#5@2 b4@2 f#5@2 b4@2 a5@3 g#5", B: "g#5 b4 f#5 b4 d#5 e5", C: "g#5@2 b4@2 d#5@2 b4@2 a5@3 g#5",
  D: "f#5 b4 d#5 b4 d#5 e5",
})).s("gm_xylophone").gain(0.4)

// chords · piano
const piano = note("<~@26 A B C D A E C F G H I J G K I L M N O P M Q O P R S T U R V W@2 ~@14>".pickRestart({
  A: "~@8 a4@3 g#4, [a1,a2,g#4], ~ b3@2 b3@3, ~ f#4@2", B: "~@8 a4@3 g#4, [b1,b2,g#4], ~ b3@2 b3@3, ~ f#4@2",
  C: "~@8 a4@3 g#4, [c#2,c#3,g#4], ~ b3@2 b3@3, ~ f#4@2", D: "~@5 e4, [g#1,g#2,g#4], ~ b3@2 b3@3, ~ f#4@2, ~@2 d#4",
  E: "~@8 a4@3 g#4, [b1,b2,g#4], ~ b3@2 b3@3, ~ d#4@2", F: "~@5 e4, [g#1,g#2,f#4], ~ b3@2 b3@3, ~ d#4!2",
  G: "~@8 [a4,a5]@3 [g#4,g#5], [a1,a2,g#4,g#5], ~ [b3,b4]@2 [b3,b4]@3, ~ [f#4,f#5]@2", // A G# Amaj7 B F#
  H: "~@8 [a4,a5]@3 [g#4,g#5], [b1,b2,g#4,g#5], ~ [b3,b4]@2 [b3,b4]@3, ~ [f#4,f#5]@2", // A G# E B F#
  I: "~@8 [a4,a5]@3 [g#4,g#5], [c#2,c#3,g#4,g#5], ~ [b3,b4]@2 [b3,b4]@3, ~ [f#4,f#5]@2", // A G# C#5 B F#
  J: "~@5 [e4,e5], [g#1,g#2,g#4,g#5], ~ [b3,b4]@2 [b3,b4]@3, ~ [f#4,f#5]@2, ~@2 [d#4,d#5]", // E G# B F# D#
  K: "~@8 [a4,a5]@3 [g#4,g#5], [b1,b2,g#4,g#5], ~ [b3,b4]@2 [b3,b4]@3, ~ [d#4,d#5]@2", // A G# E B D#
  L: "~@5 [e4,e5], [g#1,g#2,f#4,f#5], ~ [b3,b4]@2 [b3,b4]@3, ~ [d#4,d#5]!2", M: "[a1,a2,a3,c#4]",
  N: "b3@2 b3@3 [b3,d#4], [b1,b2], d#4@5 ~, ~ c#4@2", O: "[c#2,c#3,c#4,e4]", P: "[g#1,g#2]",
  Q: "b3@2 ~@3 [d#4,f#4], [b1,b2], d#4@5 ~, ~ [b3,c#4]@2", R: "[a2,a4,c#5]",
  S: "b4@2 b4@3 [b4,d#5], b2, d#5@5 ~, ~ c#5@2", T: "[c#3,c#5,e5]", U: "~@5 e5, [g#2,g#5], ~ f#5@2",
  V: "b4@2 ~@3 [d#5,f#5], b2, d#5@5 ~, ~ [b4,c#5]@2", W: "[c#3 g#2, [c#5,e5]]/2",
})).s("gm_piano").gain(0.57)

// chords · piano · soft notes
const piano_soft = note("<A@3 B@7 C@7 D@4 E@5 ~@35 F@6 G@5>".pickRestart({
  A: "[~@32 [c#3,c#4,e4]@11 ~@22 a4@7, ~@9 [a2,a3]@34 ~@11 f#4@18, ~@9 c#4@22 ~@17 b3@11 ~ b3@12, ~@20 [b2,b3,d#4]@22 ~ [e3,g#4]@29]/3", // C#m A B E
  B: "[~@2 g#4@2 ~@31 g#4@3 ~@22 a4@9 g#4@2 ~@23 [c#3,c#4,e4]@11 ~@22 a4@9 g#4@2 ~@23 a4@7, ~@4 d#3@34 d3@34 ~@11 [b2,b3,d#4]@22 e3@34 ~@29, ~@4 g#4@23 a4@11 g#4@31 ~@2 c#4@22 ~@12 g#4@31 ~@14 d#4@18, ~@10 b3@11 b3@17 ~@5 b3@11 ~ b3@17 ~@39 b3@11 b3@17 ~@5 b3@11 b3@13, ~@16 f#4@22 ~@11 f#4@22 [a2,a3]@34 ~@11 f#4@22 [d#3,g#4]@30]/7", // C#m B A G#5
  C: "[~ g#4@3 ~@22 a4@9 g#4@3 ~@22 [c#3,c#4,e4]@11 [d#3,a3,c#4,e4,g#4]@34 [f#2,a3,c#4]@33 b3@11 b3@11 [b3,d#4]@8, ~@2 d3@17 [a2,a3]@17 ~@33 g#2@15, ~@4 g#4@31 ~@114 c#4@19, ~@10 b3@11 b3@17 c#4@22 ~@78 d#4@22 ~@8, ~@15 f#4@22 ~@12 [b2,b3,d#4]@22 ~@97]/7", // C#m Amaj7 F#m B A B
  D: "[~@37 a1@34 [f#2,a3,c#4]@25, ~ [a3,c#4,e4]@16 ~@7, ~ a2@12 ~@11]/4", // F#m A
  E: "[~@8 b3@11 b3@17 [b3,d#4]@6 ~@33 e6@45, ~@4 g#2@17 [a2,a3,c#4,e4]@24 ~@15, ~@2 d#4@7 ~@7 e5@12 ~@2, ~@19 c#4@22 ~@79]/5", // B A
  F: "[~@39 g#4@3 ~@35 g#4@3 ~@39 g#4@25, ~@5 e3@38 d#3@38 d3@58 ~@5, ~@5 g#4@25 a4@13 g#4@25 a4@13 g#4@25 a4@38, ~@11 b3@13 b3@19 ~@6 b3@13 b3@19 ~@6 b3@13 b3@44, ~@17 f#4@25 ~@13 f#4@25 ~@13 f#4@48 ~@3]/6",
  G: "[~ [b3,e4]@109 ~@10, [e3,g#3]@11 ~]/5", // E5 E
})).s("gm_piano").gain(0.21)

// other · acoustic guitar nylon · "Chitarra classica"
const acoustic_guitar_nylon = note("<~@26 A@3 B A C A D A@3 B A C A D ~@25 E@5>".pickRestart({
  A: "g#4@2 b3@2 f#4@2 b3@2 a4@3 g#4", B: "g#4 b3 f#4 b3 d#4 e4", C: "g#4@2 b3@2 d#4@2 b3@2 a4@3 g#4",
  D: "f#4 b3 d#4 b3 d#4 e4", E: "[~@2 e4@35 ~ e2@76 ~@6, e3@19 ~@41, ~ [g#3,b3]@37 ~@82]/5",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// chords · orchestral harp · "Arpa"
const orchestral_harp = note("<~@26 A@3 B A C A D A@3 B A C A D E F G H E I G H ~@22>".pickRestart({
  A: "g#5@2 b4@2 [f#5,e6]@2 b4@2 a5@2 ~ g#5, ~@2 b5 ~@5 b5 ~ e6@2", // F#7
  B: "g#5 b4 [f#5,e6] b4 d#5 [e5,e6], ~@2 b5 ~@5 b5 ~@3", // F#7 E
  C: "g#5@2 b4@2 [d#5,e6]@2 b4@2 a5@2 ~ g#5, ~@2 b5 ~@5 b5 ~ e6@2", // Emaj7
  D: "f#5 b4 [d#5,e6] b4 d#5 [e5,e6], ~@2 b5 ~@5 b5 ~@3", E: "~@2 b5 ~ e6@2 ~@2 b5 ~ e6@2, [a3,c#4]",
  F: "~@2 b5 ~ e6@2 ~@2 b5 ~ [b3,d#4,e6]@2, [b3,d#4]@2 [b3,c#4]@3 ~", G: "~@2 b5 ~ e6@2 ~@2 b5 ~ e6@2, [c#4,e4]",
  H: "~@2 b5 ~ e6@2 ~@2 b5 ~ e6@2", I: "~@2 b5 ~ e6@2 ~@2 b5 ~ [d#4,f#4,e6]@2, [b3,d#4]@2 [b3,c#4]@3 ~",
})).s("gm_orchestral_harp").gain(0.25)

// chords · string ensemble 1 · "Archi"
const string_ensemble_1 = note("<~@26 A B C D A B C E A B C D A B C E A F C D A F C D ~@22>".pickRestart({
  A: "[a1,a2,e4,a4,e5]", B: "[b1,b2,e4,b4,e5]", C: "[c#2,c#3,e4,c#5,e5]", D: "[g#1,g#2,e4,g#4,e5]",
  E: "[g#1,g#2,d#4,g#4,d#5]", F: "[b1,b2,d#4,b4,d#5]",
})).s("gm_string_ensemble_1").gain(0.19)

// chords · string ensemble 1 · "Archi" · soft notes
const string_ensemble_1_soft = note("<~@50 A B C D A B C D ~@14>".pickRestart({
  A: "[e4,a4,e5]", B: "[d#4,b4,d#5]", C: "[e4,c#5,e5]", D: "[e4,g#4,e5]",
})).s("gm_string_ensemble_1").gain(0.1)

// drums · kick
const kick = s("bd").struct("<~@26 x!24 ~@22>").gain(0.25)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@50 x!8 [x!2 ~@4] [~@3 x ~@3 x ~@16] ~@12>").gain(0.15)

// drums · ride
const ride = s("rd").struct("<~@41 [~@20 x!4] x ~@29>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@25 [~@9 x!15] x ~@45>").gain(0.2)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@25 [~@2 x!7 ~@15] ~@46>").gain(0.1)

stack(
  piccolo, timpani, timpani_soft, xylophone, piano, piano_soft, acoustic_guitar_nylon, orchestral_harp,
  string_ensemble_1, string_ensemble_1_soft, kick, kick_soft, ride, crash, crash_soft
)