Strudelify

uma thurman

Vishal Forde

KeyA♭ majorTempo120 bpm
0:00/0:00
// uma thurman — Vishal Forde
// 120 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 "Bb Tuba" tuba (copy of ch 9 "Trombone" trombone)
// note: Transcription provider: pdmx. https://musescore.com/score/1208641; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 40 bars on a 16-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 part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · flute
const flute = note("<A B A B C ~@3 D@2 E@2 F G H I J K L M N O P Q R S T U V W@2 X Y ~@3 F G H I>".pickRestart({
  A: "db5@3 db5", B: "ab4@3 ab4", C: "db5", D: "db5@2 db5 db5@2 db5 db5@2", E: "ab4@2 ab4 ab4@2 ab4 ab4@2",
  F: "f4@2 ab4 f4 b4 c5 f5@2", G: "db5 c5 bb4@4 ab4 bb4", H: "c5@2 c5@2 c5 d5 e5@2", I: "f5@3 ~",
  J: "~ ab4!3 ab4@2 ab4@2", K: "ab4@2 ab4@2 ab4 f4 f4@2", L: "ab4!2 bb4 ab4 g4 f4 eb4@2", M: "f4@3 ~",
  N: "~ [ab5,c6]!3 [ab5,c6]@2 [ab5,c6]@2", O: "[ab5,c6]@2 [ab5,c6]@2 [ab5,c6] [g5,bb5] [f5,ab5] [g5,bb5]",
  P: "[ab5,c6]@2 [bb5,eb6] [ab5,c6] [g5,bb5] [f5,ab5] [eb5,g5]@2", Q: "[f5,ab5]@6 ~ c5", R: "c5@2 ~ c5 c5@2 ~ c5",
  S: "c5 c5@2 c5 ~@3 c5", T: "c5@2 c5 db5 c5 bb4 ab4 bb4", U: "c5 c5@2 c5 ~ ab4 c5@2", V: "f5 c5 b4 c5",
  W: "f4@2 c5 ab4 b4@2 c5@2", X: "f4 c5 b4 c5", Y: "f5 ~@3",
})).s("gm_flute").gain(0.3)

// other · clarinet · "Bb Clarinet"
const clarinet = note("<A B A B C ~@3 D@2 E@2 F G H I J K L M N O P Q R S T U V W@2 X Y ~@3 F G H I>".pickRestart({
  A: "db5@3 db5", B: "ab4@3 ab4", C: "db5", D: "db5@2 db5 db5@2 db5 db5@2", E: "ab4@2 ab4 ab4@2 ab4 ab4@2",
  F: "f4@2 ab4 f4 b4 c5 f5@2", G: "db5 c5 bb4@4 ab4 bb4", H: "c5@2 c5@2 c5 d5 e5@2", I: "f5@3 ~",
  J: "~ ab4!3 ab4@2 ab4@2", K: "ab4@2 ab4@2 ab4 f4 f4@2", L: "ab4!2 bb4 ab4 g4 f4 eb4@2", M: "f4@3 ~",
  N: "~ [ab4,c5]!3 [ab4,c5]@2 [ab4,c5]@2", O: "[ab4,c5]@2 [ab4,c5]@2 [ab4,c5] [g4,bb4] [f4,ab4] [g4,bb4]",
  P: "[ab4,c5]@2 [bb4,eb5] [ab4,c5] [g4,bb4] [f4,ab4] [eb4,g4]@2", Q: "[f5,ab5]@6 ~ c5", R: "c5@2 ~ c5 c5@2 ~ c5",
  S: "c5 c5@2 c5 ~@3 c5", T: "c5@2 c5 db5 c5 bb4 ab4 bb4", U: "c5 c5@2 c5 ~ ab4 c5@2", V: "f5 c5 b4 c5",
  W: "f4@2 c5 ab4 b4@2 c5@2", X: "f4 c5 b4 c5", Y: "f5 ~@3",
})).s("gm_clarinet").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A B C D E ~@3 F G H I F J K L M N O L ~@3 P Q R S T U V@2 W F G H I F J K L>".pickRestart({
  A: "c4 bb3!3", B: "ab3@2 f3 eb3 ab3!4", C: "f3 eb3 ~@2 ab3!4", D: "f3 eb3 ~ eb3 bb3@2 ab3@2",
  E: "[ab3,c4]@2 [ab3,c4]@2 [ab3,c4]@2 [bb3,db4] [g3,bb3]", F: "f3@2 ab3 f3 b3 c4 f4@2", G: "db4 c4 bb3@4 c4 bb3",
  H: "ab3@2 bb3 ab3 g3 f3 eb3@2", I: "f3@3 ~", J: "db4 c4 bb3@4 ab3 bb3", K: "c4@2 c4@2 c4 d4 e4@2", L: "f4@3 ~",
  M: "~ ab4!3 ab4@2 ab4@2", N: "ab4@2 ab4@2 ab4 f4 f4@2", O: "ab4!2 bb4 ab4 g4 f4 eb4@2", P: "~@7 ab4",
  Q: "ab4@2 ~ ab4 ab4@2 ~ ab4", R: "ab4 ab4@2 ab4 ~@3 ab4", S: "ab4@2 ab4 bb4 ab4 g4 f4 g4",
  T: "ab4 ab4@2 ab4 ~ f4 ab4@2", U: "db4 ab3 g3 ab3", V: "db3@2 ab3 e3 g3@2 ab3@2", W: "db3 ab3 g3 ab3",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B A B A C D E F@2 G H I F G ~ J K L H M N O ~ P Q B R S T@2 U V W B X@2 B Y Z
>`.pickRestart({
  A: "db3", B: "ab2", C: "~@2 ab2@2 ab2 bb2 c3@2", D: "c3 ~ bb2 ~", E: "ab2 ~ g2 ~", F: "db2@2 db2 db2@2 db2 db2@2",
  G: "ab2@2 ab2 ab2@2 ab2 ab2@2", H: "f2@4 b2 c3 eb2@2", I: "eb2@4 ~ db2 db2@2", J: "~ ab2!3 ab2@2 ab2@2",
  K: "ab2!2 ~@2", L: "ab2!2 ~@4 eb2@2", M: "f2@2 ~ f2", N: "f2@2 f2@2 f2!4", O: "c3!4 ab2!4", P: "ab2@3 ab2",
  Q: "ab2 ab2@2 ab2 ~@4", R: "~@3 eb4", S: "f4 c4 b3 c4", T: "f3@2 c4 ab3 b3@2 c4@2", U: "f3 c4 b3 c4", V: "f4 ~@3",
  W: "db2", X: "f2", Y: "g2", Z: "f2@3 ~",
})).s("gm_baritone_sax").gain(0.48)

// other · trumpet · "Bb Trumpet"
const trumpet = note("<A B C D E F G H ~@4 I J K L M N O P Q R S T ~@3 U V W@2 X Y ~@3 I J K L>".pickRestart({
  A: "c5 bb4!3", B: "ab4@2 f4 eb4 ab4!4", C: "f4 eb4 ~@2 ab4!4", D: "f4 eb4 ~ eb4 bb4@2 ab4@2",
  E: "[ab4,c5]@2 [ab4,c5]@2 [ab4,c5]@2 [bb4,db5] [g4,bb4]", F: "~@2 ab3@2 ab3 bb3 c4@2", G: "c4 ~ bb3 ~",
  H: "ab3 ~ g3 ~", I: "f4@2 ab4 f4 b4 c5 f5@2", J: "db5 c5 bb4@4 ab4 bb4", K: "c5@2 c5@2 c5 d5 e5@2", L: "f5@3 ~",
  M: "~ ab4!3 ab4@2 ab4@2", N: "ab4@2 ab4@2 ab4 f4 f4@2", O: "ab4!2 bb4 ab4 g4 f4 eb4@2", P: "f4@3 ~",
  Q: "~ [ab4,c5]!3 [ab4,c5]@2 [ab4,c5]@2", R: "[ab4,c5]@2 [ab4,c5]@2 [ab4,c5] [g4,bb4] [f4,ab4] [g4,bb4]",
  S: "[ab4,c5]@2 [bb4,eb5] [ab4,c5] [g4,bb4] [f4,ab4] [eb4,g4]@2", T: "[f4,ab4]@3 ~", U: "~@3 eb5", V: "f5 c5 b4 c5",
  W: "f4@2 c5 ab4 b4@2 c5@2", X: "f4 c5 b4 c5", Y: "f5 ~@3",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "F Mellophone"
const french_horn = note("<A B C D E F G H I J K L I M N O ~@4 P Q R S T U V W X Y@2 Z I J K L I M N O>".pickRestart({
  A: "c4 bb3!3", B: "ab3@2 f3 eb3 ab3!4", C: "f3 eb3 ~@2 ab3!4", D: "f3 eb3 ~ eb3 bb3@2 ab3@2",
  E: "[ab3,c4]@2 [ab3,c4]@2 [ab3,c4]@2 [bb3,db4] [g3,bb3]", F: "~@2 ab3@2 ab3 bb3 c4@2", G: "c4 ~ bb3 ~",
  H: "ab3 ~ g3 ~", I: "f3@2 ab3 f3 b3 c4 f4@2", J: "db4 c4 bb3@4 c4 bb3", K: "ab3@2 bb3 ab3 g3 f3 eb3@2", L: "f3@3 ~",
  M: "db4 c4 bb3@4 ab3 bb3", N: "c4@2 c4@2 c4 d4 e4@2", O: "f4@3 ~", P: "~ [ab4,c5]!3 [ab4,c5]@2 [ab4,c5]@2",
  Q: "[ab4,c5]@2 [ab4,c5]@2 [ab4,c5] [g4,bb4] [f4,ab4] [g4,bb4]", // Ab Gm Fm Gm
  R: "[ab4,c5]@2 [bb4,eb5] [ab4,c5] [g4,bb4] [f4,ab4] [eb4,g4]@2", S: "[f4,ab4]@3 ~", T: "ab4@2 ~ ab4 ab4@2 ~ ab4",
  U: "ab4 ab4@2 ab4 ~@3 ab4", V: "ab4@2 ab4 bb4 ab4 g4 f4 g4", W: "ab4 ab4@2 ab4 ~ f4 ab4@2", X: "db5 ab4 g4 ab4",
  Y: "db4@2 ab4 e4 g4@2 ab4@2", Z: "db4 ab4 g4 ab4",
})).s("gm_french_horn").gain(0.3)

// other · trombone
const trombone = note("<A B A B A C D E F@2 G@2 F@2 G ~ H I J K L M N ~ O P B Q R S@2 T U V B W@2 B X Y>".pickRestart({
  A: "db3", B: "ab2", C: "~@2 ab2@2 ab2 bb2 c3@2", D: "c3 ~ bb2 ~", E: "ab2 ~ g2 ~", F: "db2@2 db2 db2@2 db2 db2@2",
  G: "ab2@2 ab2 ab2@2 ab2 ab2@2", H: "~ ab2!3 ab2@2 ab2@2", I: "ab2!2 ~@2", J: "ab2!2 ~@4 eb2@2", K: "f2@4 b2 c3 eb2@2",
  L: "f2@2 ~ f2", M: "f2@2 f2@2 f2!4", N: "c3!4 ab2!4", O: "ab2@3 ab2", P: "ab2 ab2@2 ab2 ~@4", Q: "~@3 eb3",
  R: "f3 c3 b2 c3", S: "f2@2 c3 ab2 b2@2 c3@2", T: "f2 c3 b2 c3", U: "f3 ~@3", V: "db2", W: "f2", X: "g2", Y: "f2@3 ~",
})).s("gm_trombone").gain(0.3)

stack(flute, clarinet, tenor_sax, baritone_sax, trumpet, french_horn, trombone)