Strudelify

old town road

Dante Williams

KeyA♭ majorTempo136 bpm
0:00/0:00
// old town road — Dante Williams
// 136 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5881050; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 49 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/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 · piccolo
const piccolo = note("<~@14 A B ~@8 C D E F C D E G H ~@7 C D E F C D E I H>".pickRestart({
  A: "~@2 db6@4 db6 eb6", B: "b5 ab5!2 ~", C: "eb6!2 db6@2 eb6@2 ab6@2", D: "eb6 db6@2 ~", E: "~ ab6 ab6@2 ab6@2 ab6@2",
  F: "db7 b6 bb6 ab6", G: "db7 b6 ~@2", H: "ab6 ~@3", I: "db7 b6 bb6 a6",
})).s("gm_piccolo").gain(0.5)

// other · piccolo · soft notes
const piccolo_soft = note("<~ A B C D A B C E F@2 G E F ~@35>".pickRestart({
  A: "~ b6@3", B: "ab6 ~@3", C: "gb6!2 ab6@2 b6@2 ab6@2", D: "ab6 gb6 eb6@2 ~@4", E: "eb6 ~ eb6 ~ eb6 ~ eb6 ~",
  F: "db6 ~ db6 ~ db6 ~ db6 ~", G: "e6 ~ e6 ~ e6 ~ e6 ~",
})).s("gm_piccolo").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<~@14 A B ~@8 C D E F C D E G H ~@7 C D E F C D E I H>".pickRestart({
  A: "~@2 db5@4 db5 eb5", B: "b4 ab4!2 ~", C: "eb5!2 db5@2 eb5@2 ab5@2", D: "eb5 db5@2 ~", E: "~ ab5 ab5@2 ab5@2 ab5@2",
  F: "db6 b5 bb5 ab5", G: "db6 b5 ~@2", H: "ab5 ~@3", I: "db6 b5 bb5 a5",
})).s("gm_clarinet").gain(0.5)

// other · clarinet · "B♭ Clarinet" · soft notes
const clarinet_soft = note("<~ A B C D A B C E F G H E F ~@35>".pickRestart({
  A: "~ b5@3", B: "ab5 ~@3", C: "gb5!2 ab5@2 b5@2 ab5@2", D: "ab5 gb5 eb5@2 ~@4", E: "eb4@2 db4@2 b3@2 ab3!2",
  F: "eb4 db4@2 db4 ~ ab3!3", G: "~@2 db4@4 db4 eb4", H: "b3@2 bb3@2 bb3@2 ab3!2",
})).s("gm_clarinet").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@14 A B ~@8 C D E F C D E G H ~@7 C D E F C D E I J>".pickRestart({
  A: "~@2 db5@4 db5 eb5", B: "b4 ab4!2 ~", C: "eb4!2 db4@2 eb4@2 ab4@2", D: "eb4 db4@2 ~", E: "~ ab4 ab4@2 ab4@2 ab4@2",
  F: "db5 b4 bb4 ab4", G: "db5 b4 ~@2", H: "ab4 ~@3", I: "db5 b4 bb4 a4", J: "[ab4,c5] ~@3",
})).s("gm_alto_sax").gain(0.5)

// other · alto sax · "Alto Saxophone" · soft notes
const alto_sax_soft = note("<A B C D A B C E F G H I F G ~@35>".pickRestart({
  A: "[ab3,c4]!2", B: "[gb3,b3]!2", C: "[gb3,bb3]!2", D: "[ab3,b3]!2", E: "~@2 eb4@3 eb4!3",
  F: "eb4@2 db4@2 b3@2 ab3!2", G: "eb4 db4@2 db4 ~ ab3!3", H: "~@2 db4@4 db4 eb4", I: "b3@2 bb3@2 bb3@2 ab3!2",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@14 A B ~@8 C D E F C D E G H ~@7 C D E F C D E I J>".pickRestart({
  A: "~@2 db4@4 db4 eb4", B: "b3 ab3!2 ~", C: "eb4!2 db4@2 eb4@2 ab4@2", D: "eb4 db4@2 ~", E: "~ ab3 ab3@2 ab3@2 ab3@2",
  F: "db4 b3 bb3 ab3", G: "db4 b3 ~@2", H: "ab4 ~@3", I: "db4 b3 bb3 a3", J: "ab3 ~@3",
})).s("gm_tenor_sax").gain(0.5)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note("<A B@2 A@2 B@2 A C D@2 C@2 D ~@35>".pickRestart({
  A: "ab3!2", B: "gb3!2", C: "ab3 ~ ab3 ~ ab3 ~ ab3 ~", D: "gb3 ~ gb3 ~ gb3 ~ gb3 ~",
})).s("gm_tenor_sax").gain(0.3)

// chords · french horn · "Horn in F"
const french_horn = note("<A B C D A B C D E F G H E F I J ~@8 K L M N K L M O P ~@7 K L M N K L M Q R>".pickRestart({
  A: "[c4,eb4]!2", B: "[b3,db4]!2", C: "[bb3,db4]!2", D: "[b3,e4]!2", E: "[c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~",
  F: "[b3,db4] ~ [b3,db4] ~ [b3,db4] ~ [b3,db4] ~", G: "[bb3,db4] ~ [bb3,db4] ~ [bb3,db4] ~ [bb3,db4] ~",
  H: "[b3,e4] ~ [b3,e4] ~ [b3,e4] ~ [b3,e4] ~", I: "~@2 db4@4 db4 eb4", J: "b3 ab3!2 ~", K: "eb4!2 db4@2 eb4@2 ab4@2",
  L: "eb4 db4@2 ~", M: "~ ab4 ab4@2 ab4@2 ab4@2", N: "db4 b3 bb3 ab3", O: "db4 b3 ~@2", P: "ab4 ~@3",
  Q: "db4 b3 bb3 a3", R: "[ab3,eb4] ~@3",
})).s("gm_french_horn").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@14 A B ~@8 C D E F C D E F G ~@7 C D E F C D E H I>".pickRestart({
  A: "~@2 db5@4 db5 eb5", B: "b4 ab4!2 ~", C: "eb5!2 db5@2 eb5@2 ab5@2", D: "eb5 db5@2 ~", E: "~ ab4 ab4@2 ab4@2 ab4@2",
  F: "db5 b4 ~@2", G: "ab5 ~@3", H: "db5 b4 bb4 a4", I: "ab4 ~@3",
})).s("gm_trumpet").gain(0.5)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~ A B C D A B C E F@2 G E F ~@35>".pickRestart({
  A: "~ b4@3", B: "ab4 ~@3", C: "gb4!2 ab4@2 b4@2 ab4@2", D: "ab4 gb4 eb4@2 ~@4", E: "eb5 ~ eb5 ~ eb5 ~ eb5 ~",
  F: "db5 ~ db5 ~ db5 ~ db5 ~", G: "b4 ~ b4 ~ b4 ~ b4 ~",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note("<~@14 A B ~@8 C D E F C D E F G ~@7 C D E F C D E H G>".pickRestart({
  A: "~@2 db5@4 db5 eb5", B: "b4 ab4!2 ~", C: "eb5!2 db5@2 eb5@2 ab5@2", D: "eb5 db5@2 ~", E: "~ ab4 ab4@2 ab4@2 ab4@2",
  F: "db5 b4 ~@2", G: "ab4 ~@3", H: "db5 b4 bb4 a4",
})).s("gm_trumpet").gain(0.5)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft_2 = note("<~ A B C D A B C E F G H E F ~@35>".pickRestart({
  A: "~ b4@3", B: "ab4 ~@3", C: "gb4!2 ab4@2 b4@2 ab4@2", D: "ab4 gb4 eb4@2 ~@4", E: "c5 ~ c5 ~ c5 ~ c5 ~",
  F: "b4 ~ b4 ~ b4 ~ b4 ~", G: "bb4 ~ bb4 ~ bb4 ~ bb4 ~", H: "ab4 ~ ab4 ~ ab4 ~ ab4 ~",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet_3 = note("<~@14 A B ~@8 C D E F C D E F G ~@7 C D E F C D E H G>".pickRestart({
  A: "~@2 db5@4 db5 eb5", B: "b4 ab4!2 ~", C: "eb4!2 db4@2 eb4@2 ab4@2", D: "eb4 db4@2 ~", E: "~ ab4 ab4@2 ab4@2 ab4@2",
  F: "db5 b4 ~@2", G: "ab4 ~@3", H: "db5 b4 bb4 a4",
})).s("gm_trumpet").gain(0.5)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft_3 = note("<~ A B C D A B C E F@2 G E F ~@35>".pickRestart({
  A: "~ b4@3", B: "ab4 ~@3", C: "gb4!2 ab4@2 b4@2 ab4@2", D: "ab4 gb4 eb4@2 ~@4", E: "ab4 ~ ab4 ~ ab4 ~ ab4 ~",
  F: "gb4 ~ gb4 ~ gb4 ~ gb4 ~", G: "e4 ~ e4 ~ e4 ~ e4 ~",
})).s("gm_trumpet").gain(0.3)

// chords · brass section · "Trombone"
const brass_section = note("<~@15 A B C D E B C F E G H I J G H ~ K L ~@7 M H N J M H O P Q>".pickRestart({
  A: "~@5 ab3!3", B: "db4 eb4!2 db4 eb4@2 ~@2", C: "b3 db4!2 b3 db4@2 ~@2", D: "b3 db4!2 b3 db4@2 db4 b3",
  E: "db4 b3 db4 eb4 db4 b3 ab3@2", F: "b3 db4!2 b3 db4 b3 db4 b3", G: "[c4,eb4]@2 ~ [c4,eb4]",
  H: "~@2 [b3,db4]@3 [b3,db4] ~@2", I: "[bb3,db4]@2 ~ [bb3,db4]", J: "~@2 [b3,e4]@3 [b3,e4] ~@2",
  K: "~@4 [b3,e4]!2 ~ [b3,e4]", L: "[c4,eb4] ~@3", M: "[c4,eb4]@3 [c4,eb4]", N: "[bb3,db4]@3 [bb3,db4]",
  O: "~ ab3 ab3@2 ab3@2 ab3@2", P: "db4 b3 bb3 a3", Q: "[ab3,c4] ~@3",
})).s("gm_brass_section").gain(0.5)

// chords · brass section · "Trombone" · soft notes
const brass_section_soft = note("<A B C D A B C E F G H I F G ~@35>".pickRestart({
  A: "[c4,eb4]!2", B: "[b3,db4]!2", C: "[bb3,db4]!2", D: "[b3,e4]!2", E: "~@2 eb4@3 eb4!3", F: "eb4@2 db4@2 b3@2 ab3!2",
  G: "eb4 db4@2 db4 ~ ab3!3", H: "~@2 db4@4 db4 eb4", I: "b3@2 bb3@2 bb3@2 ab3!2",
})).s("gm_brass_section").gain(0.3)

// other · synth brass 1 · "Euphonium"
const synth_brass_1 = note("<~@15 A B C D E B C F E G@2 H I J K H I L ~@7 G@2 H I J K H M N>".pickRestart({
  A: "~@5 ab3!3", B: "db4 eb4!2 db4 eb4@2 ~@2", C: "b3 db4!2 b3 db4@2 ~@2", D: "b3 db4!2 b3 db4@2 db4 b3",
  E: "db4 b3 db4 eb4 db4 b3 ab3@2", F: "b3 db4!2 b3 db4 b3 db4 b3", G: "[~@6 ab4@3 ~@7]/2",
  H: "~ ab3 ab3@2 ab3@2 ab3@2", I: "db4 b3 ~@2", J: "eb4!2 db4@2 eb4@2 ~@2", K: "eb4 db4@2 ~", L: "[ab3,ab4] ~@3",
  M: "db4 b3 bb3 a3", N: "ab3 ~@3",
})).s("gm_synth_brass_1").gain(0.5)

// other · synth brass 1 · "Euphonium" · soft notes
const synth_brass_1_soft = note("<A@2 B C A@2 B D E F G H E F ~@35>".pickRestart({
  A: "eb3!2", B: "db3!2", C: "e3!2", D: "~@2 eb4@3 eb4!3", E: "eb4@2 db4@2 b3@2 ab3!2", F: "eb4 db4@2 db4 ~ ab3!3",
  G: "~@2 db4@4 db4 eb4", H: "b3@2 bb3@2 bb3@2 ab3!2",
})).s("gm_synth_brass_1").gain(0.3)

// bass · tuba
const bass = note("<~@15 A B C D E B C D E B C D E B C ~ F B C D E B C D E B C D E B C ~ G H>".pickRestart({
  A: "~ eb3 db3 b2", B: "ab2@2 ~ ab2", C: "~@2 b2@2 ~ b2 b2@2", D: "gb2@2 ~ gb2", E: "~@2 e2@2 ~ e2@3",
  F: "~@4 eb3 db3 b2 bb2", G: "db3 b2 bb2 a2", H: "ab2 ~@3",
})).s("gm_tuba").gain(0.5)

// bass · tuba · soft notes
const bass_soft = note("<A B C D A B C D E F G H E I ~@35>".pickRestart({
  A: "ab2!2", B: "b2!2", C: "gb2!2", D: "e2!2", E: "ab2 ~@2 ab2 ~@2 ab2!2", F: "~@2 b2 ~@2 b2 b2@2",
  G: "gb2 ~@2 gb2 ~@2 gb2!2", H: "~@2 e2 ~@2 e2 e2@2", I: "~@2 b2@2 ~ b2 b2@2",
})).s("gm_tuba").gain(0.3)

stack(
  piccolo, piccolo_soft, clarinet, clarinet_soft, alto_sax, alto_sax_soft, tenor_sax, tenor_sax_soft, french_horn,
  trumpet, trumpet_soft, trumpet_2, trumpet_soft_2, trumpet_3, trumpet_soft_3, brass_section, brass_section_soft,
  synth_brass_1, synth_brass_1_soft, bass, bass_soft
)