Strudelify

Hakushoku Suisei

Trans

KeyF majorTempo120 bpm
0:00/0:00
// Hakushoku Suisei — Trans
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 2 "Bass" named as a bass, played on electric bass finger (its violin patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5865406; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 122 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
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.

// chords · church organ · "Tenor"
const church_organ = note(`<
  ~@22 A@5 B@5 C@5 D@5 E F G H I J K L M N I O P Q R S T U@3 V@2 W X Y@2 Z@2 AA AB AA AB AC AD AE AF@2 AG AH AI AJ AK@2
  AL@3 AM AN@2 AO AP@2 AQ AR@2 AS AT@2 AU@4 AV@4 AW@4 AX@4 AY@4 AZ@2
>`.pickRestart({
  A: "[[d3,d4]@3 [a3,a4] [ab3,ab4]@3 [e3,e4] [g3,g4]@2 [db3,db4]@2 [d3,d4]@4]/5", // D A Ab E G Db D
  B: "[[gb3,gb4]@3 [eb4,eb5] [d4,d5]@3 [c4,c5] [bb3,bb4]@2 [a3,a4]@2 [g3,g4]@4]/5", // Gb Eb D C Bb A G
  C: "[[ab3,ab4]@3 [f4,f5] [e4,e5]@3 [g3,g4] [gb3,gb4]@3 [eb4,eb5] [d4,d5]@3 [c4,c5]]/5", // Ab F E G Gb Eb D C
  D: "[[bb3,bb4]@3 [g3,g4] [a3,a4]@3 [d3,d4] [f3,f4]@2 [db3,db4]@2 [d3,d4]@3 ~]/5", // Bb G A D F Db D
  E: "d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4, [d2,d3]@3 [a2,a3]", // D A
  F: "d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4, [ab2,ab3]@3 [e2,e3]", // Ab E
  G: "db4 d4 e4 d4 db4 d4 e4 d4 db4 d4 e4 d4 db4 d4 e4 db4, [g2,g3] [db2,db3]", // G Db
  H: "d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4, [d2,d3]", // D
  I: "d4 eb4 gb4 eb4 d4 eb4 gb4 eb4 d4 eb4 gb4 eb4 [d4,eb4] ~ gb4 eb4, [gb2,gb3]@3 eb3, ~@13 eb4@2 ~", // Ebmaj7 Gb
  J: "[bb3,d4] ~ g4 ~ bb3 ~ g4 ~ bb3 ~ g4 d4 [a3,c4] ~ gb4 c4, d3@3 c3, ~ d4@2 d4@2 d4@2 d4@2 d4@2 ~@2 c4@2 ~", // Bb Am
  K: "~ d4 g4 d4 ~ d4 g4 d4 c4 eb4 g4 eb4 c4 d4 eb4 gb4, bb2 [a2,a3], bb3!2 ~@2", // A
  L: "bb3 d4 g4 d4 bb3 d4 g4 d4 bb3 d4 g4 d4 bb3 d4 g4 d4, [g2,g3]", // G
  M: "e4 f4 ab4 f4 e4 f4 ab4 f4 e4 f4 ab4 f4 [e4,f4] ~ ab4 f4, [ab2,ab3]@3 f3, ~@13 f4@2 ~", // Fmaj7 Ab
  N: "g4 a4 bb4 a4 g4 a4 bb4 a4 g4 a4 bb4 a4 g4 a4 bb4 a4, [e3,e4]@3 [g2,g3]", // E G
  O: "[bb3,d4] ~ g4 ~ bb3 ~ g4 ~ bb3 ~ g4 d4 bb3 d4 g4 d4, d3@3 [c3,c4], ~ d4@2 d4@2 d4@2 d4@2 d4@2 ~@5", // Bb C
  P: "eb4 f4 g4 f4 eb4 f4 g4 f4 eb4 f4 g4 f4 eb4 f4 g4 f4, [bb2,bb3]@3 [g2,g3]", // Bb G
  Q: "d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4, [a2,a3]@3 [d2,d3]", // A D
  R: "d4 e4 f4 e4 d4 e4 f4 e4 db4 d4 e4 d4 db4 d4 e4 db4, [f2,f3] [db2,db3]", // F Db
  S: "d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4, [d2,d3] [c3,c4]", // D C
  T: "d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4 d4 e4 f4 e4, [b2,b3] [bb2,bb3]", U: "[[a1,a2,a3]@11 ~]/3",
  V: "[a3,d4,f4] a3 f3 a3 [a3,d4,f4] a3 [db4,e4] a3 [d4,f4] a3 [e4,g4] a3 [f4,a4] a3 [e4,g4] a3, [d2,d3]@2 [d2,d3] ~@5", // Dm Dbm Dm Em F Em D
  W: "[a3,d4,gb4] a3 gb3 a3 [a3,d4,gb4] a3 [db4,f4] a3 [d4,gb4] a3 [e4,g4] a3 [gb4,a4] a3 [e4,g4] a3, [d2,d3]@2 [d2,d3] ~@5", // D Db D Em Gbm Em D
  X: "[a3,d4,gb4] a3 gb3 a3 [a3,d4,gb4] a3 [db4,f4] a3 [d4,gb4] a3 [e4,g4] a3 [gb4,a4] a3 [a4,c5] d4, [d2,d3]@2 [d2,d3] ~@5", // D Db D Em Gbm Am D
  Y: "[g4,bb4] d4 bb3 d4 [g4,bb4] d4 [gb4,a4] d4 [g4,bb4] d4 [a4,c5] d4 [bb4,d5] d4 [a4,c5] d4, [g1,g2,d3]@2 [g1,g2,d3] ~@5", // Gm Gbm Gm Am Bb Am G5
  Z: "[ab4,b4] d4 b3 d4 [ab4,b4] d4 [g4,bb4] d4 [ab4,b4] d4 [bb4,db5] d4 [b4,d5] d4 [bb4,db5] d4, [ab1,ab2,d3]@2 [ab1,ab2,d3] ~@5", // Abm Gm Abm Bbm Bm Bbm Abdim
  AA: "[a1,a2,db3,e3,a3,db4,e4,a4,db5]@4 f5 a4 ab4 a4 e5 a4 ab4 a4 eb5 a4 ab4 a4", // A
  AB: "d5 a4 ab4 a4 db5 a4 ab4 a4 c5 a4 ab4 a4 db5 a4 ab4 a4", AC: "d4@3 a4 ab3@2 ~ b4, d3@4 ab4@3 ~, ~@3 e3",
  AD: "bb4@3 d5 db4@2 ~ e5, g3@4 db5@3 ~, ~@3 a3", AE: "d5@3 a5 ab5@3 b5, d4 ab3",
  AF: "[bb3@2 ~ d6 db6@3 a5@7 ~@2, bb5@3 ~@13, ~ g3 a3@5 ~]/2",
  AG: "~ a3 b3 db4 ~ e4 f4 d4 ~ e4 eb4 e4 [e4,b4] ~ eb4 e4, d4@4 d4@2 a4@2 ab4@4 ~ e4@2 ~", // E5
  AH: "~ d4 e4 gb4 ~ a4 bb4 g4 ~ a4 ab4 a4 [a4,e5] ~ ab4 a4, g4@4 g4@2 d5@2 db5@4 ~ a4@2 ~", // A5
  AI: "~ g4 a4 b4 ~ d5 [eb5,g5] g5 ~ d5 db5 d5 [d5,a5] ~ db5 d5, c5 c5@3, ~@8 gb5@4 ~ d5@2 ~", // Eb D5
  AJ: "~@2 d5 e5 ~ g5 [ab5,c6] c6 ~ g5 gb5 g5 [g5,d6] ~ gb5 g5, f5@4 f5@2 ~@2 b5@4 ~ g5@2 ~, ~ c5@15", // Ab G5
  AK: "[ab2,ab4,ab5] [e2,e4,e5] [a2,a4,a5] [e2,e4,e5]", // Ab E A E
  AL: "[~@8 [db4,e4,g4,bb4,db5,e5,g5,bb5]@24 ~@8 [e4,g4,bb4,db5,e5,g5,bb5,db6]@24 ~@8 [g5,bb5,db6,e6]@8 bb5 g6 e6 g6 db6 e6 bb5 db6 g5 bb5 ~ g5 ~@3 bb4, [a2,a4]@47 g4, ~@24 [g4,bb4]@7 e5, ~@36 [db5,e5]@9 e5 db5@2]/3", // Dbdim Edim Gdim A Gm Dbm
  AM: "~@8 [ab5,b5,d6,f6]@8 f6 ab6 d6 f6 ~ b5 d6 ab5 b5 ~ ab5 ~@4 d5, [a2,a4], ~ [ab4,b4]@3, ~@8 [d5,f5]@17 f5@2 d5@3 b4@2, ~@7 f5", // Abdim A Abm Dm
  AN: "a4 a5 ~@3 [eb2,eb5] [e2,e5] [db2,db5], a1@5 ~@3, ~ a4@4 ~@3, ~ [bb4,bb5]@3", // Eb E Db Bb
  AO: "[a1,a4] [eb2,a4,eb5,a5] [e2,e5] [db2,db5] [a1,a4] [eb2,a4,eb5,a5] [e2,e5] [db2,db5], ~ [bb4,bb5] ~ [bb4,bb5]", // A Ebdim E Db A Ebdim E Db …
  AP: "[~ [a4,a5] [bb4,bb5]@10 ~@2 [d1,a1,a2,d3,a3,d4]@2]/2", AQ: "[eb1,bb1,bb2,eb3,bb3,eb4]@3 [d1,a1,a2,d3,a3,d4]",
  AR: "[[eb1,bb1,bb2,eb3,bb3,eb4]@3 d1 d1 [eb1,bb1,bb2,eb3,bb3,eb4]@3, ~@3 [a1,a2,d3,a3,d4]@2 ~@3]/2", // Eb5 D5
  AS: "g2 a2 ~ d5 a2 b2 ~ a4, g4@3 ~ db5@3 ~, ~ bb2 ~ db3",
  AT: "[c3 d3 ~ g5 d3 e3 ~ d5@5 ~@4, c5@3 ~ gb5@3 ~@9, ~ eb3 ~ gb3@3 ~@2]/2",
  AU: "[[g1,g2]@11 [a1,a2]@10 ~@11 d5@11 [a1,a2]@10 [b1,b2]@11 ~@11 a4@10 [c2,c3]@11 [d2,d3]@11 [eb2,eb3]@10 [c2,c3]@11, g4@32 ~@11 db5@32 ~@10 c5@21 ~ gb4@21, ~@21 [bb1,bb2]@21 ~@22 [db2,db3]@21 ~@43]/4", // G A B C D Eb C Bb …
  AV: "[[bb1,bb2]@11 [c2,c3]@10 [d2,d3]@11 [bb1,bb2]@11 [f2,f3]@10 [eb2,eb3]@11 ~@11 ab5@10 [c2,c3]@11 [d2,d3]@11 [eb2,eb3]@10 [d2,d3,f5]@11, g4@43 b4@32 ~@10 g5@32 ~@11, ~@64 [d2,d3]@21 ~@43]/4", // Bb C D Bb F Eb C D …
  AW: "[[c2,c3]@11 [g1,g2]@10 [b1,b2]@11 [f1,f2]@11 [eb1,eb2]@10 [bb1,bb2]@11 [a1,a2]@11 [g1,g2]@10 [e1,e2]@11 [gb1,gb2]@11 ~@10 bb5@11, eb5@21 d5@21 ~ c5@42 db5@32 ~@11, ~@107 [g1,g2]@21]/4", // C G B F Eb Bb A G …
  AX: "[[eb1,eb2]@11 [f1,f2]@10 ~@11 c5@11 [d1,d2]@10 [e1,e2]@11 ~@11 ab5@10 [c1,c2]@11 [d1,d2]@11 [eb1,eb2]@10 [d1,d2,f5]@11, a5@32 ~@11 b4@32 ~@10 g5@32 ~@11, ~@21 [gb1,gb2]@21 ~@22 [f1,f2]@21 ~@43]/4", // Eb F D E C D Eb Dm …
  AY: "[[c1,c2]@11 [bb0,bb1]@10 ~@11 c5@11 [bb0,bb1]@10 [a0,a1]@11 [g0,g1]@11 [d1,d2,g4]@10 [eb1,eb2]@11 [g1,g2]@11 [a0,a1]@10 [d1,d2]@11, eb5@32 ~@11 d5@32 ~@10 bb4@21 ~ gb4@21, ~@21 [ab0,ab1]@21 ~@86]/4", // C Bb A G G5 Eb G A …
  AZ: "[[g0,g1,g4]@43 ~@21]/2", // G
})).s("gm_church_organ").gain(0.4).pan(0.6)

// other · electric bass finger · "Bass"
const electric_bass_finger = note(`<
  ~@22 A@5 B@5 C@5 D@5 ~@17 E F@2 G@4 H@2 I@2 J K J K L M N O@2 ~@21 P Q@3 R@4 S@4 T U@3 V W@3 X@2
>`.pickRestart({
  A: "[d4@3 a4 ab4@3 e4 g4@2 db4@2 d4@4]/5", B: "[gb4@3 eb5 d5@3 c5 bb4@2 a4@2 g4@4]/5",
  C: "[ab4@3 f5 e5@3 g4 gb4@3 eb5 d5@3 c5]/5", D: "[bb4@3 g4 a4@3 d4 f4@2 db4@2 d4@3 ~]/5", E: "~@2 bb5@4 a5 ~",
  F: "[~ bb5@2 a5@4 ~]/2", G: "d3@2 d3 ~@5", H: "g2@2 g2 ~@5", I: "ab2@2 ab2 ~@5",
  J: "~@4 f5 ~ ab4 ~ e5 ~ ab4 ~ eb5 ~ ab4 ~", K: "d5 ~ ab4 ~ db5 ~ ab4 ~ c5 ~ ab4 ~ db5 ~ ab4 ~", L: "d4@3 a4 ab4@3 b4",
  M: "bb4@3 d5 db5@3 e5", N: "d5@3 a5 ab5@3 b5", O: "[bb5@3 d6 db6@3 a5@7 ~@2]/2", P: "g5",
  Q: "[d6@11 db6@32 a5@10 c6@21 ~ gb5@21]/3", R: "[g5@43 b5@32 ab6@10 g6@32 f6@11]/4",
  S: "[eb6@21 d6@21 ~ c6@42 db6@32 bb6@11]/4", T: "a6", U: "[c6@11 b5@32 ab6@10 g6@32 f6@11]/3", V: "eb6",
  W: "[c6@11 d6@32 g5@10 bb5@21 ~ gb5@21]/3", X: "[g5@43 ~@21]/2",
})).s("gm_lead_8_bass_lead").gain(0.4)

// other · cello · "Violoncello"
const cello = note(`<
  A@2 B C D@2 E F@3 G@4 E H@3 I J K@2 L@5 M@5 N@5 O@5 P Q R S T U V W X Y T U Z AA AB AC AD AE AF@2 AG@4 AH@2 AI@2 ~@4
  AJ AK AL AM@2 ~@21 AN@2 AO AP AQ AR AS AT AU AV AW AX AY@2 AZ AT BA@2 BB BC BD@2
>`.pickRestart({
  A: "[~@21 d2@32 a2@11]/2", B: "ab2", C: "e2@11 g2@21", D: "[db2@21 d2@43]/2", E: "gb2",
  F: "[eb3@11 d3@32 c3@10 bb2@21 ~ a2@21]/3", G: "[g2@43 ab2@32 f3@10 e3@32 g2@11]/4",
  H: "[eb3@11 d3@32 c3@10 bb2@32 g2@11]/3", I: "a2", J: "d2@11 f2@21", K: "[db2@21 d2@32 ~@11]/2",
  L: "[d2@3 a2 ab2@3 e2 g2@2 db2@2 d2@4]/5", M: "[gb2@3 eb3 d3@3 c3 bb2@2 a2@2 g2@4]/5",
  N: "[ab2@3 f3 e3@3 g2 gb2@3 eb3 d3@3 c3]/5", O: "[bb2@3 g2 a2@3 d2 f2@2 db2@2 d2@3 ~]/5", P: "d2@3 a2", Q: "ab2@3 e2",
  R: "g2 db2", S: "d2", T: "gb2@3 eb3", U: "d3@3 c3", V: "bb2 a2", W: "g2", X: "ab2@3 f3", Y: "e3@3 g2", Z: "bb2@3 g2",
  AA: "a2@3 d2", AB: "f2 db2", AC: "d2 c3", AD: "b2 bb2", AE: "~@2 g3@4 e3 ~", AF: "[~ g3@2 e3@4 ~]/2",
  AG: "[d3,a3]@2 [d3,a3] ~@5", AH: "[g2,d3]@2 [g2,d3] ~@5", AI: "[ab2,d3]@2 [ab2,d3] ~@5", AJ: "d2@2 ab2 e2",
  AK: "g2@2 db3 a2", AL: "d3 ab2", AM: "[bb2 g2 a2@5 ~]/2", AN: "[g2@11 a2@10 bb2@21 ~ a2@10 b2@11]/2",
  AO: "db3@21 c3@11", AP: "d3@11 eb3@10 c3@11", AQ: "bb2@11 c3@10 d3@11", AR: "bb2@11 f3@10 eb3@11", AS: "d3@21 c3@11",
  AT: "d3@11 eb3@10 d3@11", AU: "c3@11 g2@10 b2@11", AV: "f2@11 eb2@10 bb2@11", AW: "a2@11 g2@10 e2@11",
  AX: "gb2@11 g2@21", AY: "[eb3@11 f3@10 gb3@21 ~ d3@10 e3@11]/2", AZ: "f3@21 c3@11",
  BA: "[c3@11 bb2@10 ab2@21 ~ bb2@10 a2@11]/2", BB: "g2@11 d3@10 eb3@11", BC: "g3@11 a2@10 d3@11", BD: "[g2@43 ~@21]/2",
})).s("gm_cello").gain(0.4)

// bass · contrabass
const bass = note(`<
  A@2 B C D@2 E F@3 G@4 E H@3 I J K@2 L@5 M@5 N@5 O@5 ~@17 P Q@2 R@4 S@2 T@2 ~@4 U V W X@2 ~@21 Y@2 Z AA AB AC AD AE AF
  AG AH AI AJ@2 AK AL AM@2 AN AO AP@2
>`.pickRestart({
  A: "[~@21 d2@32 a2@11]/2", B: "ab2", C: "e2@11 g2@21", D: "[db2@21 d2@43]/2", E: "gb1",
  F: "[eb2@11 d2@32 c2@10 bb1@21 ~ a1@21]/3", G: "[g1@43 ab1@32 f2@10 e2@32 g1@11]/4",
  H: "[eb2@11 d2@32 c2@10 bb1@32 g1@11]/3", I: "a1", J: "d2@11 f1@21", K: "[db2@21 d2@32 ~@11]/2",
  L: "[d2@3 a2 ab2@3 e2 g2@2 db2@2 d2@4]/5", M: "[gb1@3 eb2 d2@3 c2 bb1@2 a1@2 g1@4]/5",
  N: "[ab1@3 f2 e2@3 g1 gb1@3 eb2 d2@3 c2]/5", O: "[bb1@3 g1 a1@3 d2 f1@2 db2@2 d2@3 ~]/5", P: "~@2 g3@4 e3 ~",
  Q: "[~ g3@2 e3@4 ~]/2", R: "[d2,a2]@2 [d2,a2] ~@5", S: "[g1,d2]@2 [g1,d2] ~@5", T: "[ab1,d2]@2 [ab1,d2] ~@5",
  U: "d2@2 ab2 e2", V: "g2@2 db3 a2", W: "d3 ab2", X: "[bb2 g2 a2@5 ~]/2", Y: "[g2@11 a2@10 bb2@21 ~ a2@10 b2@11]/2",
  Z: "db3@21 c3@11", AA: "d3@11 eb3@10 c3@11", AB: "bb2@11 c3@10 d3@11", AC: "bb2@11 f3@10 eb3@11", AD: "d3@21 c3@11",
  AE: "d3@11 eb3@10 d3@11", AF: "c3@11 g2@10 b2@11", AG: "f2@11 eb2@10 bb2@11", AH: "a2@11 g2@10 e2@11",
  AI: "gb2@11 g2@21", AJ: "[eb2@11 f2@10 gb2@21 ~ d2@10 e2@11]/2", AK: "f2@21 c2@11", AL: "d2@11 eb2@10 d2@11",
  AM: "[c2@11 bb1@10 ab1@21 ~ bb1@10 a1@11]/2", AN: "g1@11 d2@10 eb2@11", AO: "g2@11 a1@10 d2@11", AP: "[g1@43 ~@21]/2",
})).s("gm_contrabass").gain(0.4)

stack(church_organ, electric_bass_finger, cello, bass)