Strudelify

The Big Race

Randy Newman

KeyE♭ majorTempo140 bpm
0:00/0:00
// The Big Race — Randy Newman
// 140 bpm, 4/4, key D# major. 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, 5/4 at bar 4, 6/4 at bar 6, 5/4 at bar 9, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5967343; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 47 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · soprano sax · "Soprano Saxophone"
const soprano_sax = note(`<
  ~ A B C D E F G H I@2 J@2 K L M N O@3 P Q R S T U V W X ~@3 Y@2 Z AA AB AC AD AE AF AG AH AI AJ AK AL
>`.pickRestart({
  A: "~@8 a4 g4 a4 b4 c5 b4 c5 d5", B: "eb5 d5 c5 d5 eb5 d5 c5 d5 eb5 d5 c5 d5 eb5 d5 c5 d5",
  C: "~@2 c5 bb4 c5 ~ c5 bb4 c5 ~ c5 bb4 c5 bb4 c5 d5",
  D: "eb5@2 d5@2 c5@2 bb4@2 ~@4 db5 ~ db5 ~ db5@3 ~ db5@3 ~@5 db5@3 ~", E: "~@4 db5@3 ~@17 ab5@2 f5@2 c5@2 ~@2",
  F: "ab5 f5 c5 ~ ab5 f5 c5 ~ ab5 f5 c5 ~ ab5@4", G: "~@2 g5 d5 g5@2 g5 d5 g5@2 g5 b5 g5@2 g5 d5", H: "~ g5 g5@2 c5@4",
  I: "[g5@12 bb5@6 ab5 g5 f5@12]/2", J: "[ab5@6 g5 f5 eb5@16 g5@6 f5 eb5]/2", K: "d5",
  L: "f4@2 g4@2 ab4@2 bb4@2 c5@5 c5 ~ c5 d5@3 d5@2 d5@3 bb4@3 bb4@2 bb4@3",
  M: "c5@8 eb5@3 f5@2 gb5@3 gb5@3 f5@2 eb5@3 f5@3 eb5@2 d5@3", N: "eb5@3 d5@2 c5@3 ~@16 eb5@3 ~@5",
  O: "[~@3 db5@4 bb4@3 gb4@2]/3", P: "e4 f4@15 ~@16", Q: "~ eb5", R: "f5@16 ~@8 b4@5 eb4@3",
  S: "gb4@5 ~@11 bb4@3 c5@2 db5@3 ~@8",
  T: "bb4@3 c5@2 db5@3 ~@8 a5 [a5,bb5] bb5 [a5,bb5] a5 [a5,bb5] bb5 [a5,bb5] a5 [a5,bb5] bb5 [a5,bb5] a5 [a5,bb5] bb5 [a5,bb5]", // Bbmaj7
  U: "a5 [a5,bb5] bb5 [a5,bb5] a5 [a5,bb5] bb5 [a5,bb5] a5 [a5,bb5] bb5 [a5,bb5] a5 [a5,bb5] bb5 [a5,bb5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5]", // Bbmaj7 Abmaj7
  V: "g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5]", // Abmaj7
  W: "g5 [g5,ab5] ab5 [g5,ab5] g5 [g5,ab5] ab5 [g5,ab5] eb5@8 db5@8 b4@8", X: "bb4 ~@3", Y: "[ab4 eb5 db5 bb5@5]/2",
  Z: "bb5", AA: "~@4 db5 ~ db5 ~ db5@3 ~ db5@3 ~@5 db5@3 ~@5 db5@3 ~",
  AB: "~@4 b4 ~ b4 ~ b4@3 ~ b4@3 ~@5 a4@3 ~@5 a4@3 ~", AC: "~@4 gb4 ~ gb4 ~ gb4@3 ~ gb4@3 ~@5 e4@3 ~@5 e4@3 ~",
  AD: "~@4 db5@4 gb5@8 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5",
  AE: "ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ~@4 db5 ~ db5 ~ db5@3 ~ db5@3 ~@5 db5@3 ~",
  AF: "~@4 db5@3 ~@5 b5 ~ b5 ~ b5@3 ~ b5@3 ~@5 a5@3 ~", AG: "~@4 a5@3 ~@5 gb5 ~ gb5 ~ gb5@3 ~ gb5@3 ~@5 e5@3 ~",
  AH: "~@4 e5@3 ~@5 bb4@2 bb4@2 bb4@4 bb4@2 bb4@2 bb4@4 bb4@4", AI: "~@2 bb4!2 bb4@6 bb4!2 c5@2 c5@2",
  AJ: "ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5 ab5 bb5",
  AK: "db5 ab5", AL: "f5!2 f5@2 ~@12",
})).s("gm_soprano_sax").gain(0.4)

// other · trumpet
const trumpet = note("<~@2 A B@3 C D@2 E@2 F@2 G H I J ~@3 K L M N O P Q R ~@3 S@3 T U V W X@5 Y Z T AA>".pickRestart({
  A: "a4@3 ~@5 a4@3 ~@5 a4@3 ~@13", B: "[c4@8 g4@12 bb4@6 ab4 g4 f4@12 ab4@6 g4 f4]/3", C: "eb4@7 f4", D: "[g4@3 c4]/2",
  E: "[g4@12 bb4@6 ab4 g4 f4@12]/2", F: "[ab4@6 g4 f4 eb4@16 g4@6 f4 eb4]/2", G: "d4",
  H: "f4@2 g4@2 ab4@2 bb4@2 c5@5 c5 ~ c5 d5@3 d5@2 d5@3 bb4@3 bb4@2 bb4@3", I: "c5@8 ~@16 eb4@3 ~@5",
  J: "eb4@3 ~@5 bb4@3 ab4@2 gb4@3 ab4@3 gb4@2 f4@3 eb4@3 ~@5", K: "~@16 eb4@3 bb3@2 eb4@3 gb4@3 f4@2 eb4@3",
  L: "db4@3 eb4@2 f4@3 eb4@8 eb4@5 eb4@3 bb4@3 ab4@2 gb4@3", M: "f4@3 gb4@2 ab4@3 f4@3 ~@5 eb4@3 gb4@2 bb4@3 eb5@8",
  N: "bb4@5 gb4@3 f4@3 eb4@2 db4@3 gb4@3 ~@2 gb4@3 eb4@3 ~@2 eb4@3", O: "gb4@3 ~@2 gb4@3 eb4@3 ~@2 eb4@3 ~@16",
  P: "~@16 g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4]", // Abmaj7
  Q: "g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4]", // Abmaj7
  R: "g4 [g4,ab4] ab4 [g4,ab4] g4 [g4,ab4] ab4 [g4,ab4] ~@24", S: "[~@2 db4 bb4@9]/3", T: "db5", U: "db4 ab4",
  V: "b4@6 a4 ab4 gb4@8", W: "a4@6 ab4 gb4 e4@8",
  X: "[ab4@6 gb4 e4 eb4@12 db4@8 ab4@6 db5 c5 b4@6 a4 ab4 gb4@8 a4@6 ab4 gb4 e4@8 eb4@12]/5", Y: "ab4", Z: "c5",
  AA: "db5!2 db5@2 ~@12",
})).s("gm_trumpet").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A@2 B C D E F G H I J K L M N O P ~@3 Q R S T U V W X ~@3 Y@3 Z K AA AB AC AD AE AF AG AH AI@2 AJ
>`.pickRestart({
  A: "c3/2", B: "gb3@3 ~@5 gb3@3 ~@5 gb3@3 ~@13", C: "~@4 g3 ~ g3 ~ g3@3 ~ g3@3 ~@5 g3@3 ~@9",
  D: "g3@5 ~@7 f3 ~ f3 ~ f3@3 ~ f3@3 ~@5 f3@3 ~", E: "~@4 f3@3 ~@13 ab3 ~ ab3 ~ ab3@3 ~ ab3@3 ~",
  F: "~@4 ab3@3 ~@5 ab3@3 ~ ab3@5 ~@3 ab3@3 ~ ab3@3 ~", G: "~@4 g3 ~ g3 ~ g3@3 ~ g3@3 ~@5 g3@3 ~@5 g3@3 ~",
  H: "~@4 c4@4 b3@8 ~@4 g3 ~ g3 ~ g3@3 ~ g3@3 ~", I: "~@4 g3@3 ~@9 g3@5 ~@7 f3 ~ f3 ~",
  J: "f3@3 ~ f3@3 ~@5 f3@3 ~@5 f3@3 ~@9", K: "~@4 ab3 ~ ab3 ~ ab3@3 ~ ab3@3 ~@5 ab3@3 ~@5 ab3@3 ~",
  L: "ab3@5 ~@3 ab3@3 ~ ab3@3 ~@5 g3 ~ g3 ~ g3@3 ~ g3@3 ~", M: "~@4 g3@3 ~@5 g3@3 ~@5 c4@4 b3@8",
  N: "eb3@4 bb3@4 eb4@5 eb4 ~ eb4 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3", O: "eb4@4 c3 ~@3 eb3 ~@3 c3 ~@3",
  P: "c3@2 ~@6 gb3@2 ~@6 c4@2 ~@6 bb3@3 ~@5", Q: "~@8 bb2 ~@7", R: "ab2 ~@3 bb2 ~@3 gb3 ~@3 c4 ~@3",
  S: "d4@2 ~@6 f3@3 gb3@2 ab3@3 bb3@2 ~@14", T: "gb3@2 ~@6 db3@3 ~@5 db4@3 ~@2 db4@3 bb3@3 ~@2 bb3@3",
  U: "db4@3 ~@2 db4@3 bb3@3 ~@2 bb3@3 eb3@2 ~@14", V: "~@4 bb2 ~@3 db3 ~@7",
  W: "~@16 bb3@3 eb3@2 bb3@3 eb4@3 bb3@2 eb4@3", X: "gb4@3 eb4@2 gb3@3 ~@24", Y: "[~ db4@5]/3", Z: "bb3",
  AA: "~@4 gb3 ~ gb3 ~ gb3@3 ~ gb3@3 ~@5 gb3@3 ~@5 gb3@3 ~", AB: "~@4 a3 ~ a3 ~ a3@3 ~ a3@3 ~@5 a3@3 ~@5 a3@3 ~",
  AC: "ab3@4 bb3@4 ~@2 c4!2 db4@2 db4!2", AD: "c4@8 ~@4 ab3 ~ ab3 ~ ab3@3 ~ ab3@3 ~@5 ab3@3 ~",
  AE: "~@4 ab3@3 ~@5 gb3 ~ gb3 ~ gb3@3 ~ gb3@3 ~@5 gb3@3 ~", AF: "~@4 gb3@3 ~@5 a3 ~ a3 ~ a3@3 ~ a3@3 ~@5 a3@3 ~",
  AG: "~@4 a3@3 ~@5 ab3@2 ab3@2 ab3@4 ab3@2 ab3@2 ab3@4 ab3@4", AH: "~@2 ab3!2 ab3@6 ab3!2 ab3@2 ab3@2", AI: "eb3/2",
  AJ: "ab3!2 ab3@2 ~@12",
})).s("gm_tenor_sax").gain(0.4)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note("<~@16 A B@3 C ~@6 D@4 ~@16>".pickRestart({
  A: "~@27 eb3@2 eb3@3", B: "eb3@3 eb3@2 eb3@3 eb3@3 eb3@2 eb3@3 eb3@3 eb3@2 eb3@3 eb3@3 eb3@2 eb3@3",
  C: "eb3@3 eb3@2 eb3@3 eb3@3 eb3@2 eb3@3 ~@16", D: "[~ eb3@15]/4",
})).s("gm_tenor_sax").gain(0.2)

// bass · trombone · "Bass Trombone"
const bass = note("<A@2 B C@3 D E@2 F@2 G@2 H I@2 J ~@3 K L M N O P Q R ~@3 S ~ T U V W X Y@5 Z AA@2 AB>".pickRestart({
  A: "c2/2", B: "c2@3 ~@5 c2@3 ~@5 c2@3 ~@13", C: "[c2@2 eb2@3 bb1@2 db2@3 f2@2]/3", D: "ab2",
  E: "[eb2 f2 g2@4 c2@2]/2", F: "[eb2@3 bb1@2 db2@3]/2", G: "[f2@2 ab2@4 eb2 f2]/2", H: "g2",
  I: "[bb2@2 ab2@2 eb2@16 eb2 ~@3 gb2 ~@3 ab2 ~@3]/2", J: "gb2 ~@3 bb2 ~@3 ab2 ~@3 eb2 ~@3",
  K: "~@16 eb2@2 ~ eb2@2 eb2@2 ~@9", L: "db2 ~@3 eb2 ~@3 eb2 ~@3 gb2 ~@3",
  M: "bb2@2 ~@14 eb2@2 ~ eb2@2 eb2@2 ~ eb2@2 ~@6", N: "eb2 ~@3 bb1 ~@3 gb2 ~@3 eb2 ~@3", O: "a2 ~@3 c3 ~@3 bb2 ~@7",
  P: "~@4 f2 ~@3 ab2 ~@3 ab1 ~@3", Q: "db2 ~@3 ab2 ~@3 gb2 ~@3 bb2 ~@3", R: "db3 ~@15",
  S: "ab2@3 ~@19 ab2 ~ ab2@3 ~ ab2 ~ ab2 ~", T: "eb3", U: "eb2", V: "db2 e2", W: "b2 d2", X: "gb2 a2",
  Y: "[e2@4 gb2@4 ab2@12 db2@8 e2@8 b2@8 d2@8 gb2@8 a2@8 ~@2 eb2!2 eb2@2 eb2!2 eb2@2 eb2@2]/5",
  Z: "~@2 eb2!2 eb2@6 eb2!2 eb2@2 eb2@2", AA: "ab1/2", AB: "db2!2 db2@2 ~@12",
})).s("gm_trombone").gain(0.4)

// bass · trombone · "Bass Trombone" · soft notes
const bass_soft = note("<~@27 A@2 B C ~@16>".pickRestart({
  A: "[~ eb2@4 gb3 f3 eb3]/2", B: "db3 eb3 db3 b2", C: "bb2 b2 bb2 gb2",
})).s("gm_trombone").gain(0.15)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 [~@8 x ~@2 x ~ x ~@18] ~@8 [~@11 x!2 ~ x!2] ~@15>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@3 A ~@4 B ~@5 C ~@5 B ~ B ~@12 A ~@3 C ~@4 A ~@2>".pickRestart({
  A: "x", B: "~ x", C: "~ x ~@2",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@27 [~ x ~@2] [~ x ~ x] [x!2 ~@2] ~ x ~@15>").gain(0.2)

stack(soprano_sax, trumpet, tenor_sax, tenor_sax_soft, bass, bass_soft, kick, snare, mid_tom, crash, ride)

More by Randy Newman