Strudelify

Senbonzakura [DEMO Post]

Sachi Ruaya

KeyG majorTempo120 bpm
0:00/0:00
// Senbonzakura [DEMO Post] — Sachi Ruaya
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4624586; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 37 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Electric Guitar.
setcpm(120/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 · clarinet · "B♭ Clarinet"
const clarinet = note("<~ A B A C D E D F D E G H I J I K L M N O P Q R S T U V W X Y Z AA X AB AC AD>".pickRestart({
  A: "d4@3 d4@3 c4@2 d4@3 d4@3 c4@2", B: "d4@3 d4@3 c4@2 d4@4 f4@4", C: "d5 f4 g5 a4",
  D: "g4@2 a4@2 d4 c4 d4 c4 g4@2 a4@2 d4 c4 d4 c4", E: "g4@2 a4@2 d4 c4 d4 c4 f4@2 e4 [e4,f4] d4@2 c4@2",
  F: "g4@2 a4@2 c5@2 f5@2 e5 f5 e5 d5 c5@2 a4@2", G: "a3@2 c4 d4 c4@2 d4 f4 d4@2 g4 a4 c5 f5 c5 d5",
  H: "f5@2 e5 [e5,f5] d5@2 c5@2 [d4,a4,d5]@4 d5@2 f5@2", I: "g5@2 a5@2 d5 c5 d5 c5 g5@2 a5@2 d5 c5 d5 c5",
  J: "g5@2 a5@2 d5 c5 d5 c5 f5@2 e5 [e5,f5] d5@2 c5@2", K: "a#4@2 c5@2 f5@2 a5@2 e6 f6 e6 d6 c6@2 a5@2",
  L: "g5@2 c5@2 d5 c5 d5 c5 g5@2 c5@2 d5 c5 d5 c5", M: "g5@2 c5@2 d5 c5 d5 c5 f5@2 e5 [e5,f5] d5@2 c5@2",
  N: "a5 g5 a5 c6 d6 c6 a5 g5 a4@2 f5@2 d5@2 a5@2", O: "d4@3 d5@3 c4@2 d5@4 ~@4", P: "a4@4 a4@3 g4 a4@2 f5@2 f5@2 g5@2",
  Q: "a4@4 a4@3 g4 d5@2 c5@2 a4@2 c5@2", R: "a4@4 d5@3 g4 d5@2 f5@2 g5@2 a5@2", S: "d5@4 c5@2 a5 g5 c5@4 d5@4",
  T: "a4@4 d5@3 c5 [a4,d5]@2 f5@2 f5@2 g5@2", U: "a4@4 a4@3 c5 a4@2 c5@2 c5@2 a4@2",
  V: "a4@4 a4@3 [g4,c5] [a4,d5]@2 f5@2 g5@2 a5@2", W: "d5@4 c5@2 a5 g5 [c5,f5]@4 [a4,d5]@4", X: "f5 g4 d5 e4",
  Y: "c5@2 c5 d5 a4@2 g4@2 a4@8", Z: "[d4,a4] c5 d5@2 [c5,g5]@2 [a4,e5]@2", AA: "[a4,d5,f5]@2 e5 c5 [a4,d5]@4",
  AB: "c5@2 c5 d5 a4@2 g4@2 [f4,a4]@4 [e4,a4]@2 c5@2", AC: "[g4,d5] [g4,d5]@2 [g4,d5] [a4,f5] ~ [b4,g5]@2",
  AD: "[e4,b4,e5]@4 ~@2 a4 c5", // E5
})).s("gm_clarinet").gain(0.4)

// chords · piano
const piano = note("<~ A B C D E F G H I J K L M N M O M P Q R S T U V S W X Y Z AA AB AC Z AD AE ~>".pickRestart({
  A: "[d2,d3,d4,d5]@3 [d2,d3,d4,a4,d5]@3 [c3,c4,c5]@2 [d2,d3,d4,a4,d5]@3 [d2,d3,d4,a4,d5]@3 [c3,c4,g4,c5]@2", // D D5 C D5 C5
  B: "[d2,d3,d4,a4,d5]@3 [d2,d3,d4,a4,d5]@3 [c3,c4,g4,c5]@2 [d2,d3,d4,a4,d5]@4 [f2,c3,f3,f4,c5,f5]@4", // D5 C5 D5 F5
  C: "[d4,a4,d5]@3 [d4,a4,d5]@3 [c4,g4,c5]@2 [d4,a4,d5]@3 [d4,a4,d5]@3 [c4,g4,c5]@2", // D5 C5 D5 C5
  D: "[d2,d3,g3,d4,a4,d5] [f2,f3,f4,c5,f5] [g2,g3,g4,d5,g5] [a2,a3,a4,e5,a5]", // Dsus4 F5 G5 A5
  E: "[c3,a#3]@2 [f3,c4,a4]@2 d4 c4 d4 c4 [c3,a#3]@2 [f3,c4,a4]@2 d4 c4 d4 c4, ~@2 a#3 f3 ~@2 a#3@2", // C7 F C7 F
  F: "a#3@2 c4@2 d4 c4 d4 c4 f4@2 e4 [e4,f4] d4@2 c4@2", G: "a#3@2 [c4,a4]@2 d4 c4 d4 c4 a#3@2 [c4,a4]@2 d4 c4 d4 c4",
  H: "a#3@2 c4@2 f4@2 [a4,f5]@2 e5 f5 e5 d5 c5@2 a4@2, e3!4", // Dm
  I: "a#3@2 [c4,a4]@2 d4 c4 d4 c4 a#3@2 [c4,a4]@2 d4 c4 d4 c4, c3!2 d3!2", // F
  J: "a#3@2 c4@2 d4 c4 d4 c4 f4@2 e4 [e4,f4] d4@2 c4@2, c3@15 ~", // Fmaj7
  K: "d4@2 c4 d4 f4@2 d4 f4 g4@2 g4 a4 c5 f5 c5 d5, [c2,f2,c3] [e2,a2,e3] [g2,c3]@2", // F5 A5 C5
  L: "[d2,a2,d3,f5]@2 e5 [e5,f5] d5@2 [f2,c3,f3,c5]@2 [d2,a2,d3,d4,a4,d5]@4 d5@2 f5@2, ~@3 [d2,a2,d3]@3 ~@6 [d2,a2,d3]@4", // Dm Fmaj7 F5 D5
  M: "a#4@2 [c5,a5]@2 d5 c5 d5 c5 a#4@2 [c5,a5]@2 d5 c5 d5 c5, c3!2 d3!2", // F
  N: "a#4@2 [c5,a5]@2 d5 c5 d5 c5 f5@2 e5 [e5,f5] d5@2 c5@2, e3!4", // F Fmaj7
  O: "g5@2 a5@2 c6@2 f6@2 e6 f6 e6 d6 c6@2 a5@2, [e3,g3] [d2,e3] [e3,g3] [d2,e3]", // Em Dsus2 Em Dsus2
  P: "a#4@2 [c5,a5]@2 d5 c5 d5 c5 f5@2 e5 [e5,f5] d5@2 c5@2", // F Fmaj7
  Q: "[c3,a5] [f3,g5] [a#3,a5] [f3,c6] [c3,d6] [f3,c6] [a#3,a5] [f3,g5] c3 f3 a#3 f3 c3 f3 a#3 f3, ~@4 [a4,d5] [c5,f5] [d5,g5] [d5,a5]", // F Fsus2 A#maj7 F5 Csus2 F5 A#maj7 Fsus2 …
  R: "[d2,a2,d3,d4,a4,d5]@3 [d2,a2,d3,d4,a4,d5]@3 [f2,c3,f3,c4,g4,c5]@2 [d2,a2,d3,d4,a4,d5]@4 [d2,a2,d3]@4", // D5 Fsus2 D5
  S: "d3@2 a3@2 [d3,d5]@3 [g3,g4,c5] [a4,d5]@2 f5@2 f5@2 g5@2, d5@4 ~@4 d3 ~@3 d3@4", // D C5 D5
  T: "d3@2 a3@2 [d3,d5]@3 [g3,g4,c5] [a4,d5]@2 c5@2 a4@2 c5@2, d5@4 ~@4 d3 ~@3 d3@4", // D C5 D5
  U: "d3@2 a3@2 [d3,a4,d5]@3 [g3,g4,c5] [a4,d5]@2 f5@2 g5@2 a5@2, [a4,d5]@4 ~@4 d3 ~@3 d3@4", // D5 C5 D5
  V: "a5@4 g5@2 a5 g5 [c5,f5]@4 [a4,d5]@4", W: "d5@4 d5@3 g4 d5@2 c5@2 c5@2 a4@2",
  X: "d3@2 a3@2 [d3,d5]@3 [g3,g4,c5] [a4,d5]@2 f5@2 g5@2 a5@2, d5@4 ~@4 d3 ~@3 d3@4", // D C5 D5
  Y: "d5@4 c5@2 a5 g5 [c5,f5]@4 [a4,d5]@4", // F5 D5
  Z: "[a#2,f3,a#3,a4,f5] [a#2,f3,a#3,g4,e5] [a#2,f3,a#3,f4,d5] [a#2,f3,a#3,e4,c5]", // A#maj7 Edim A# A#sus2
  AA: "[f4,c5]@2 c5 d5 a4@2 g4@2 [f4,a4]@8", AB: "[d4,a4] c5 d5@2 [c5,g5]@2 [a4,e5]@2",
  AC: "[a4,d5,f5]@2 e5 c5 [a4,d5]@4", AD: "d3@4 d3@3 ~ d3 ~@3 d3@4",
  AE: "[g4,d5] [g4,d5]@2 [g4,d5] [a4,f5] ~ [b4,g5]@2", // G5 Dm Em
})).s("gm_piano").gain(0.4)

// other · oboe
const oboe = note("<~ A B A C D E D F D G H I J K J L M ~ N O P Q R S T U R V W X Y Z W AA AB ~>".pickRestart({
  A: "d4@3 d4@3 c4@2 d4@3 d4@3 c4@2", B: "d4@3 d4@3 c4@2 d4@8", C: "d5 f4 g5 a4", D: "g4 a4 ~@2 g4 a4 ~@2",
  E: "g4 a4@7", F: "g4@2 a4@2 c5@2 f5@2 e5 f5 e5 d5 c5@2 a4@2", G: "g4 a4@4 ~@3", H: "f4 a4 c5@2",
  I: "f5@2 e5 [e5,f5] d5@2 c5@2 ~@4 d5@2 f5@2", J: "~@4 d5 c5 d5 c5 ~@4 d5 c5 d5 c5", K: "g5 a5 ~@6",
  L: "~ [d4,d5] ~ [d4,d5] c4 d4 ~ [d4,d5]", M: "g5@2 c5@2 d5 c5 d5 c5 g5@2 c5@2 d5 c5 d5 c5",
  N: "a5 g5 a5 c6 d6 c6 a5 g5 a4@2 f5@2 d5@2 a5@2", O: "d4@3 d5@3 c4@2 d5@4 ~@4", P: "a4@4 a4@3 ~@3 f5@2 f5@2 g5@2",
  Q: "a4@2 ~@2 [a4,d5] c5 a4 c5", R: "a4@4 d5@3 g4 d5@2 f5@2 g5@2 a5@2", S: "~@4 [c5,g5]@2 a5 g5 [c5,f5]@4 [a4,d5]@4",
  T: "d5@4 d5@3 ~ d5 ~@3 d5@4", U: "a4@4 a4@3 c5 a4@2 c5@2 c5@2 a4@2", V: "a5@4 g5@2 a5 g5 [c5,f5]@4 [a4,d5]@4",
  W: "f5 g4 d5 e4", X: "c5@2 c5 d5 a4@2 g4@2 a4@8", Y: "[d4,a4] c5 d5@2 [c5,g5]@2 [a4,e5]@2",
  Z: "[a4,d5,f5]@2 e5 c5 [a4,d5]@4", AA: "~@2 a#3 ~@3 a#3 ~@3 a#3 ~@3 a#3 ~",
  AB: "[g4,d5] [g4,d5]@2 [g4,d5] [a4,f5] ~ [b4,g5]@2", // G5 Dm Em
})).s("gm_oboe").gain(0.2)

// other · violin
const violin = note("<~@2 A B@2 C D C E C D F G H I H J K ~ L M N O N O N O N P Q R S T Q U V W>".pickRestart({
  A: "~@2 d4 f4", B: "d5/2", C: "g4@2 a4@2 d4 c4 d4 c4 g4@2 a4@2 d4 c4 d4 c4",
  D: "g4@2 a4@2 d4 c4 d4 c4 f4@2 e4 [e4,f4] d4@2 c4@2", E: "g4@2 a4@2 c5@2 f5@2 e5 f5 e5 d5 c5@2 a4@2",
  F: "~@2 c4 d4 ~@2 d4 f4 ~@2 g4 a4 c5 f5 c5 d5", G: "f5@2 e5 [e5,f5] d5@2 c5@2 ~@4 d5@2 f5@2",
  H: "~@4 d5 c5 d5 c5 ~@4 d5 c5 d5 c5", I: "~@4 d5 c5 d5 c5 f5@2 e5 [e5,f5] d5@2 c5@2",
  J: "g5@2 a5@2 c6@2 ~@2 e6 ~ e6 d6 c6@2 a5@2", K: "g5@2 c5@2 d5 c5 d5 c5 g5@2 c5@2 d5 c5 d5 c5",
  L: "a5 g5 a5 c6 d6 c6 a5 g5 [a4,d5]@2 [c5,f5]@2 [d5,g5]@2 [d5,a5]@2", M: "d4@3 d5@3 c4@2 d5@8",
  N: "d5@4 d5@3 ~ d5 ~@3 d5@4", O: "a#4 c5", P: "a5@4 c5@2 a5 g5 [c5,f5]@4 [a4,d5]@4",
  Q: "[a4,f5] [g4,e5] [f4,d5] [e4,c5]", R: "[f4,c5]@2 c5 d5 a4@2 g4@2 [f4,a4]@8",
  S: "[d4,a4] c5 ~@2 [c5,g5]@2 [a4,e5]@2", T: "~@2 e5 c5 [a4,d5]@4", U: "c5@2 c5 d5 a4@2 g4@2 [f4,a4]@4 [e4,a4]@2 c5@2",
  V: "[g4,d5] [g4,d5]@2 [g4,d5] [a4,f5] ~ [b4,g5]@2", W: "[e4,b4,e5]@4 ~@2 d5 f5",
})).s("gm_violin").gain(0.3)

// other · flute
const flute = note("<~@4 A B ~@5 C ~@4 D E F@2 G H@3 I H ~ H ~ J K L M J N O ~>".pickRestart({
  A: "d5 f4 g5 a4", B: "g4@2 a4@2 d4 c4 d4 c4 g4@2 a4@2 d4 c4 d4 c4", C: "~@2 c4 d4 c4@2 d4 f4 d4@2 g4 a4 c5 f5 c5 d5",
  D: "a#4@2 c5@2 f5@2 a5@2 e6 f6 e6 d6 c6@2 a5@2", E: "g5@2 c5@2 d5 c5 d5 c5 g5@2 c5@2 d5 c5 d5 c5", F: "[g5@15 ~]/2",
  G: "d4@3 d5@3 c4@2 d5@8", H: "d4@2 f4@2 d4@3 f4 d4 ~@3 d4@4", I: "d5@4 c5@2 a5 g5 c5@4 d5@4", J: "f5 g4 d5 e4",
  K: "c5@2 c5 d5 a4@2 g4@2 a4@8", L: "[d4,a4] c5 d5@2 [c5,g5]@2 [a4,e5]@2", M: "[a4,d5,f5]@2 e5 c5 [a4,d5]@4",
  N: "f4@2 c5 d5 a4@2 g4@2 [f4,a4]@4 [e4,a4]@2 c5@2", O: "[g4,d5] [g4,d5]@2 [g4,d5] [a4,f5] ~ [b4,g5]@2",
})).s("gm_flute").gain(0.3)

// other · acoustic guitar nylon · "Classical Guitar"
const acoustic_guitar_nylon = note("<~ A B C D E F E F E G H I E F E F E J@2 K L@3 ~ L ~ L ~ M@6 N@2>".pickRestart({
  A: "[d4,d5]@3 [d4,a4,d5]@3 [c4,c5]@2 [d4,a4,d5]@3 [d4,d5]@3 [c4,g4,c5]@2", // D D5 C D5 D C5
  B: "[d4,d5]@3 [d4,d5]@3 [c4,c5]@2 [d4,a4,d5]@4 [f4,f5]@4", // D C D5 F
  C: "[d4,d5]@3 [d4,a4,d5]@3 [c4,c5]@2 [d4,a4,d5]@3 [d4,d5]@3 [c4,c5]@2", D: "[d4,a4,d5] [c5,f5] [d5,g5] [e5,a5]",
  E: "c3 [f3,a#3] c3 [f3,a#3] d3 [g3,c4] d3 [g3,c4]", F: "e3 [a3,d4] e3 [a3,d4] e3 [a3,d4] e3 [a3,d4]",
  G: "e3@2 e3 [a3,d4] e3 [a3,d4] e3 [a3,d4]", H: "[a3,d4]@2 c4 d4 [c4,f4]@2 d4 f4 [d4,g4]@2 g4 a4 c5 f5 c5 d5",
  I: "f5@2 e5 [e5,f5] d5@2 c5@2 [d4,a4,d5]@4 d5@2 f5@2", J: "e3 a3 d4 a3 e3 a3 d4 a3 e3 a3 d4 a3 e3 a3 d4 a3",
  K: "[d4,a4,d5]@3 [d4,a4,d5]@3 [c4,g4,c5]@2 [d4,a4,d5]@4 ~@4", L: "d3@2 a3@2 d3@3 g3 d3 ~@3 d3@4",
  M: "a#2 f3 a#3 f3 a#2 f3 a#3 f3 a#2 f3 a#3 f3 a#2 f3 a#3 f3",
  N: "[a#2 f3 a#3 f3 a#2 f3 a#3 f3 a#2 f3 a#3 f3 a#2 f3 a#3 f3@8 ~@9]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// other · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note("<~@6 A ~ A ~ B ~@11 C ~@9 D ~ E ~ F>".pickRestart({
  A: "g4 ~@7", B: "g4 a4@4 ~@3", C: "a#4 c5", D: "[a4,d5,f5] ~ [a4,d5]@2", E: "[f4,c5] ~@3 [f4,a4]@2 [e4,a4] c5",
  F: "f3",
})).s("gm_electric_guitar_clean").gain(0.2)

// other · tuba · "Euphonium"
const tuba = note("<~@4 A B C B D B C E F G H B C B C I F J K J K J K J K L ~ K J M J N O>".pickRestart({
  A: "d3 [f2,f3] [g2,g3] [a2,a3]", B: "c3 d3", C: "e3", D: "c3", E: "[f2,c3] [e2,a2,e3] [g2,c3]@2",
  F: "[a2,d3]@3 [a2,d3]@3 [f2,c3,f3]@2 [a2,d3]@4 [a2,d3]@4", G: "c3 d3!3", H: "e3!2",
  I: "~@2 a#3 f3 ~@2 a#3 f3 ~@2 a#3 f3 ~@2 a#3 f3", J: "d3@4 d3@3 ~ d3 ~@3 d3@4", K: "a#2!2 c3!2",
  L: "[a2,a#3] [g2,a3] [f2,g3] [e2,f3]", M: "[a2,a#3] a3 f2 f3", N: "[a2,e3] [a2,e3]@2 [a2,e3] [a#2,f3] ~ a#3@2",
  O: "e3 ~@3",
})).s("gm_tuba").gain(0.2)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@4 [x!11 ~@5] ~@32>").gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@11 A ~@7 B ~ C@7 ~ D@6 E ~>".pickRestart({
  A: "x ~@5 x ~@6 x ~@2", B: "x!2", C: "x ~ x!2 ~@4", D: "~ x ~ x", E: "~ x ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@10 A B C ~@6 D ~ E@7 ~@9>".pickRestart({
  A: "~ x ~@2", B: "~@2 x!2 ~@3 x ~@6 x!2", C: "x ~@2 x ~@4 x ~@3 x ~@3", D: "~ x!4 ~@2 x ~@4 x ~@3", E: "~@2 x!2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@11 [~ x ~@2] [~@3 x ~@4] ~@24>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@19 [~@5 x ~@10] ~ [x ~@4 x ~ x ~@2 x ~@5]!7 [x!3 ~] ~@8>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 [~@4 x!2 ~@2] [x ~@2 x ~@4 x ~@3 x ~@3] ~@24>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@2 [~@3 x] ~@8 [~@11 x!2 ~@3] [x ~@2 x ~@2 x ~ x ~@3 x ~@3] ~@8 [x!4]!8 ~@8>")
  .gain(0.4)

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

// drums · ride
const ride = s("rd").struct("<~@12 [~@3 x ~@4] ~@16 [x!3 ~@5 x!3 ~@5]!6 [x!3 ~@5 x!3 ~ x ~@3] ~>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<A B@3 A C@3 ~ C@2 ~ D C@7 ~ A@13 ~ B E>".pickRestart({
  A: "x!4", B: "x!16", C: "x!2", D: "x!2 ~@2", E: "x",
})).gain(0.2)

// drums · bongos
const bongos = s("bongo:4").struct("<~ [~@3 x ~@3 x] [~@3 x ~@4] [~@3 x ~@3 x] ~@16 [~@3 x ~@4] ~@16>").gain(1.04)

// drums · congas
const congas = s("conga:13").struct(`<
  ~
  [x ~@2 x ~@4 x ~@2 x ~@4]
  [x ~@2 x ~@4 x ~@7]
  [x ~@2 x ~@4 x ~@2 x ~@4]
  ~@16
  x
  ~@16
>`).gain(1.27)

// drums · guiro
const guiro = s("guiro:4").struct("<~@20 [~@3 x!2 ~@3 x ~@7] ~@16>").gain(8.38)

stack(
  clarinet, piano, oboe, violin, flute, acoustic_guitar_nylon, electric_guitar_clean, tuba, kick, kick_soft, rim, snare,
  low_tom, hihat, mid_tom, high_tom, crash, ride, tambourine, bongos, congas, guiro
)