Strudelify

Giorno's theme

Yugo Kanno

KeyF♯ majorTempo135 bpm
0:00/0:00
// Giorno's theme — Yugo Kanno
// 135 bpm, 4/4, key F# 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/5896238; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 163 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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(`<
  ~@20 A B C D A E F G H I J D H K L M N@2 O P N@2 Q R S T U V S T W X Y ~@35 Z AA AB AC AD AE AF AG AH AI AJ AK AL A B
  C D A E F G H I J D H K L M N@2 O P N@2 Q R ~ S T U V S T W X S T U V S T W X Y ~@16 AM@4
>`.pickRestart({
  A: "[b3,f#4]@9 ~ b3@2 d4@2 a4@2", B: "[b3,d4,g#4]@9 ~ f#4@4 e4@2", C: "[f#3,b3,d4,f#4]@15 ~",
  D: "b3@3 b3@3 b3@3 b3@3 b3 c#4 d4 e4", E: "[e4,g#4]@3 [f#4,a4]@3 [g#4,b4]@2", F: "b3@3 d4@11 ~@2",
  G: "~@12 b3 c#4 d4 e4", H: "[f#4,d5]@9 ~ [b3,f#4]@2 [d4,b4]@2 [a4,d5]@2", I: "[g#4,b4]@9 ~ f#4@4 e4@2",
  J: "[f#4,b4,d5]@15 ~", K: "[b4,d5]@3 [a4,c#5]@3 [g#4,b4]@2", L: "~ [b4,d5]@15, f#4", M: "~@2 b3 ~",
  N: "~ [d3,f#3,b3] ~@2 [d3,f#3,b3] ~ [d3,f#3,b3] ~", // Bm
  O: "b2@2 ~ [f#3,b3]@2 [f#3,b3]!2 ~ b2@2 ~ [f#3,b3]@2 [f#3,b3]!2 ~", P: "~@2 [d3,f#3,b3] [b3,f#4,b4]",
  Q: "[b2,b3] [d3,d4] ~ [f#3,f#4] [e3,e4] [d3,d4] ~ [b2,b3] [a3,a4] [g#3,g#4] ~ [f#3,f#4] [d3,d4] [c#3,c#4] ~ [b2,b3]", // B D F# E D B A G# …
  R: "[d3,b3]@2 [d3,f#3,b3]@2 [d3,b3]@2 [d3,f#3,b3]!2", // G Bm G Bm
  S: "[b2,b3,b4,d5,f#5]@4 ~@2 d5@8 ~ e5, ~@3 [g#2,g#3,g#4,b4,f5]@5, ~@7 d5", // Bm Fdim
  T: "~@3 d5 ~@3 e5, [c#3,c#4,g#4,b4,f5] [f#2,f#3,e4,a#4,c#5], ~@3 e5@5 ~@3 d5@5", // C#7 F#7
  U: "[b2,b3,b4,d5,f#5]@2 f#5 ~@4 c#5, ~@3 [g#2,g#3,d5,f5,g#5,b5]@5, ~@3 b4", // Bm G#dim
  V: "~@3 d5 ~@3 g5, [c#3,c#4,g#4,b4] [f#2,f#3,e4,a#4,c#5], d5@3 ~@5, ~@3 e5@5 ~@3 a5@5", // C#7 F#7
  W: "[b2,b3,b4,d5,f#5]@2 f#5 b5@3 ~ c#6, ~@3 [g#2,g#3,d5,f5,g#5]@5, ~@3 b5", // Bm Ddim
  X: "[d3,d4,g#5,b5,d6]@3 [g2,g3,g5]@3 [f#2,f#3,f#5]@2 [f2,f3,f5]@3 [d3,d4,d6]@3 [a#2,a#3,a#5]@2", // G#dim G F# F D A#
  Y: "~ b5@7, b4, ~ [d5,f#5]@15", Z: "[f#2,f#3,f#4,f#5]@6 [e2,e3,e4,e5]@9 ~", AA: "[e2,e3,e4,e5]@6 [d2,d3,d4,d5]@9 ~",
  AB: "[a2,a3,a4,a5]@6 [g#2,g#3,g#4,g#5]@9 ~", AC: "[g#2,g#3,g#4,g#5]@6 [g2,g3,g4,g5]@9 ~",
  AD: "[b3,b5]@6 [b3,b5]@9 ~, [b2,b4]@15 ~", AE: "[e2,e3,e4,e5] [f#2,f#3,f#4,f#5]", AF: "[b2,b3,b4,b5]@15 ~",
  AG: "[a#2,a#3,a#4,a#5]@15 ~", // A#
  AH: "~@3 c#4@2 ~ d4@2 ~ [f#2,f#3,f#4]@3 [f2,f3,f4]@2 [f#2,f#3,f#4]@2, [b2,d3,f#3,b3]@3 ~@5", // F# F F# Bm
  AI: "b4@2 ~ c#5@2 ~ d5@2 ~ e5@3 [f#2,f#3,f#5] [e2,e3,e5] [f#2,f#3,f#5]@2, [b2,d3,f#3,b3] ~", // F# E F# Bm
  AJ: "[b2,b3,b4,b5]@3 [c#3,c#4,c#5,c#6]@3 [d3,d4,d5,d6]@3 [f#3,f#4,f#5,f#6]@3 [f#3,f#4,f#5,f#6] [f3,f4,f5,f6] [f#3,f#4,f#5,f#6]@2", // B C# D F# F F#
  AK: "[f#3,d4,f#4,f#5,d6,f#6]@15 ~", AL: "[f#3,c#4,f#4,c#5,f#5]@11 ~@5", AM: "[~@8 [d2,d3,e4,a4,c#5]@53 ~@3]/4",
})).s("gm_piano").gain(0.4)

// other · distortion guitar · "Electric Guitar"
const distortion_guitar = note(`<
  A B A C A B A B A B A D E F E F E F E G H I H I H I H J K L M N K O M P Q R S T Q U V W ~@8 A B A C A B A X H I H I H
  I H I H I H I H I H I Y Z AA AB ~@21 H I H I H I H J K L M N K O M P Q R S T Q U V W ~@9 AC AD AE AF AC AD AG AH AI
  ~@3 A B A B AJ E F E F E F E AK AL@4
>`.pickRestart({
  A: "b2 ~ b2 ~ b2 a2 ~ b2 ~ d3 ~ b2 ~ f#2 a2@2", B: "b2 ~ b2 ~ b2 a2 ~ b2 ~ f3 ~ e3 ~ d3 a2@2",
  C: "b2 ~ b2 ~ b2 a2 b2 d3 ~ f3 ~ e3 ~ d3 a2@2", D: "b2 ~ b2 ~ b2 ~ a2 b2@2 ~@7",
  E: "[b2,b3] ~ [b2,b3] ~ [b2,b3] [a2,a3] ~ [b2,b3] ~ [d3,d4] ~ [b2,b3] ~ [f#2,f#3] [a2,a3]@2", // B A B D B F# A
  F: "[b2,b3] ~ [b2,b3] ~ [b2,b3] [a2,a3] ~ [b2,b3] ~ [e3,f3,e4,f4] ~ [e3,e4] ~ [d3,d4] [a2,a3]@2", // B A B Fmaj7 E D A
  G: "[b2,b3] ~ [b2,b3] ~ [b2,b3] ~ [a2,a3] [b2,b3]@3 ~@2 [b2,b3]@4", H: "b2@2 d3@2 e3 f3@2 f#3@2 a3@2 f#3 a3@2 a#3@2",
  I: "b3@2 a#3@2 a3 f#3@2 e3@2 a2@2 a2!2 a#2 b2@2", J: "b3@2 a#3@2 a3 f#3@2 e3@2 a2@2 a2 b4 c#5 d5 e5",
  K: "f#5@5 b4 d5 a5", L: "g#5@5 f#5@2 e5", M: "f#5", N: "b4@3 b4@3 b4@3 b4@3 b4 c#5 d5 e5", O: "b5@3 a5@3 g#5@2",
  P: "b3@2 a#3@2 g3 f#3@3 b3@4 d4 c#4 b3@2", Q: "a3@3 b3@3 b3@3 ~ f#3@2 a3@2 b3@2",
  R: "c#4@3 a3@3 b3@3 ~@3 d4 c#4 b3@2", S: "a3@3 b3@3 b3@3 ~ f#3@2 c#4@2 d4@2", T: "c#4@3 a3@3 e3@3 ~@3 d4 c#4 b3@2",
  U: "c#4@3 a3@3 b3@3 ~@3 d4 c#4 b3 ~", V: "b3 d4 ~ f#4 e4 d4 ~ b3 a4 g#4 ~ f#4 d4 c#4 ~ b3",
  W: "a3 b3@2 a3 b3@2 a3 b3@2 a3 b3@2 b3@2 b3@2", X: "b2 ~ b2 ~@5", Y: "e5@6 c#5 d5 e5@6 c#5 d5",
  Z: "e5@2 d5@2 c#5 d5@2 c#5@6 ~ c#5 d5", AA: "c#5 b4 a4 b4@3 a4 e4", AB: "d4@4 c#4 d4@2 c#4@4 ~@5",
  AC: "f#4@4 ~@2 f4@8 d4 e4", AD: "f4@3 e4@3 d4@2 c#4@3 d4@3 e4@2", AE: "f#4@2 f#4 b4@3 b3 c#4",
  AF: "d4@3 e4@3 d4@2 c#4@3 a4@3 g4@2", AG: "f#4@2 f#4 b4@3 b4 c#5", AH: "d5@3 g4@3 f#4@2 f4@3 d5@3 a#4@2", AI: "b4",
  AJ: "b2 ~ b2 ~ b2 ~ a2 b2 ~@8",
  AK: "[b2,b3] ~ [b2,b3] ~ [b2,b3] [a2,a3] ~ [b2,b3] ~ [f3,f4] ~ [e3,e4] ~ [d3,d4] [a2,a3]@2", AL: "[~ a3@7]/4",
})).s("gm_distortion_guitar").gain(0.4)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  A B A C A B A B A B A D A B A B A B A E F G F G F G F G F G F G F G F H I@5 J K L M N M N M N M O A B A C A B A P F G
  F G F G F G F G F G F G F G F G F G F G F G F G F G Q R S T U V U W X@2 Y Z@2 F G F G F G F G F G F G F G F H I@5 J K
  L ~@9 M N M N M N M O A B A C A B A B AA A B A B A B A B AB@4
>`.pickRestart({
  A: "b1 ~ b1 ~ b1 a1 ~ b1 ~ d2 ~ b1 ~ f#1 a1@2", B: "b1 ~ b1 ~ b1 a1 ~ b1 ~ f2 ~ e2 ~ d2 a1@2",
  C: "b1 ~ b1 ~ b1 a1 b1 d2 ~ f2 ~ e2 ~ d2 a1@2", D: "b1 ~ b1 ~ b1 ~ a1 b1@2 ~@7", E: "b1 ~ b1 ~ b1 ~ a1 b1@3 ~@2 b1@4",
  F: "b1@2 d2@2 e2 f2@2 f#2@2 a2@2 f#2 a2@2 a#2@2", G: "b2@2 a#2@2 a2 f#2@2 e2@2 a1@2 a1!2 a#1 b1@2",
  H: "b2@2 a#2@2 a2 f#2@3 b1@3 ~ b1@3 ~", I: "b1 a1 ~ b1 ~ f#1 a1 b1", J: "b1@2 ~ f2@2 e2 d2 ~ b1@2 ~ f2@2 e2 d2 ~",
  K: "b1 d2 ~ f#2 e2 d2 ~ b1 a2 g#2 ~ f#2 d2 c#2 ~ b1", L: "b1@2 b1@2 b1@2 b1!2", M: "b1@2 b2 g#1@2 g#2@3",
  N: "c#2 e2@3 f#1 a1@3", O: "d2@3 g1@3 f#1@2 f1@3 d2@3 a#1@2", P: "b1 ~ b1 ~@5", Q: "f#2!3 e2!5", R: "e2!3 d2!5",
  S: "a1!3 g#1!5", T: "b1 d2 e2 a2 b2 a2 d2 b1", U: "b1!8", V: "g2!8", W: "f#2!6 f#2@2",
  X: "b1@3 a#1@3 a1@3 g#1@3 g1@2 f#1@2", Y: "b1@3 a#1@3 a1@3 g#1@3 g1@4", Z: "f#1/2", AA: "b1 ~ b1 ~ b1 ~ a1 b1 ~@8",
  AB: "[~ c#2@7]/4",
})).s("gm_electric_bass_finger").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A B A@3 ~ A ~@3 C D@6 E F@7 G F@7 G H@6 I J C D@7 F@7 G F@36 K@2 ~@3 F@7 G F@7 G H@6 I J ~@5 H@3 L C D@7 ~@4 H@4 L
  C D@6 E M ~@3
>`.pickRestart({
  A: "x", B: "x!2", C: "x!3 ~@3 x ~", D: "~ x ~ x", E: "~ x ~@2", F: "x!3 ~ x!3 ~", G: "x!3 ~@5", H: "x!4",
  I: "x ~ x ~ x ~ x ~ x!8", J: "x!13 ~@3", K: "~@2 x ~@2 x ~@2 x ~@7", L: "x!2 ~@2", M: "~ x",
})).gain(0.3)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 A B@2 C D E@6 F ~@24 D E@7 ~@82 D E@7 G ~@8 D E@6 F ~@4>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2 ~@2", D: "~@4 x!2 ~@2", E: "x!2 ~@2 x!2 ~@2", F: "x!2 ~@6", G: "x",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct("<A ~ A B A@3 ~@13 C@7 ~ C@7 ~@17 C@7 ~ C@15 ~ C@19 ~@6 C@7 ~ C@7 ~@47>".pickRestart({
  A: "x", B: "x!2", C: "~@15 x",
})).gain(0.3)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@12 A@7 ~@25 A@7 ~@83 A@7 ~@10 A@7 ~@5>".pickRestart({
  A: "~@15 x",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  A ~ A B A@3 C D E@2 F ~@7 G H@7 I H@7 I J@6 ~ K ~@8 H@7 I H@15 I L H@7 L H@10 I M@2 N ~@2 H@7 I H@7 I J@6 ~ K O ~@3 P
  O@3 Q ~@11 C O@4 Q ~@7 G R ~@3
>`.pickRestart({
  A: "x", B: "x!2", C: "~@14 x!2", D: "x!5 ~@3 x ~@3 x ~@3", E: "x!4", F: "x!2 ~@2", G: "~@15 x", H: "~@2 x ~@3 x!2",
  I: "~ x ~@2", J: "~ x ~ x", K: "~@3 x", L: "x ~ x ~@3 x!2", M: "~@2 x ~@2 x ~@2 x ~@7", N: "~ x!12 ~@3", O: "x!16",
  P: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x!2", Q: "x!8 ~@8", R: "~ x",
})).gain(0.3)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@7 A B C@2 D E@7 F ~@24 E@7 F ~@46 G ~@30 H ~@4 E@7 F G ~@2 A ~@5 E@7 F ~@4
>`.pickRestart({
  A: "x!14 ~@2", B: "~@5 x!3 ~ x!3 ~ x!3", C: "~ x!3 ~ x!3 ~ x!3 ~ x!3", D: "~ x!3 ~ x!3 ~@8", E: "~@2 x ~@3 x!2",
  F: "~ x ~@2", G: "x", H: "~ x!2 ~ x!2 ~ x ~ x!2 ~ x!2 ~@2",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@43 [x!12 ~@4] ~@80 [x!12 ~@4] ~@34 [~ x] ~@3>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A ~@7 B@3 C B@3 D B@3 C B@3 D E F E F E F ~ G A ~@7 B@3 C B@3 D B@3 C B@3 C B@3 C B@3 H B@3 C B@3 C B@3 C B@3 C
  B@3 D ~@5 B@3 C B@3 D B@3 C B@3 D E F E F E F ~ G ~@9 A ~@16 A ~@11
>`.pickRestart({
  A: "~ x ~@6", B: "~@2 x ~@3 x!2 ~@2 x ~@3 x!2", C: "x!3 ~@3 x!5 ~@3 x!2", D: "x!3 ~@3 x!2 ~@8", E: "~ x",
  F: "x ~@2 x!2 ~@3", G: "~@3 x", H: "x!3 ~@3 x!5 ~@5",
})).gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@12 A B@2 C B@3 D ~@24 A B@2 C B@3 D ~@82 A B@2 C B@3 D E ~@8 A B@2 C B@3 D ~@4
>`.pickRestart({
  A: "~@6 x!2 ~@2 x ~@3 x!2", B: "~@2 x ~@3 x!2 ~@2 x ~@3 x!2", C: "x!3 ~@3 x!5 ~@3 x!2", D: "x!3 ~@3 x!2 ~@8", E: "x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct(`<
  A ~ A B A@3 ~@5 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@15 A ~@7 A ~@3 A ~@12 A ~@7 A ~@7 A ~@3 A ~@12 A ~@16 A
  ~@7 C ~@3
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@10 A B ~@84 C@2 ~@34 D B ~@15 D B ~@12>".pickRestart({
  A: "x ~ x!4 ~ x ~ x ~ x ~ x!2 ~", B: "x ~ x!3 ~ x!2 ~@8", C: "~@2 x ~@2 x ~@2 x ~@7", D: "x ~ x!4 ~ x ~ x ~ x ~@4",
})).gain(0.25)

stack(
  piano, distortion_guitar, bass, kick, kick_soft, rim, rim_soft, snare, snare_soft, low_tom, hihat, hihat_soft, crash,
  ride
)

More by Yugo Kanno