Strudelify

yosemite

Travis Scott

KeyA♭ majorTempo70 bpm
0:00/0:00
// yosemite — Travis Scott
// 70 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 7 "Alto Saxophone" alto sax (copy of ch 8 "Mellophone" french horn); ch 15 "Sousaphone" tuba (copy of ch 14 "Sousaphone" tuba)
// note: Transcription provider: pdmx. https://musescore.com/score/5862912; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 34 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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("<A B C D E F G H I J K L M F ~ N M F ~@7 O P@2 Q O R S E F>".pickRestart({
  A: "~@12 ab7 g7 f7 eb7", B: "c7@6 eb7@2 bb6@4 ab7 g7 f7 eb7", C: "c7@12 eb7@10 d7 db7 c7@12 ab7@3 g7@3 f7@3 eb7@3",
  D: "f7@4 f7@4 [eb7,g7]@6 bb6 c7", E: "db7@2 eb7 db7@2 c7@2 ~ eb7@4 f7@4", F: "f7 ~@3", G: "~@42 ab6 bb6 ~ c7 eb7 ~",
  H: "f7 ~@7",
  I: "eb7@2 eb7@2 eb7@2 eb7@3 ~@3 eb7@2 eb7@2 eb7@2 eb7@3 ~@3 eb7@2 eb7@2 c7@2 eb7@2 eb7@2 c7@2 eb7@2 eb7@2 eb7@2 eb7@3 ~@3",
  J: "f7@3 c7@3 f7@3 g7@3 ab7@3 g7@3 f7@3 eb7@12 ~@3 bb7@2 bb7@2 ab7@2 bb7@2 bb7@2 ab7@2",
  K: "f7@3 ~@3 f7@3 g7@3 ab7@12 [eb7,g7]@12 bb7@2 bb7@2 ab7@2 bb7@2 ab7@2 eb7@2", L: "f7 c7 f7@4 g7 ab7 bb7@6 bb6 c7",
  M: "db7@2 eb7 db7@2 c7@2 ~ gb7@4 f7@4", N: "~@14 bb6 c7",
  O: "~@4 ab6 ~ c7@2 bb6@2 ab6@2 bb6@6 f6@6 ~@4 ab6 ~ c7@2 bb6@2 ab6@2 bb6@6 ~@6", P: "f7@7 ~",
  Q: "~@4 ab7 ~ c8@2 bb7@2 ab7@2 bb7@6 f7@6 ~@4 ab7 ~ c8@2 bb7@2 ab7@2 bb7@6 ~@6", R: "f7@14 c7 eb7", S: "f7@14 bb6 c7",
})).s("gm_piccolo").gain(0.22)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@25
  [~@4 ab5 ~ c6@2 bb5@2 ab5@2 bb5@6 f5@6 ~@4 ab5 ~ c6@2 bb5@2 ab5@2 bb5@6 ~@6]
  [f5@7 ~]!2
  [~@4 ab5 ~ c6@2 bb5@2 ab5@2 bb5@6 f5@6 ~@4 ab5 ~ c6@2 bb5@2 ab5@2 bb5@6 ~@6]!2
  [f5@14 c5 eb5]
  [f5@14 bb4 c5]
  [db5@2 eb5 db5@2 c5@2 ~ eb5@4 f5@4]
  [f5 ~@3]
>`).s("gm_trumpet").gain(0.36)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note("<~@2 A B C D E F G H I J K D ~ L K D ~@7 M N@2 M@2 O P C D>".pickRestart({
  A: "~@12 ab5 g5 f5 eb5", B: "f5@4 [ab4,db5,f5]@4 [bb4,eb5,g5]@6 bb4 c5", C: "db5@2 eb5 db5@2 c5@2 ~ eb5@4 f5@4",
  D: "f5 ~@3", E: "~@42 ab4 bb4 ~ c5 eb5 ~", F: "f5 ~@7",
  G: "eb5@2 eb5@2 eb5@2 eb5@3 ~@3 eb5@2 eb5@2 eb5@2 eb5@3 ~@3 eb5@2 eb5@2 c5@2 eb5@2 eb5@2 c5@2 eb5@2 eb5@2 eb5@2 eb5@3 ~@3",
  H: "f5@3 c5@3 f5@3 g5@3 ab5@3 g5@3 f5@3 eb5@12 ~@3 bb5@2 bb5@2 ab5@2 bb5@2 bb5@2 ab5@2",
  I: "f5@3 ~@3 f5@3 g5@3 ab5@12 [eb5,g5]@12 bb5@2 bb5@2 ab5@2 bb5@2 ab5@2 eb5@2", J: "f5 ~ f5@4 g5 ab5 bb5@5 ~ bb4 c5",
  K: "db5@2 eb5 db5@2 c5@2 ~ gb5@4 f5@4", L: "~@14 bb4 c5",
  M: "~@4 ab4 ~ c5@2 bb4@2 ab4@2 bb4@6 f4@6 ~@4 ab4 ~ c5@2 bb4@2 ab4@2 bb4@6 ~@6", N: "f5@7 ~", O: "f5@14 c5 eb5",
  P: "f5@14 bb4 c5",
})).s("gm_trumpet").gain(0.4)

// other · french horn · "Mellophone"
const french_horn = note("<~@2 A B C D E F G H I J K D ~ L K D ~@7 M N@2 O@2 P Q R D>".pickRestart({
  A: "~@6 c5 eb5", B: "f5@4 eb5@4 c5@4 ~@2 bb4 c5", C: "db5@2 eb5 db5@2 c5@2 ~@3 c5@2 f5@4", D: "f5 ~@3",
  E: "~@42 ab4 bb4 ~ c5 eb5 ~", F: "f5 ~@7",
  G: "eb4@2 eb4@2 eb4@2 eb4@3 ~@3 eb4@2 eb4@2 eb4@2 eb4@3 ~@3 eb4@2 eb4@2 c4@2 eb4@2 eb4@2 c4@2 eb4@2 eb4@2 eb4@2 eb4@3 ~@3",
  H: "c5 bb4 ab4 f4@3 ~@6 c5 bb4 ab4 f4@3 bb4@3 db5@3", I: "c5@2 bb4@2 ab4@2 f4@6 ~@6 c5@3 eb5@9 ab4@6 g4@6 c5@3 eb5@3",
  J: "f5 c5 f5@4 ~@2 c5 bb4 [g4,eb5]@4 bb4 c5", K: "db5@2 eb5 db5@2 c5@2 ~@3 c5@2 f5@2 c5 eb5", L: "~@14 bb4 c5",
  M: "f4@4 g4@3 ~", N: "f5@7 ~", O: "~@4 ab4 ~ c5@2 bb4@2 ab4@2 bb4@6 f4@6 ~@4 ab4 ~ c5@2 bb4@2 ab4@2 bb4@6 ~@6",
  P: "f5@14 c5 eb5", Q: "f5@6 c5@2 eb5@6 bb4 c5", R: "db5@2 eb5 db5@2 c5@2 ~ eb5@4 f5@2 c5 eb5",
})).s("gm_french_horn").gain(0.64)

// other · french horn · "Mellophone" · soft notes
const french_horn_soft = note("<[~@12 ab4 g4 f4 eb4] [c5@4 bb4@4 bb4@4 ab4 g4 f4 eb4] [c5@2 bb4@2 c5 ~@3] ~@31>")
  .s("gm_french_horn").gain(0.32)

// chords · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~ A B C D E ~@2 F G H I J ~@3 K L ~@7 M N O P Q R S T E>".pickRestart({
  A: "c4 bb3 c4@2", B: "c4@4 bb3@2 f4@2 eb4@2 ~@2 ab4 g4 f4 eb4", C: "[c4,f4] [bb3,eb4] ~ [f4,ab4]",
  D: "db4@6 ~@2 gb4@4 ~@2 c4 eb4", E: "f4 ~@3",
  F: "eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 eb3@2 eb3@3 ~@3",
  G: "[f3,ab3]@4 [g3,bb3]@3 ~", H: "[c4,f4]@8 [bb3,eb4]@6 c4 eb4",
  I: "f4@6 ~@6 [f4,ab4]@9 [eb4,g4] [f4,ab4] ~ [eb4,g4]@12 [c4,eb4]@12", J: "[db4,f4]@4 [db4,gb4]@3 ~",
  K: "db4@2 eb4 db4@2 c4@2 ~ [gb3,bb3]@8", L: "[ab3,f4] ~@3", M: "[c4,f4]@4 [bb3,eb4]@3 ~",
  N: "f4@2 ~ ab4 g4@2 ~ ab4 g4@2 ~ ab4 g4@2 ~@2", O: "db4@4 [c4,eb4]@3 ~", P: "[db4,f4]@8 [db4,gb4]@6 c4 eb4",
  Q: "f4@2 ~ [f4,ab4] [eb4,g4]@3 ~", R: "f4@2 ~ [f4,ab4] [eb4,g4]@2 ~ [f4,ab4] [eb4,g4]@2 ~ [f4,ab4] [eb4,g4]@2 ~@2",
  S: "[ab3,db4]@4 bb3@2 ab3 ~, ~@4 f3@3 ~", T: "[db4,f4]@3 ~ gb4 c4 f4@2",
})).s("gm_tenor_sax").gain(0.4)

// other · tuba · "Euphonium"
const tuba = note("<~ A B C D E ~@2 F G H I J E ~@2 J E ~@7 K L M N O P Q R E>".pickRestart({
  A: "c4 bb3 c4@2", B: "c4@4 bb3@2 f4@2 eb4@2 ~@2 ab4 g4 f4 eb4", C: "[c4,f4] [bb3,eb4] ~ [f4,ab4]",
  D: "db4@6 ~@2 gb4@4 ~@2 c4 eb4", E: "f4 ~@3",
  F: "eb4@2 eb4@2 eb4@2 eb4@3 ~@3 eb4@2 eb4@2 eb4@2 eb4@3 ~@3 eb4@2 eb4@2 c4@2 eb4@2 eb4@2 c4@2 eb4@2 eb4@2 eb4@2 eb4@3 ~@3",
  G: "f4@3 ~@3 bb4!6 ~@6 bb4!2 ab4 bb4@3", H: "f4@2 ~@2 ab4 g4 f4 ~ g4@4 ~@2 c4 eb4, ~@7 eb4@5 ~@4",
  I: "f4@6 ~@6 [f4,ab4]@9 [eb4,g4] [f4,ab4] ~ [eb4,g4]@12 [c4,eb4]@12", J: "db4@2 eb4 db4@2 c4@2 ~ gb4@4 f4@4",
  K: "f4@3 [ab4,c5] [g4,bb4]@3 ~", L: "f4@2 ~ ab4 g4@2 ~ ab4 g4@2 ~ ab4 g4@2 ~@2",
  M: "f4@2 ~ ab4 g4@2 ~ ab4 g4@2 ~ ab4 g4 f4 ~@2", N: "db4@6 ~@2 bb4@4 ~@2 c4 eb4",
  O: "f4@4 ~@2 [f4,ab4]@2 [eb4,g4]@3 [c4,eb4]@3 ~@2", // Fm Eb Cm
  P: "f4@2 ~ [f4,ab4] [eb4,g4]@2 ~ [f4,ab4] [eb4,g4]@2 ~ [f4,ab4] [eb4,g4]@2 ~@2", // Fm Eb Fm Eb Fm Eb
  Q: "f4@2 ~ [f4,ab4] [eb4,g4]@2 ~@2 [g4,bb4]@3 [f4,ab4]@3 ~@2", R: "[db4,f4]@3 ~ gb4 c4 f4@2",
})).s("gm_tuba").gain(0.4)

// other · trombone
const trombone = note("<~ A B C D E F E G H I J D K L M N O ~@7 I P Q D R S T U V>".pickRestart({
  A: "c4!2", B: "c4 eb4 [c4,eb4]@2", C: "f4 [db4,f4] [c4,eb4]@2", D: "[db4,f4]@4 [db4,gb4]@3 ~",
  E: "f3@2 f3@2 f3@2 f3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3",
  F: "eb3@2 eb3@2 c3@2 eb3@4 c3 ~ eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 eb3@2 eb3@3 ~@3",
  G: "eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 eb3@2 eb3@3 ~@3",
  H: "[db4,f4]@4 [eb4,g4]@3 ~", I: "[c4,f4]@4 [bb3,eb4]@3 ~", J: "[db4,f4]@2 [eb4,g4] [c4,eb4]",
  K: "~@3 ab3@3 c4@3 eb4 f4@8 c4@6 ~@3 c4@3 eb4@3 f4 g4@8 eb4@6",
  L: "~@3 ab3@3 c4@3 eb4 f4@8 c4@6 ~@6 f4@3 eb4@9 [c4,eb4]!2 ~@4", // Cm
  M: "~@3 ab3@3 c4@3 eb4 f4@8 c4@6 ~@3 c4@3 eb4@3 f4 g4@8 ~@6", N: "[db4,f4]@6 [db4,f4] ~ [db4,gb4]@8",
  O: "[c4,f4] ~@3", P: "db4@2 eb4@2 [c4,eb4]@3 ~", Q: "db4@4 [c4,eb4]@3 ~", R: "[c4,f4]@4 [eb4,g4]@3 ~",
  S: "f4@2 [c4,eb4]@2 [c4,eb4]@3 ~", T: "f4@4 [c4,eb4]@3 ~", U: "[db4,f4]@6 [db4,f4] ~ gb4@4 f4@4, ~ db4", V: "f4 ~@3",
})).s("gm_trombone").gain(0.4)

// chords · trombone
const trombone_2 = note("<~ A B C D E F E G H I J D K L M N O ~@7 I P Q D H R S T U>".pickRestart({
  A: "[f3,ab3] [eb3,g3] [f3,ab3]@2", B: "[f3,ab3] [g3,bb3] [f3,ab3]@2", C: "[ab3,db4] [ab3,bb3] [f3,ab3]@2",
  D: "[ab3,bb3]@4 [gb3,bb3]@3 ~", // Absus2 Gb
  E: "f3@2 f3@2 f3@2 f3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3",
  F: "eb3@2 eb3@2 c3@2 eb3@4 c3 ~ eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 eb3@2 eb3@3 ~@3",
  G: "eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 eb3@2 eb3@3 ~@3 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 c3@2 eb3@2 eb3@2 eb3@2 eb3@3 ~@3",
  H: "[f3,ab3]@4 [g3,bb3]@3 ~", I: "[f3,ab3]@4 [eb3,g3]@3 ~", J: "[f3,ab3]@2 [g3,c4] [g3,bb3]",
  K: "[f3,ab3,db4]@3 ~ [g3,bb3,eb4]@3 ~", L: "[f3,ab3,c4]@18 ~@6 eb4@3 db4@3 c4@3 [bb3,c4]@9 [g3,bb3]!2 ~@4",
  M: "[f3,ab3,c4]@3 ~ [g3,bb3,eb4]@3 ~", N: "[ab3,bb3]@6 [f3,bb3] ~ [gb3,bb3]@8", O: "[f3,ab3] ~@3",
  P: "[f3,ab3]@2 [g3,bb3]@2 [f3,ab3]@3 ~", Q: "[f3,ab3]@4 bb3@2 ab3 ~, ~@4 f3@3 ~",
  R: "[ab3,db4]@2 [g3,bb3]@2 [f3,ab3]@3 ~", S: "[ab3,db4]@4 bb3@2 ab3 ~, ~@4 f3@3 ~",
  T: "[ab3,bb3]@6 [ab3,bb3] ~ [gb3,bb3]@8", U: "f4 ~@3",
})).s("gm_trombone").gain(0.4)

// bass · tuba · "Sousaphone"
const bass = note("<~@2 A B C D E F E G H I J G H G K L M L N L M L O P Q R S L T U C P>".pickRestart({
  A: "~@8 f2@4 ~@2 f3 eb3", B: "db3@9 c3 db3 ~ eb3@9 c3 ab2 ~ f2@12 f3@3 ~@3 bb2@3 c3@3",
  C: "db3 ab2 db3!2 ~ db3 ~ db3 gb3 db3 gb3!2 ~ ab3 ~ ab3", D: "db3@2 ~ db3@2 ~ f2@2 ~ f2 f2@2 f2@2 ~@2",
  E: "db3@2 ~ db3@2 ~ f2@2 ~ f2 f2@2 f2@2 ab2 bb2", F: "db3@2 ~ db3@2 ~ f2@2 ~ f3 f3@2 f3@2 ~ bb2",
  G: "db2@2 ~ db2@2 ~ f2@2 ~ f2 f2@2 f2@2 ~ ab1", H: "db2@2 ~ db2@2 ~ f2@2 ~ f2 f2@2 f2@2 bb1 c2",
  I: "db2@21 c2 eb2 ~ f2@9 bb2 ab2 ~ f2@12", J: "db2@2 ~ db2@2 ~ db2@2 ~ gb2 gb2@2 gb2@2 ~@2",
  K: "db2@2 ~@7 gb2 gb2@2 gb2@2 bb2 c3", L: "db3@2 ~ db3@2 ~ f2@2 ~ f2 f2@2 f2@2 ~ ab2",
  M: "db3@2 ~ db3@2 ~ f2@2 ~ f3 f3@2 f3@2 bb2 c3", N: "db3@2 ~ db3@2 ~ f2@2 ~ f2 f2@2 f2@2 bb2 c3",
  O: "db3@2 ~ db3@2 ~ f2@2 ~ f3 f3@2 f3@2 ~@2", P: "f3 ~@3", Q: "~@14 bb1 c2",
  R: "db2@18 ~@3 bb2 ab2 ~ f2@12 f3@6 bb2@3 c3@3",
  S: "db3@3 ab2@3 db3@3 db3@3 ~@3 db3@3 ~@3 db3@3 gb3@2 gb3@2 gb3@2 gb3@3 ~@3 ab3@2 ab3@2 ab3@2 ab3@3 ~@3",
  T: "db3@2 ~ db3@2 ~ f3@2 ~ f3 f3@2 f3@2 bb2 c3", U: "db3@21 c3 ab2 ~ f2@12 f3@6 bb2@3 c3@3",
})).s("gm_tuba").gain(0.4)

stack(piccolo, trumpet, trumpet_2, french_horn, french_horn_soft, tenor_sax, tuba, trombone, trombone_2, bass)