Strudelify

miraculous ladybug theme

PDScores

KeyB majorTempo160 bpm
0:00/0:00
// miraculous ladybug theme — PDScores
// 160 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/6428505; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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@2 B@2 A@2 B@2 C D E F C G H F I@2 J@2 K@2 L M N@3 O@4 P@2 C D Q R C S T F I@2 J@2 U@2 L M V ~@7 W@3 O@4 X@2 Y@6 Z@4
  O@4 P@2 C D Q R C S T F I@2 J@2 U@2 L M V ~@7 W@3 O@4 X@2 Y@6 AA@2 AB@2 AC
>`.pickRestart({
  A: "[[g#2,d#3,g#3]@2 d#3@2 [g#2,d#3,g#3]@2 ~@4 b2 [e3,b4,e5] [e2,b2,e3]@2 b2@2, [g#4,d#5]@4 [g#4,d#5]@3 [b4,e5]@2 [b4,e5]@2 ~ [b4,e5]@4, ~@3 d#3 [e2,b2,e3] ~@3]/2", // G#5 E5 G#5 E5
  B: "[[b2,f#3,b3]@2 f#3@2 [b2,f#3,b3]@2 ~@4 c#3 [f#3,f#4,c#5] [f#2,c#3,f#3]@2 c#3@2, [f#4,b4]@4 [f#4,b4]@3 [f#4,c#5]@2 [f#4,c#5]@2 ~ [f#4,c#5]@4, ~@3 f#3 [f#2,c#3,f#3] ~@3]/2", // B5 F#5 B5 F#5
  C: "[g#2,d#3,g#3]@2 d#3 c#5!2 [d#3,b4] [g#2,g#3,b4] d#3, ~@3 [g#2,d#3,g#3]@2 ~@3", // G#5 G#m G#5
  D: "[e2,b2,e3]@2 b2 c#5!2 [b2,b4] [e2,e3,b4] b2, ~@3 [e2,b2,e3]@2 ~@3", // E5 B E5
  E: "[b2,f#3,b3]@2 f#3 c#5!2 [f#3,b4] [b2,b3,b4] [f#3,b4], ~@3 [b2,f#3,b3]@2 ~@3", // B5 B B5
  F: "~@2 c#3 [f#2,c#3,f#3,a#4]@2 [c#3,b4] [f#2,f#3,b4] c#3, [f#2,c#3,f#3] ~@3, ~ a#4@2 ~@5", // F# C#7 B5 F#5
  G: "[e2,b2,e3]@2 b2 c#5!2 [b2,b4] [e2,e3,b4,d#5] b2, ~@3 [e2,b2,e3]@2 ~@3", // E5 B Emaj7 E5
  H: "[b2,f#3,b3,c#5]@2 f#3 c#5!2 [f#3,b4] [b2,b3,b4] [f#3,b4], ~@3 [b2,f#3,b3]@2 ~@3", // Bsus2 B5 B B5
  I: "[[g#2,d#3,g#3]@2 [d#3,g#5,g#6] ~ [f#5,f#6] d#3 [g#2,g#3] d#3 ~@2 b2 [b4,f#5] d#5 [b2,c#5] [e2,e3,b4] b2, [d#5,d#6] ~@2 [g#2,d#3,g#3]@2 ~@2 [b4,d#5]@2 [b4,d#5]@2 ~@5, ~@8 [e2,b2,e3]@2 ~ [e2,b2,e3]@2 ~@3]/2", // G#5 F# G# B5 Bsus2 E5 D# G#5 …
  J: "[[b2,f#3,b3]@2 [b2,g#5,g#6] ~ [f#5,f#6] f#3 [b2,b3] f#3 ~@2 c#3 [b4,f#5] d#5 [c#3,c#5] [f#2,f#3,b4] c#3, [d#5,d#6] ~@2 [b2,f#3,b3]@2 ~@2 [b4,d#5]@2 [b4,d#5]@2 ~@5, ~@8 [f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@2 ~@3]/2", // B5 E F# B B5 C# B5 D# …
  K: "[[g#2,d#3,g#3]@2 [d#3,g#5,g#6] ~ [f#5,f#6] d#3 [g#2,g#3] d#3 ~@2 b2 [b4,e5] d#5 [b2,c#5] [e2,e3] b2, [d#5,d#6] ~@2 [g#2,d#3,g#3]@2 ~@2 [b4,d#5]@2 [b4,d#5]@2 ~@3 b4@2, ~@8 [e2,b2,e3]@2 ~ [e2,b2,e3]@2 ~@3]/2", // G#5 F# G# E5 Bsus2 E D# G#5 …
  L: "[b2,f#3,b3,b4,e5]@2 [f#3,d#5] [b2,f#3,b3,c#5]@2 f#3 [b2,b3] [f#3,d#5], ~@5 b4@2 ~", // Bsus4 D#m Bsus2 B D#m
  M: "[f#2,c#3,f#3,f#4,c#5] c#3 [f#2,c#3,f#3,f#4,c#5] c#3 [f#2,c#3,f#3,f#4,c#5] c#3 [f#2,c#3,f#3,f#4,c#5] c#3", // F#5
  N: "[[f#2,c#3,f#3,f#4,c#5] ~ [f#2,c#3,f#3,f#4,c#5] ~ [b4,b5] [a#4,a#5] [f#4,f#5] ~ [g#2,d#3,g#3]@2 d#3 ~ [b4,b5] [d#3,a#4,a#5] [g#2,g#3,f#4,f#5] d#3 [e2,b2,e3]@2 b2 ~ [b4,b5] [b2,a#4,a#5] [e2,e3,f#4,f#5] [b2,g#4,g#5], ~@7 [g#4,g#5]@2 ~@2 [g#2,d#3,g#3]@2 ~@2 [g#4,g#5]@2 ~@2 [e2,b2,e3]@2 ~@3]/3", // F#5 B A# F# G#5 B D#5 G#7 …
  O: "[~ [g#4,g#5] f#3 [b2,f#3,b3,g#4,g#5]@2 f#3 [b2,b3] f#3 ~@2 c#3 ~ [b4,b5] [c#3,a#4,a#5] [f#2,f#3,f#4,f#5] c#3 [g#2,d#3,g#3]@2 [d#3,b4,b5] [g#2,d#3,g#3,a#4,a#5]@2 d#3 [g#2,g#3] d#3 [e2,b2,e3]@2 b2 [g#4,g#5] [b4,b5] [b2,a#4,a#5] [e2,e3,f#4,f#5] [b2,g#4,g#5], [b2,f#3,b3]@2 ~@3 [d#5,d#6]@2 [c#5,c#6]@2 [d#5,d#6]@3 ~@3 [g#4,g#5]@2 ~@4 [f#4,f#5]@2 [g#4,g#5]@2 ~@7, ~@8 [f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@2 ~@14 [e2,b2,e3]@2 ~@3]/4", // G# G#m7 B F# G#5 G#m G#sus2 G# …
  P: "[~ [g#4,g#5] f#3 [b2,f#3,b3,g#4,g#5]@2 f#3 [b2,b3] f#3 ~@2 c#3 [f#2,c#3,f#3]@2 c#3 [f#2,f#3] c#3, [b2,f#3,b3]@2 ~@3 [d#5,d#6]@2 [c#5,c#6]@2 [d#5,d#6]@3 ~@4, ~@4 [f#2,c#3,f#3] ~@3]/2", // G# G#m7 B F#5 F# B5 D# C# …
  Q: "[b2,f#3,b3]@2 f#3 c#5!2 [f#3,b4] [b2,b3,b4] f#3, ~@3 [b2,f#3,b3]@2 ~@3", // B5 B B5
  R: "~ a#4 [c#3,a#4] a#4!2 [c#3,b4] [f#2,f#3,b4] c#3, [f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@2 ~@3", // F# C#7 B5 F#5
  S: "[e2,b2,e3]@2 b2 c#5!2 [b2,b4] [e2,e3] b2, ~@3 [e2,b2,e3]@2 ~ [b4,d#5]@2", // E5 B E E5 B
  T: "[b2,f#3,b3,c#5]@2 f#3 c#5!2 [f#3,b4] [b2,b3,b4] f#3, ~@3 [b2,f#3,b3]@2 ~@3", // Bsus2 B5 B B5
  U: "[[g#2,d#3,g#3]@2 [d#3,g#5,g#6] ~ [f#5,f#6] d#3 [g#2,g#3] d#3 ~@2 b2 [b4,e5] d#5 [b2,c#5] [e2,e3,b4] [b2,b4], [d#5,d#6] ~@2 [g#2,d#3,g#3]@2 ~@2 [b4,d#5]@2 [b4,d#5]@2 ~@5, ~@8 [e2,b2,e3]@2 ~ [e2,b2,e3]@2 ~@3]/2", // G#5 F# G# E5 Bsus2 E5 B D# …
  V: "[f#2,c#3,f#3,f#4,c#5] ~ [f#2,c#3,f#3,f#4,c#5] ~@5", // F#5
  W: "[[f#2,c#3,f#3] c#3 [f#2,c#3,f#3] c#3 [f#2,c#3,f#3,b4,b5] [c#3,a#4,a#5] [f#2,c#3,f#3,f#4,f#5] c#3 [g#2,d#3,g#3]@2 d#3 ~ [b4,b5] [d#3,a#4,a#5] [g#2,g#3,f#4,f#5] d#3 [e2,b2,e3]@2 b2 ~ [b4,b5] [b2,a#4,a#5] [e2,e3,f#4,f#5] [b2,g#4,g#5], ~ [d#5,d#6]@3 ~@3 [g#4,g#5]@2 ~@2 [g#2,d#3,g#3]@2 ~@2 [g#4,g#5]@2 ~@2 [e2,b2,e3]@2 ~@3]/3", // F#5 F#sus4 F# F#5 G#5 B D#5 G#7 …
  X: "[~ [g#4,g#5] f#3 [b2,f#3,b3,g#4,g#5]@2 f#3 [b2,b3] f#3 ~@2 c#3 ~ [b4,b5] [c#3,a#4,a#5] [f#2,f#3,f#4,f#5] [c#3,g#4,g#5], [b2,f#3,b3]@2 ~@3 [d#5,d#6]@2 [c#5,c#6]@2 [d#5,d#6]@3 ~@4, ~@8 [f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@2 ~@3]/2", // G# G#m7 B F# C#5 B5 D# C# …
  Y: "[[g#2,d#3,g#3]@2 d#3 [g#2,d#3,g#3,a#4,a#5]@2 d#3 [g#2,g#3] d#3 [e2,b2,e3]@2 [b2,b4,b5] [e2,b2,e3,a#4,a#5]@2 b2 [e2,e3] b2 ~@2 f#3 [b2,f#3,b3]@2 f#3 [b2,b3] f#3 ~@2 c#3 ~ [b4,b5] [c#3,a#4,a#5] [f#2,f#3,f#4,f#5] c#3 [g#2,d#3,g#3]@2 [d#3,b4,b5] [g#2,d#3,g#3,a#4,a#5]@2 d#3 [g#2,g#3] d#3 [e2,b2,e3]@2 b2 [g#4,g#5] [b4,b5] [b2,a#4,a#5] [e2,e3,f#4,f#5] [b2,g#4,g#5], [b4,b5]@3 ~@2 [f#4,f#5]@2 [d#4,d#5]@2 ~@4 [f#4,f#5]@2 [d#4,d#5]@2 [f#4,f#5]@4 [f#4,f#5]@2 [d#4,d#5]@2 [f#4,f#5]@2 ~@4 [g#4,g#5]@2 ~@4 [f#4,f#5]@2 [g#4,g#5]@2 ~@7, ~@16 [b2,f#3,b3]@2 ~@6 [f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@2 ~@14 [e2,b2,e3]@2 ~@3]/6", // G#5 G#sus2 G# E5 B E B5 B …
  Z: "[~ [g#4,g#5] f#3 [b2,f#3,b3,g#4,g#5]@2 f#3 [b2,b3] f#3 ~@2 c#3 ~ [b4,b5] [c#3,a#4,a#5] [f#2,f#3,f#4,f#5] c#3 [g#2,d#3,g#3]@2 d#3 ~ [b4,b5] [d#3,a#4,a#5] [g#2,g#3,f#4,f#5] d#3 [e2,b2,e3]@2 b2 ~ [b4,b5] [b2,a#4,a#5] [e2,e3,f#4,f#5] [b2,g#4,g#5], [b2,f#3,b3]@2 ~@3 [d#5,d#6]@2 [c#5,c#6]@2 [d#5,d#6]@2 ~@4 [g#4,g#5]@3 ~@5 [g#4,g#5]@2 ~@7, ~@8 [f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@2 ~@6 [g#2,d#3,g#3]@2 ~@6 [e2,b2,e3]@2 ~@3]/4", // G# G#m7 B F# G#5 B D#5 G#7 …
  AA: "[~ [g#4,g#5] f#3 [b2,f#3,b3,g#4,g#5]@2 f#3 [b2,b3] f#3 [g#2,d#3,g#3,b4,d#5]@2 [g#2,d#3,g#3,g#4,b4,d#5,g#5]@2 [g#2,d#3,g#3,g#4,b4,d#5,g#5]@2 [g#2,d#3,g#3,g#4,b4,d#5,g#5]@2, [b2,f#3,b3]@2 ~@3 [d#5,d#6]@2 [c#5,c#6]@2 ~@7]/2", // G# G#m7 B G#m B5 D# C#
  AB: "[[b2,e3,b3,e4,g#4,b4,e5]@4 [b2,e3,b3,e4,g#4,b4,e5]@5 [c#3,a#3,c#4,f#4,a#4,c#5,f#5]@5 [c#3,a#3,c#4,g4,a#4,c#5,g5]@6 [g#2,d#3,g#3,g#4,g#5]@12]/2", // E F# Gdim G#5
  AC: "~ g#1@13 ~@2",
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@49 A@7 B@2 ~@40 A@7 B@2 ~@19>".pickRestart({
  A: "[~@4 [b4,b5] [a#4,a#5] [f#4,f#5] g#4 g#4 ~@3 b5 a#5 f#5 ~ b3@2 ~@7 g#5@2 g#5@2 d#6@2 ~@9 d#3@2 ~@6 b2@2 ~@5 g#5, ~@7 g#5@2 ~@6 g#5@5 b5 a#5 f#5 g#5@2 ~@6 c#6@4 f#4 b5 a#5 f#5 g#5@6 f#5@2 g#5@4 g#5 b5 a#5 f#5@2, ~@16 [g#3,d#4]@15 ~ e3@16 ~@16 f#3@16 g#2@16 e2@16, ~@16 e4@3 e4@5 ~@8 f#4@2 c#4@6 g#3@3 [g#3,a#5]@5 ~@2 b2@6, ~@36 b3@12 [b3,f#4]@15 ~ c#4@2 d#6@14 ~@4 [d#3,b5]@12 e3@6 e3@10]/7", // B A# F# G#5 G#sus2 B5 G#m
  B: "[~@2 f#3 [b2,f#3,b3,g#5]@2 f#3 [b2,b3] [c#5,c#6]@2 ~@7, [b2,f#3,b3]@2 ~@5 f#3 ~@8, ~ g#5@2 ~@2 [d#5,d#6]@2 ~@9]/2", // G#m7 B C# B5 D#
})).s("gm_piano").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@25 A@23 B C ~@8 A@39 B C ~@8 A@15 ~@4>".pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x!4", C: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@25 A@23 B C ~@8 A@39 B C ~@8 A@15 ~@4>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "x",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@24 A B@4 C B@3 C B@14 ~ D ~@7 D C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@14 ~ D ~@7 D C B@3 C B@3 C B@3 C B@2 ~@4
>`.pickRestart({
  A: "~@14 x!2", B: "x!8", C: "~ x!7", D: "~@12 x!4",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@25 A ~@3 A ~@3 A ~@16 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@16 A ~@7 A ~@3 A ~@3 A ~@3 A ~@6
>`.pickRestart({
  A: "x",
})).gain(0.3)

stack(piano, piano_soft, kick, snare, pedal_hat, crash)