Strudelify

game theory theme

Spelling Phailer

KeyA minorTempo90 bpm
0:00/0:00
// game theory theme — Spelling Phailer
// 90 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/1945846; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 53 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · marimba
const marimba = note(`<
  A B C B A B C B A B C B A B C D E F G H E F G H A B C B A B C B A B C B A B C D I J K L E F G H E F G M N
>`.pickRestart({
  A: "a3 a4 a3 a4 a3 a4 a3 a4 a3 a4 a3 a4 a3 a4 a3 a4", B: "g3 g4 g3 g4 g3 g4 g3 g4 g3 g4 g3 g4 g3 g4 g3 g4",
  C: "f3 f4 f3 f4 f3 f4 f3 f4 f3 f4 f3 f4 f3 f4 f3 f4", D: "g3 g4 g3 g4 g3 g4 g3 g4 g3 g4 g3 g4 [g3,g4]!4",
  E: "[a3,e4]!16", F: "[g3,d4]!16", G: "[f#3,a3]!16", H: "[f3,c4]!8 [e4,c5]@2 [d4,b4]@2 [c4,a4]@2 [b3,g4]@2",
  I: "[a4,c5,e5,a5]", J: "[g4,b4,d5,g5]", K: "[f#4,a4,c5,f#5]", L: "[f4,d5,f5]@4 e4 d4 c4 b3",
  M: "[f3,c4]!8 [e4,e5]!2 ~ [d4,d5] [c4,c5]!2 ~ [b3,b4]", N: "[a3,a4] ~@3",
})).s("gm_marimba").gain(0.4)

// chords · xylophone
const xylophone = note(`<
  A ~@3 B C D C B C D C B C D C E F G H E F G H A ~@3 B C D C B C D C B C D C I J I K L M L N L M L O P
>`.pickRestart({
  A: "[c5,a5] ~@3", B: "[a5,c6]@2 [a5,c6]@2 [a5,c6]@2 ~ [a5,c6]@2 [a5,c6]@2 ~ [a5,c6]@2 [a5,c6]@2",
  C: "[g5,b5]@2 [g5,b5]@2 [g5,b5]@2 ~ [g5,b5]@2 [g5,b5]@2 ~ [g5,b5]@2 [g5,b5]@2", // G
  D: "[f5,a5]@2 [f5,a5]@2 [f5,a5]@2 ~ [f5,a5]@2 [f5,a5]@2 ~ [f5,a5]@2 [f5,a5]@2", // F
  E: "a4 c5 d5 c5 a4 c5 d5 c5 a4 c5 d5 c5 a4 c5 d5 c5", F: "g4 c5 d5 c5 g4 c5 d5 c5 g4 c5 d5 c5 g4 c5 d5 c5",
  G: "f#4 c5 d5 c5 f#4 c5 d5 c5 f#4 c5 d5 c5 f#4 c5 d5 c5",
  H: "f4 c5 d5 c5 f4 d5@2 f4 [e5,c6]@2 [d5,b5]@2 [c5,a5]@2 [b4,g5]@2", I: "a4@2 a4@2 g4 g4@2 a4@2 c5 a4 c5 d5 c5 d5 e5",
  J: "a5 b5 c6 b5 a5 g5@2 a5@2 a5 g5 e5 g5 e5 d5 c5", K: "a5 b5 c6 b5 a5 g5@2 g5 c6@2 b5@2 a5@2 g5@2",
  L: "a5@2 a5@2 g5 g5@2 a5@2 c6 a5 c6 d6 c6 d6 e6", M: "a6 b6 c7 b6 a6 g6@2 a6@2 a6 g6 e6 g6 e6 d6 c6",
  N: "a6 b6 c7 b6 a6 g6@2 g6 c7@2 b6@2 a6@2 g6@2", O: "a6 b6 c7 b6 a6 g6@2 g6 c7!2 ~ b6 a6!2 ~ g6", P: "a6 ~@3",
})).s("gm_xylophone").gain(0.3)

// other · vibraphone
const vibraphone = note(`<
  A ~@3 B C D E B F G H I J K L M N O P M N O P A ~@3 B C D E B F G H I J K L Q R S T U V U W U V U X Y
>`.pickRestart({
  A: "a4 ~@3", B: "a4@6 g4 a4", C: "c5@3 b4@3 a4@2 g4@8", D: "a4@3 g4@3 a4@2 c5@3 b4@3 a4@2", E: "g4@3 e4@3 f4@2 g4@8",
  F: "[c5,e5]@3 [b4,d5]@3 [a4,c5]@2 [g4,b4]@8", G: "[a5,c6]@3 [g5,b5]@3 [a5,c6]@2 [c6,e6]@3 [a5,c6]@3 [c6,e6]@2",
  H: "[e5,e6]@3 [f5,d6,f6]@3 [e5,c6,e6]@2 [d5,b5,d6]@8", I: "f4@6 e4 d4", J: "e4@3 d4@3 c4@2 a3@8",
  K: "[c4,c5]@6 [b3,d4] [c4,e4] [b3,d4]@6 a3@2", L: "c4@3 e4@3 f4@2 g4@8", M: "a4@2 a4@2 a4@2 a4@2 a4@2 a4@2 a4!4",
  N: "g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4!4", O: "f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4!4", P: "f4!4 c5 b4 a4 g4",
  Q: "[a4,c5,e5,a5]", R: "[g4,b4,d5,g5]", S: "[f#4,a4,c5,f#5]", T: "[f4,d5,f5]@4 [c5,e5] [b4,d5] [a4,c5] [g4,b4]",
  U: "a5@2 a5@2 g5 g5@2 a5@2 c6 a5 c6 d6 c6 d6 e6", V: "a6 b6 c7 b6 a6 g6@2 a6@2 a6 g6 e6 g6 e6 d6 c6",
  W: "a6 b6 c7 b6 a6 g6@2 g6 c7@2 b6@2 a6@2 g6@2", X: "a6 b6 c7 b6 a6 g6@2 g6 c7!2 ~ b6 a6!2 ~ g6", Y: "a6 ~@3",
})).s("gm_vibraphone").gain(0.4)

// other · vibraphone
const vibraphone_2 = note(`<
  A ~@3 B C D E F G H I J K L M N O P Q N O P R A ~@3 B C D E F G H I J K L M S T U V W X W Y W X W Z AA
>`.pickRestart({
  A: "[a4,a5] ~@3", B: "a4@6 g4 a4", C: "c5@3 b4@3 a4@2 g4@8", D: "a4@3 g4@3 a4@2 c5@3 b4@3 a4@2",
  E: "g4@3 e4@3 f4@2 g4@8", F: "c5@6 b4 c5", G: "[e5,g5]@3 [d5,f5]@3 [c5,e5]@2 [b4,d5]@8",
  H: "[a4,c5]@3 [g4,b4]@3 [a4,c5]@2 [c5,e5]@3 [a4,c5]@3 [c5,e5]@2", // Am G Am C Am C
  I: "[e4,e5]@3 [f4,d5,f5]@3 [e4,c5,e5]@2 [d4,b4,d5]@8", J: "f5@6 e5 d5", K: "e5@3 d5@3 c5@2 a4@8",
  L: "[c5,c6]@6 d5 e5 d5@6 a4@2", M: "[c5,c6]@3 [e5,e6]@3 [f5,f6]@2 [g5,g6]@8", N: "a4@2 a4@2 a4@2 a4@2 a4@2 a4@2 a4!4",
  O: "g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4!4", P: "f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4!4", Q: "f4!4 c6 b5 a5 g5",
  R: "[f4,f5]!4 [c5,c6] [b4,b5] [a4,a5] [g4,g5]", S: "[a4,c5,e5,a5]", T: "[g4,b4,d5,g5]", U: "[f#4,a4,c5,f#5]",
  V: "[f4,d5,f5]@4 e5 d5 c5 b4", W: "a4@2 a4@2 g4 g4@2 a4@2 c5 a4 c5 d5 c5 d5 e5",
  X: "a5 b5 c6 b5 a5 g5@2 a5@2 a5 g5 e5 g5 e5 d5 c5", Y: "a5 b5 c6 b5 a5 g5@2 g5 c6@2 b5@2 a5@2 g5@2",
  Z: "a5 b5 c6 b5 a5 g5@2 g5 c6!2 ~ b5 a5!2 ~ g5", AA: "a5 ~@3",
})).s("gm_vibraphone").gain(0.4)

// other · glockenspiel
const glockenspiel = note(`<
  A ~@4 B C D E F ~ G H I ~ J K L K M K L K M A ~@4 B C D E F ~ G H I ~ J ~@3 N O P Q R O P Q S T
>`.pickRestart({
  A: "a7 ~@3", B: "c8@3 b7@3 a7@2 g7@8", C: "a7@3 g7@3 a7@2 c8@3 b7@3 a7@2", D: "g7@3 e7@3 f7@2 g7@8", E: "c8@6 b7 c8",
  F: "[e7,e8]@3 [d7,d8]@3 [c7,c8]@2 [b6,b7]@8", G: "[e7,e8]@3 [f7,f8]@3 [e7,e8]@2 [d7,d8]@8", H: "f7@6 e7 d7",
  I: "e7@3 d7@3 c7@2 a6@8", J: "c7@3 e7@3 f7@2 g7@8", K: "a6@2 a6@2 g6 g6@2 a6@2 c7 a6 c7 d7 c7 d7 e7",
  L: "a7 b7 c8 b7 a7 g7@2 a7@2 a7 g7 e7 g7 e7 d7 c7", M: "a7 b7 c8 b7 a7 g7@2 g7 c8@2 b7@2 a7@2 g7@2",
  N: "~@4 [c7,e7] [b6,d7] [a6,c7] [g6,b6]", O: "a6 c7 d7 c7 a6 c7 d7 c7 a6 c7 d7 c7 a6 c7 d7 c7",
  P: "g6 c7 d7 c7 g6 c7 d7 c7 g6 c7 d7 c7 g6 c7 d7 c7", Q: "f#6 c7 d7 c7 f#6 c7 d7 c7 f#6 c7 d7 c7 f#6 c7 d7 c7",
  R: "f6 c7 d7 c7 f6 d7@2 f6 [e7,c8]@2 [d7,b7]@2 [c7,a7]@2 [b6,g7]@2", // C G F Em
  S: "f6 c7 d7 c7 f6 d7@2 f6 [e7,c8]!2 ~ [d7,b7] [c7,a7]!2 ~ [b6,g7]", T: "[a6,a7] ~@3",
})).s("gm_glockenspiel").gain(0.45)

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

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@3 B A@3 B A@3 C D@3 E D@3 E A@3 B A@3 B A@3 B A@3 C ~@3 F G H@2 E G H@2 E ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x ~@3 x!2", C: "~@2 x ~@3 x ~ x!6 ~@2", D: "~@2 x ~@3 x ~@3 x ~ x!4",
  E: "~ x ~ x ~@4", F: "x ~@3 x!4", G: "~@2 x ~ x ~ x ~ x ~ x ~ x!4", H: "x ~ x ~ x ~ x ~ x ~ x ~ x!4",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@11 B ~@12 A@11 B ~@4 C A@2 B C A@2 B ~>".pickRestart({
  A: "x!16", B: "x!8 ~@8", C: "~ x!15",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@14 B A ~@2 C A ~@2 C A ~@14 B A ~@3 A ~@2 C A ~@2 C D>".pickRestart({
  A: "x", B: "~@15 x", C: "~@12 x!4", D: "~@5 x ~@10",
})).gain(0.5)

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

// drums · crash
const crash = s("cr").struct("<A ~@15 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@3 A>".pickRestart({
  A: "x",
})).gain(0.5)

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

stack(marimba, xylophone, vibraphone, vibraphone_2, glockenspiel, kick, snare, hihat, mid_tom, high_tom, crash, ride)