Strudelify

Uchiage Hanabi

DAOKO x ç³æçå

KeyF majorTempo96 bpm
0:00/0:00
// Uchiage Hanabi — DAOKO x ç³æçå
// 96 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5834412; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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.

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@19 A B C ~@2 D E D E D E D F ~@11 G ~@11 D E D E D E D H I J@2 K L J M N O P Q R O P S T O P U R O P S V ~@6
>`.pickRestart({
  A: "g4!8", B: "a4!8", C: "bb4!8", D: "f4@2 ~@8 e4@3 e4@3", E: "f4 ~@4 a4!2 ~", F: "f4 g4 f4 ~",
  G: "~@8 g3 a3 c4 ~ d4 ~ a3 ~", H: "f4 g4 a4@2", I: "~@10 c5@2 a4 g4 f4 g4", J: "g4@4 ~@6 c5@2 a4 g4 f4 g4",
  K: "g4@4 ~@6 d5@2 c5 bb4 a4 c5", L: "c5@4 ~@6 c5@2 a4 g4 f4 g4", M: "g4@4 ~@6 f4 g4 a4@2 bb4@2", N: "bb4 g4@3 ~@4",
  O: "d4@4 c4 d4 f4@2 g4@4 a4@4", P: "f4@4 a4 g4 f4@2 g4@4 c5@4", Q: "a4@2 f4 c4 d4@2 c4 bb3", R: "c4",
  S: "d5@6 a4@2 g4@6 f4 g4", T: "a4@6 g4 e4 f4@4 d4 e4 f4 g4", U: "a4@4 f4 e4 c4@2 d4@4 c4@2 bb3@2",
  V: "a4@6 g4 e4 f4@8",
})).s("gm_trumpet").gain(0.4)

// chords · piano
const piano = note(`<
  ~@7 A B C B C B C B D E F E G E F ~ H I J I J I J I K B C B L ~@19 I J I J I J I M N@5 O P Q I J I J I J I R I J I J I
  J I S T U V ~@3
>`.pickRestart({
  A: "~@5 a4 c5 a4, ~@5 [f2,c3]@3", B: "g4 a4 c5 f4 g4 a4 c5 f4, [bb2,f3]@9 ~ [c3,g3]@6",
  C: "g4 a4 c5 f4 g4 a4 c5 a4, [d3,a3]@9 ~ [f2,c3]@6", D: "g4 a4 c5 f4 g4 a4 c5 a4, [d3,a3]@9 ~ [f3,c4]@6",
  E: "g4 a4 c5 f4 g4 [c2,g2,c3,a4] ~ f4, [bb1,f2,bb2]@9 ~@3 c5@2 ~@2, ~@13 [c2,g2,c3]@3", // Am7 Bb5 C5
  F: "g4 a4 c5 f4 g4 [f2,c3,f3,a4] ~ a4, [d2,a2,d3]@9 ~@3 c5@2 ~@2, ~@13 [f2,c3,f3]@3", // F D5 F5
  G: "g4 a4 c5 f4 g4 [f2,c3,a4] ~ a4, [d2,a2,d3]@9 ~@3 c5@2 ~@2, ~@13 [f2,c3]@3", H: "f2!12 ~@4, [f3,c4]@11 ~@5",
  I: "[bb2,f4,c5,f5]@3 f3 [bb3,c4,d4]@2 bb1 [f2,bb2]@2 bb1 [e4,c5,e5]@3 [e4,c5,e5]@2 c2", // Bbsus2 Bb Bb5 C
  J: "[d3,f4,c5,f5]@3 d3 [f3,a3]@2 d2 [a2,d3]@2 d2 [a4,c5,a5]@2 [a4,c5,a5]@2 ~ a1", // Dm7 F D5 Am
  K: "[f4,c5,f5] [g4,g5] [f4,c5,f5] ~", L: "g4 a4 c5 f4 g4 [f2,c3]@3, [d3,a3]@9 ~ a4@2 ~@4",
  M: "[f4,c5,f5]@4 [g4,g5]@4 [a4,d5,f5,a5]@2 [a4,d5,a5]!6", N: "c6 bb5 a5 g5 c6 bb5 a5 g5 c6 bb5 a5 g5 c6 bb5 a5 g5",
  O: "c6@2 bb5 a5 d6 c6 bb5 g5 d6 c6 bb5 g5 d6 c6 bb5 g5", P: "e6 d6 c6 g5 e6 d6 c6 g5 e6 d6 c6 g5 e6 d6 c6 g5",
  Q: "[c5,c6]!4 [c5,f5]!2 [c5,f5]@2", R: "[d3,f4,c5,f5]@3 d3 [f3,a3]@2 d2 [a2,d3]@2 d2 ~@5 a1",
  S: "[bb1,f2,bb2]@4 [c2,g2,c3]@4 d3 a2 d2 a1 d1 d2@3, [f4,c5,f5] ~@7", // Bb5 C5 F5
  T: "g5 a5 c6 f5 g5 a5 c6 f5, [bb3,f4]@9 ~ [c4,g4]@6", U: "g5 a5 c6 f5 g5 a5 c6 a5, [d4,a4]@9 ~ [f4,c5]@6",
  V: "[bb3,f4]@9 ~@7, g5 ~@7", // Bb5
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft = note("<A B A C D E D F ~@28 D G D G D G D G H I H J K L M ~@38 N O@3>".pickRestart({
  A: "g5 a5 c6 f5 g5 a5 c6 f5, [bb3,f4]@9 ~ [c4,g4]@6", B: "g5 a5 c6 d6 g5 a5 d5 f5, [d4,a4]@9 ~ [f4,c5]@6",
  C: "g5 a5 c6 d6 g5 a5 d5 f5, [d4,a4]@9 ~ [f3,c4]@6", D: "g4 a4 c5 f4 g4 a4 c5 f4, [bb2,f3]@9 ~ [c3,g3]@6",
  E: "g4 a4 c5 f4 g4 a4 c5 f4, [d3,a3]@9 ~ [f2,c3]@6", F: "g4 a4 c5 f4 g4 ~@3, [d3,a3]@9 ~@7",
  G: "g4 a4 c5 f4 g4 a4 c5 a4, [d3,a3]@9 ~ [f2,c3]@6", H: "[c5,f5]@3 [c5,f5]@3 ~@4 [c5,e5]@3 [c5,e5]@3",
  I: "[a4,d5]@3 [a4,d5]@3 ~@4 c5@3 c5@3", J: "[a4,d5]@3 [a4,d5]@3 ~@10", K: "[c5,f5]!5 [c5,e5]!3",
  L: "[c5,f5]!5 [c5,a5]!3", M: "[c5,f5]!5 [c5,g5]!3", N: "~ a5 c6 f5 g5 a5 c6 f5, ~@5 [c4,g4]@3",
  O: "[g5@2 a5@2 c6@2 f5@2 g5@2 a5@2 c6@2 f5@2 g5@2 a5@2 f5@2 g5@25 ~, [d4,a4]@23 ~]/3", // D5
})).s("gm_piano").gain(0.2)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@16 A B A C A D ~@2 E F E F E F E ~@5 G H G H G H G H I H I H I J I K@3 L E F E F E F E M N@2 O@2 P@2 Q R E S T S T S
  T S T S T S T S T U ~@6
>`.pickRestart({
  A: "[c3,f3]@3 [c3,f3]@3 ~@4 [c3,e3]@3 [c3,e3]@3", B: "[a2,d3]@3 [a2,d3]@3 ~@4 c3@3 c3@3",
  C: "[a2,d3]@3 [a2,d3]@3 ~@4 f3@3 f3@3", D: "[a2,d3]@3 [a2,d3]@3 ~@4 [c3,f3]@3 [c3,f3]@3", E: "bb1@3 bb1 ~ c2@3",
  F: "d2@3 d2 ~ f2@3", G: "bb1@4 ~ c2@3", H: "d2@8 ~@2 f2@3 f2@3", I: "bb1@5 c2@3", J: "d2@5 f2@3", K: "f2", L: "e2 ~",
  M: "bb1 c2 d2@2", N: "bb1@10 bb1@3 bb1@3", O: "c2@10 c2@3 c2@3", P: "d2@10 d2@3 d2@3", Q: "f1@10 f1@3 f1@3",
  R: "c2!4 d2!2 d2@2", S: "a2 ~@9 f1@2 f1@2 ~@2", T: "f2 ~@9 c2@3 c2@3", U: "a2 ~@15",
})).s("gm_electric_bass_finger").gain(0.3)

// other · marimba
const marimba = note(`<
  ~@6 A B ~@5 C D E F G F H F I J ~@10 C D ~@2 K D B D C D B ~ L ~ M ~@3 N O@2 P ~@3 Q ~@4 R@5 S T U V W X Y Z AA AB AC
  AD AE AF AG AH AI AJ AK ~@6
>`.pickRestart({
  A: "~@6 a5!2", B: "g5!8", C: "~@4 g5!4", D: "a5!8", E: "a5@2 c6 f5 g5 a5 ~@2",
  F: "[c5,f5]@3 [c5,f5]!3 [c5,f5]@2 [c5,f5]@2 [c5,e5]@3 [c5,e5]@3", // F5 C
  G: "[a4,d5]@3 [a4,d5]!3 [a4,d5]@2 [a4,d5]@2 c5@3 c5@3", H: "~@8 [a4,d5]@2 f5@3 f5@3",
  I: "[a4,d5]@3 [a4,d5]!3 [a4,d5]@2 [a4,d5]@2 f5@3 f5@3", J: "~ c5 d5 f4", K: "~@6 g5!2", L: "~@4 f5 c5 d5 a4",
  M: "~@8 g5 a5 c6 ~ g5 ~ f5 ~", N: "[f4,a4]@4 [f4,a4]@3 [f4,a4]@2 [f4,a4]@3 [f4,a4]@2 [f4,a4]!2",
  O: "[[f4,a4]@4 [f4,a4]@3 [f4,a4]@2 [f4,a4]@3 [f4,a4]@2 [f4,a4] [f4,a4]@5 [f4,a4]@3 [f4,a4]@2 [f4,a4]@3 [f4,a4]@2 [f4,a4]!2]/2", // F
  P: "[e4,g4]@4 [e4,g4]@3 [e4,g4]@2 [e4,g4]@3 ~@4", Q: "~@2 a4 [a4,a5]!7 a5 ~@5",
  R: "c6 bb5 a5 g5 c6 bb5 a5 g5 c6 bb5 a5 g5 c6 bb5 a5 g5", S: "c6@2 bb5 a5 d6 c6 bb5 g5 d6 c6 bb5 g5 d6 c6 bb5 g5",
  T: "e6 d6 c6 g5 e6 d6 c6 g5 e6 d6 c6 g5 e6 d6 c6 g5", U: "[c5,c6]@2 c5 [c5,c6]!7 c6 ~ d5 e5 f5 g5", V: "a5",
  W: "g5@3 c6", X: "f5@4 ~ e5@3", Y: "~@2 f5 g5 a5@2 g5 a5 bb5 g5 a5 bb5 c6 d6 a5 g5", Z: "f5@5 e5@3",
  AA: "f5@4 g5@4 a5@4 f5 a5 bb5 c6", AB: "d6@6 a5@2 g5@6 f5 g5", AC: "a5@6 g5 e5 f5@4 d4 e4 f4 g4", AD: "a4",
  AE: "d5 c5 bb4 a4", AF: "f4@4 ~ g4@3", AG: "a4@2 f4 g4 a4@2 g4 a4 bb4 g4 a4 bb4 c5 d5 a4 g4", AH: "f4@5 e4@3",
  AI: "f4@4 g4@4 a4@4 f4 a4 bb4 c5", AJ: "d5@8 e5@6 d5 e5", AK: "f5 c5 d5@2",
})).s("gm_marimba").gain(0.4)

// other · marimba · soft notes
const marimba_soft = note("<~@5 A B ~@6 C ~@5 D ~@13 C ~ E ~ E ~@3 C ~@51>".pickRestart({
  A: "g5!8", B: "~@3 a5!3 ~@2", C: "g5!4 ~@4", D: "[a4,d5]@3 [a4,d5]!3 [a4,d5]@2 ~@8", E: "g5!6 ~@2",
})).s("gm_marimba").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@16 A B A B A B ~ C D@7 E ~@19 B@3 F D@7 G H@7 E H@7 I H@7 I ~@6>".pickRestart({
  A: "x ~@4 x ~@2", B: "x ~@9 x ~@2 x ~@2", C: "~@7 x", D: "x ~ x!2 ~@4 x!2 ~@6", E: "x ~ x!2 ~@12", F: "x!2",
  G: "x ~ x!2 ~@4 x ~@7", H: "x ~@5 x ~@3 x ~@2 x ~@2", I: "x",
})).gain(0.64)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 A B C B C B C D ~@16 E C B ~ C B C B C B C B C B C B D ~@44>".pickRestart({
  A: "~@5 x ~@2", B: "x ~@9 x ~@2 x ~@2", C: "x ~@4 x ~@2", D: "x", E: "~@10 x ~@2 x ~@2",
})).gain(0.32)

// drums · rim
const rim = s("rim").struct("<~@8 [~ x ~@2]!14 ~@10 [~ x ~ x]!3 ~ [~ x ~@2]!12 ~@45>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@23 A B@3 C@2 D E F ~@19 G@3 H B@3 C@2 D E I J@7 K J@6 L M J@6 L M ~@6>".pickRestart({
  A: "~@3 x", B: "~@4 x ~@2 x!2 ~@3 x ~@2 x", C: "~@4 x ~@2 x!2 ~@3 x ~ x!2", D: "~@4 x ~@2 x!2 ~@3 x ~@3",
  E: "~@4 x ~@2 x!2 ~ x ~ x ~ x!2", F: "~@4 x ~@4 x!2 ~ x ~@2 x", G: "~ x ~ x", H: "~@2 x ~ x ~ x ~@8 x",
  I: "~@4 x ~@7 x!3 ~", J: "~@4 x ~@2 x ~@4 x ~@3", K: "~@4 x ~@5 x!3 ~@3", L: "~@4 x ~@2 x ~@4 x ~@2 x",
  M: "~@4 x ~@2 x!3 ~@6",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@54 A ~@11 B ~@11 B ~@7 C ~@6>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@14 x!2", C: "~@3 x",
})).gain(0.72)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@7 B ~@22 C ~@7 D ~@7 E ~@7 F ~@7 F ~@6>".pickRestart({
  A: "~@3 x", B: "~@8 x ~@2 x ~@2 x ~", C: "~@9 x!3 ~@2 x ~", D: "~@9 x!3 ~@4", E: "~@7 x!3 ~@6", F: "~@10 x!2 ~@4",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~@7 A ~@7 B C@4 D E F ~@3 G ~@12 A ~@4 H ~ B C@4 D E I ~@7 J ~@22
>`.pickRestart({
  A: "x", B: "x ~ x!6", C: "x!8", D: "~@4 x ~ x ~ x ~ x ~ x!3 ~", E: "x!5 ~@2 x", F: "~@2 x ~ x ~ x ~@6 x ~@2",
  G: "~@5 x ~@2", H: "x!2 ~@6", I: "~ x!3 ~@4", J: "~ x!2 ~@5",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@54 A ~@7 A ~@7 B ~@7 C ~@14>".pickRestart({
  A: "~ x", B: "~@3 x ~@4", C: "~@12 x!2 ~@2",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A@2 ~ A ~ B C A ~@23 A@2 ~ A ~ B C A@2 ~@3 A ~ D E A ~@3 A ~ F G A ~@3 A ~ F G ~@6
>`.pickRestart({
  A: "x", B: "x ~@14 x", C: "~@5 x!2 ~", D: "~@10 x ~@2 x ~@2", E: "x ~@2 x", F: "x ~@4 x ~ x", G: "x!2 ~@2",
})).gain(0.72)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@36 x ~@7 x ~@6 x ~@41>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@18 A ~@7 B ~ B ~@28 B ~ B ~@3 C D@2 E C D F ~@16 G ~@6>".pickRestart({
  A: "~@7 x", B: "x", C: "~ x!7", D: "x!8", E: "x!7 ~", F: "x!5 ~@3", G: "~@3 x",
})).gain(0.72)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@87 [~@5 x ~@2]!3 x ~@2>").gain(0.24)

stack(
  trumpet, piano, piano_soft, bass, marimba, marimba_soft, kick, kick_soft, rim, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, crash_soft, ride, ride_soft
)