Strudelify

Broken Doll March (åãã人å½ããã¼ã)

Greg Frin

KeyB minorTempo132 bpm
0:00/0:00
// Broken Doll March (åãã人å½ããã¼ã) — Greg Frin
// 132 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 6/4 at bar 93, 4/4 at bar 110) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5851602; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 143 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(132/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 · oboe
const oboe = note("<~@27 A B C B D ~ E F G ~@32 A B C B D ~ E F H ~@66>".pickRestart({
  A: "~@15 f#4", B: "g4 a4 b4 c#5 d5 c#5 e5 c#5", C: "d5@2 c#5@2 b4@2 a#4@2 b4@6 f#4!2", D: "b4 c#5 d#5 e5 f#5@3 ~",
  E: "e5@2 e5@2 d5@2 e5@2 f#5@4 ~@2 b4!2", F: "c#5 f5 f#5 g#5 a5 g#5 c#6 b5", G: "a#5 b5 a#5@2",
  H: "a#5 b5 a#5 b5 a#5@4",
})).s("gm_oboe").gain(0.3)

// other · harpsichord
const harpsichord = note("<~@3 A@8 B ~@65 C D E F C D E G C D E F C D E H ~@50>".pickRestart({
  A: "[~@15 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4@2 c#4 f4@2 c#4@2 f4 f#4@2 f#4 g4@2 f#4@3 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4@2 c#4 e4@2 d4@2 c#4@2 b3@2 a#3@2 b3 ~@2 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4@2 c#4 f4@2 c#4@2 f4 f#4@2 f#4 g4@2 f#4@3 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4]/8",
  B: "~ c#4 e4@2 d4@2 c#4@2 b3@2 a#3@2 b3@2 ~@2", C: "b5 f#6 c#6 f#6", D: "d6@2 e6 f#6 e6@2 a6@2",
  E: "b6@2 f#6@2 b6@2 d7@2 c#7@2 d7 c#7 b6@2 b6 c#7", F: "d7 c#7 b6 a6 f#6 a6 d6@2", G: "d7 c#7 b6 a#6 b6 a#6 b6@2",
  H: "d7 c#7 b6 a#6 b6@4",
})).s("gm_harpsichord").gain(0.25)

// other · church organ · "Organ"
const church_organ = note(`<
  ~@4 A B A C A B A C ~@8 D E D E D E D F ~@8 G H F I J H K L G H F I J H K H ~@9 D E D E D E D F ~@8 G H F I J H K L G
  H F I J H K H M N O P Q R S T U V W X Y Z AA AB@2 G H F I J H K L G H F I J H K H G H F I J H K H A B A C A B A AC ~
>`.pickRestart({
  A: "b3 g3", B: "c#4 f#3", C: "f#3@2 b3 ~", D: "b3 a#3", E: "c#4 c4", F: "c#4 f#4", G: "g3 a3", H: "f#3 b3",
  I: "b3 a#3 a3 d4", J: "g#3 g3", K: "e3 a3", L: "f#3@4 b3 f#3 b3@2", M: "b5 d5 ~ f#5 b5 a5 ~ g5 f#5@3 e5 d5 e5 ~ d5",
  N: "c#5@3 a#4 b4 c#5 ~ d5 e5@3 d5 c#5 a#4@3", O: "b4@3 c#5 d#5 e5 ~ f#5 e5 d#5 ~ e5 d#5 b4 ~ d#5",
  P: "e5@3 f#5 g5 a5 ~ g5 b5@4 e5 g5 ~ b5", Q: "a5@3 b5 a5 g5 ~ f#5 g5@3 a5 g5 f#5 ~ e5",
  R: "d5@3 e5 f#5 g5 ~ a5 g5 f#5 ~ g5 f#5 e5 ~ d5", S: "c#5@3 c#4 e4 g4 ~ c#5 e5@3 d5@2 c#5 ~ d5",
  T: "c#5@3 a#5@4 g5 f#5@8", U: "b5 d5 ~ f#5 b5 a5 ~ g5 f#5@3 e5 d5 e5 ~ d5, [b2,d3,f#3]",
  V: "c#5@3 a#4 b4 c#5 ~ d5 e5@3 d5 c#5 a#4@3, [c#3,f#3]", // F#5
  W: "b4@3 c#5 d#5 e5 ~ f#5 e5 d#5 ~ e5 d#5 b4 ~ d#5, [b2,d#3,f#3]", X: "e5@3 f#5 g5 a5 ~ g5 b5@4 e5 g5 ~ b5, [b2,e3]",
  Y: "a5@3 b5 a5 g5 ~ f#5 g5@3 a5 g5 f#5 ~ e5, [c#3,e3,a3]", // A
  Z: "d5@3 e5 f#5 g5 ~ a5 g5 f#5 ~ g5 f#5 e5 ~ d5, [a2,d3,f#3]", // D
  AA: "c#5@3 c#4 e4 g4 ~ c#5 e5@3 d5@2 c#5 ~ d5, [c#3,f3,g#3]", AB: "[c#5@3 a#5@4 g5 f#5@23 ~, [c#3,a#3] ~]/2",
  AC: "f#3@2 b3!2",
})).s("gm_church_organ").gain(0.25)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note(`<
  ~@4 A B C D A B C D E F E F E F E F E F E F E F E G H I H J K I L M ~@17 E F E F E F E F E F E F E F E G H I H J K I L
  N ~@24 O P O Q R S T U@2 V W X Y V W X Z V W X Y V W X AA AB AC AD AE AB AC AD AF A B C D A B C AG AH
>`.pickRestart({
  A: "~@2 [f#4,b4] ~@3 [f#4,b4] ~@3 [e4,f#4] ~@3 [e4,f#4] ~", // B5 Esus2
  B: "~@2 [f4,g4] ~@3 [f4,g4] ~@3 [f#4,c#5] ~@3 [f#4,c#5] ~", C: "~@2 [f#4,b4] ~@3 [f#4,b4] ~@3 [e4,g4] ~@3 [e4,g4] ~",
  D: "~@2 [d4,f#4] ~@3 [d4,f#4] ~ [f#4,b4] ~ [d4,f#4] ~ [f#4,b4]@2 ~@2", // D B5 D B5
  E: "~@2 [d4,f#4] ~@3 [d4,f#4] ~@3 [c#4,f4] ~@3 [c#4,f4] ~", F: "~@2 [f4,g#4] ~@3 [f4,g#4] ~@3 [e4,g4] ~@3 [e4,g4] ~",
  G: "~@2 [f4,g#4] ~@3 [f4,g#4] ~@3 [f#4,a#4] ~@3 [f#4,a#4] ~", H: "~@2 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~",
  I: "~@2 [d4,f#4] ~@3 [d4,f#4] ~@3 [d4,f#4] ~@3 [d4,f#4] ~", // D
  J: "~@2 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~", // B5
  K: "~@2 [g4,c#5] ~@3 [g4,c#5] ~@3 [g4,c#5] ~@3 [g4,c#5] ~", // Gdim
  L: "~@2 [f#4,g#4] ~@3 [f#4,g#4] ~@3 [f#4,g#4] ~@3 [f#4,g#4] ~", // F#sus2
  M: "~@2 [a#4,c#5] ~@3 [a#4,c#5] ~@3 [a#4,c#5] ~ [a#4,c#5]@4", // A#m
  N: "[a#4,c#5] ~ [a#4,c#5] ~ [a#4,c#5] ~ [a#4,c#5] ~ [a#4,c#5] ~@3 [a#4,c#5]@4", O: "b3@4 b4@3 b4 b4@5 ~@3",
  P: "c#3@4 c#4@3 c#4 c#4@5 ~@3", Q: "e4@3 b4@4 b4 b4@3 b4@2 b4@3", R: "a3@3 a4@4 a4 a4@5 ~@3",
  S: "d4@3 a4@4 a4 a4@3 a4@2 a4@3", T: "c#4@3 g#4@2 c#4 ~ c#4@4 g#4@2 g#4@3", U: "[c#4@3 f#4@5 f#4@24]/2",
  V: "b5 f#6 c#6 f#6", W: "d6@2 e6 f#6 e6@2 a6@2", X: "b6@2 f#6@2 b6@2 d7@2 c#7@2 d7 c#7 b6@2 b6 c#7",
  Y: "d7 c#7 b6 a6 f#6 a6 d6@2", Z: "d7 c#7 b6 a#6 b6 a#6 b6@2", AA: "d7 c#7 b6 a#6 b6@4",
  AB: "[b3,b5] [f#4,f#6] [c#4,c#6] [f#4,f#6]", AC: "[d4,d6]@2 [e4,e6] [f#4,f#6] [e4,e6]@2 [a4,a6]@2",
  AD: "[b4,b6]@2 [f#4,f#6]@2 [b4,b6]@2 [d5,d7]@2 [c#5,c#7]@2 [d5,d7] [c#5,c#7] [b4,b6]@2 [b4,b6] [c#5,c#7]", // B F# B D C# D C# B …
  AE: "[d5,d7] [c#5,c#7] [b4,b6] [a4,a6] [f#4,f#6] [a4,a6] [d4,d6]@2", // D C# B A F# A D
  AF: "[d5,d7] [c#5,c#7] [b4,b6] [a#4,a#6] [b4,b6]@4", // D C# B A# B
  AG: "~@2 [d4,f#4] ~@3 [d4,f#4] ~ [f#4,b4] ~ [d4,f#4] ~ [f#4,b4] ~ [d4,f#4] ~", AH: "[f#4,b4] ~@7",
})).s("gm_electric_guitar_clean").gain(0.15)

// other · accordion
const accordion = note(`<
  ~@36 A B C D E F G H A B C D E F G I ~@24 J A B C D E F G H A B C D E F G I K L M N O P Q R K L M N O P Q S@2 A B C D
  E F G H A B C D E F G I A B C D E F G T ~@9
>`.pickRestart({
  A: "~ d5 ~ d5 ~ e5 ~ e5", B: "~ c#5 ~ c#5 ~ f#5 ~ f#5", C: "~ g5 ~ g5 ~ a#4 ~ a#4", D: "~ f#5 ~ e5 ~ d5 ~ f#5",
  E: "~ f#5 ~ f#5 ~ f#5 ~ f#5", F: "~ e5 ~ e5 ~ f#5 ~ f#5", G: "~ b4 ~ b4 ~ e5 ~ e5", H: "~ e5 ~ e5 f#5 e5 f#5@2",
  I: "~ e5 ~ e5 f#5@4", J: "a#4!5 ~ a#4@2", K: "b4@3 [d5,f#5]@2 [d5,f#5]@3 b4@3 [d5,f#5]@2 [d5,f#5]@3",
  L: "f#4@3 [a#4,c#5]@2 [a#4,c#5]@3 f#4@3 [a#4,c#5]@2 [a#4,c#5]@3", // A#m
  M: "b4@3 [d#5,f#5]@2 [d#5,f#5]@3 b4@3 [d#5,f#5]@2 [d#5,f#5]@3", // D#m
  N: "e5@3 [g5,b5]@2 [g5,b5]@3 e5@3 [g5,b5]@2 [g5,b5]@3", O: "a4@3 [c#5,e5]@2 [c#5,e5]@3 a4@3 [c#5,e5]@2 [c#5,e5]@3",
  P: "d5@3 [f#5,a5]@2 [f#5,a5]@3 d5@3 [f#5,a5]@2 [f#5,a5]@3", // F#m
  Q: "c#5@3 [f5,g#5]@2 [f5,g#5]@3 c#5@3 [f5,g#5]@2 [f5,g#5]@3", R: "f#4@3 [a#4,c#5]@2 [a#4,c#5]@3 [a#4,c#5]@8",
  S: "[f#4@3 [a#4,c#5]@2 [a#4,c#5]@3 [a#4,c#5]@24]/2", T: "~@2 e5@2 ~@2 e5@2 f#5@7 ~",
})).s("gm_accordion").gain(0.25)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@133 A@8 B C>".pickRestart({
  A: "[~@15 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4@2 c#4 f4@2 c#4@2 f4 f#4@2 f#4 g4@2 f#4@3 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4@2 c#4 e4@2 d4@2 c#4@2 b3@2 a#3@2 b3 ~@2 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4@2 c#4 f4@2 c#4@2 f4 f#4@2 f#4 g4@2 f#4@3 b3@2 b3 g4@2 f#4@2 e4 d4@2 d4 f#4@2 e4@2 d4 c#4]/8",
  B: "~ c#4 e4@2 d4@2 c#4@2 b3@2 a#3@2 b3@2 a#3@2", C: "b3 ~ b2 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.3)

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

// other · timpani
const timpani = note("<~@109 [f#2!2 f#2@2 f#2@2 f#2!8 f#2@2] ~@33>").s("gm_timpani").gain(0.2)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@27 A ~@11 A ~@7 A ~@3 A B ~@15 A ~@11 A ~@7 A ~@3 C ~@8 D E D@2 F G F ~@5 A ~@7 A ~@3 A ~@3 A ~@3 A ~@9
>`.pickRestart({
  A: "~@7 x", B: "x!2", C: "~@15 x", D: "x!2 ~@2", E: "x ~@3 x ~@8 x ~@2", F: "x!4", G: "x ~@3 x ~@3 x ~@4 x ~@2",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B A C A B A D ~@23 E A@3 ~ A@3 D A@3 ~ A@3 D ~@25 A@3 ~ A@3 D A@3 ~ A@3 D ~@7 F ~@9 A@3 ~ A@3 D A@3 ~ A@3 D A@3
  ~ A@3 D A B A C A B A D ~
>`.pickRestart({
  A: "~@2 x ~@3 x!2 ~@2 x ~@3 x!2", B: "~@2 x ~@3 x!2 ~@2 x ~ x!2 ~@2", C: "~@2 x ~ x!4 ~@8", D: "~@2 x ~@3 x!2 ~@8",
  E: "~@10 x!2 ~@4", F: "~@11 x!2 ~@3",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@27 A ~@11 A ~@7 A ~@3 A ~@16 A ~@11 A ~@7 A ~@3 B ~@8 C D C E C D C E ~@4 A ~@7 A ~@3 A ~@3 A ~@3 A ~@9
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@9 x ~@3 x ~@2", C: "x!2", D: "x ~@2 x", E: "x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@27 A ~@11 A ~@7 A ~@3 A ~@16 A ~@11 A ~@7 A ~@3 B ~@9 C ~ D ~ C ~@6 A ~@7 A ~@3 A ~@3 A ~@3 A ~@9
>`.pickRestart({
  A: "~@3 x", B: "~@8 x ~@2 x!2 ~@3", C: "~@11 x ~@4", D: "~@11 x ~ x ~@2",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@2 B A ~@2 B ~@23 C ~@3 D ~@3 B ~@3 D ~@28 C ~@3 D ~@3 B ~@3 D ~@11 E F G F G F G F H ~@4 D ~@3 B ~@3 D ~@7 D
  ~@4 A ~@2 B A ~@2 I A
>`.pickRestart({
  A: "x", B: "~@4 x!3 ~", C: "~@3 x", D: "x!3 ~", E: "~@13 x ~@2", F: "~@3 x ~ x ~@5 x ~ x ~@2", G: "~@3 x ~ x ~@10",
  H: "~ x", I: "~@4 x!4",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@5 A ~@3 A ~@66 B ~@58 A ~@3 A ~@3>".pickRestart({
  A: "~@14 x!2", B: "~@10 x!2 ~@4",
})).gain(0.25)

// drums · whistle
const whistle = s("ballwhistle:0").struct("<~@3 [x!8 ~@2 x ~ x ~@3] ~@139>").gain(0.32)

stack(
  oboe, harpsichord, church_organ, electric_guitar_clean, accordion, electric_guitar_jazz, bass, timpani, kick, snare,
  low_tom, hihat, mid_tom, high_tom, crash, ride, whistle
)