Strudelify

How Far I'll Go

Lin-Manuel Miranda

KeyA♭ majorTempo92 bpm
0:00/0:00
// How Far I'll Go — Lin-Manuel Miranda
// 92 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4512276; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 46 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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 · flute
const flute = note("<~ A B C@2 D E F G H I J K ~@8 L M@2 N L M O P H I Q R S T U V W X U Y Z@2 AA AB ~>".pickRestart({
  A: "ab4@15 ~", B: "bb4@15 ~", C: "~@6 ab4@9 ~", D: "ab4 eb5", E: "bb4 eb5", F: "f5@2 ab5 g5", G: "f5@11 ~@3 f5 eb5",
  H: "f5@2 ab5@2 ab5@2 f5 eb5 f5@2 ab5@2 ab5@2 f5 eb5", I: "f5@2 bb5@2 bb5@2 f5 eb5 f5@2 bb5@2 bb5@2 ab5 g5",
  J: "ab5@2 c6@2 c6@2 ab5 f5 ab5@2 c6@2 c6@2 bb5 c6", K: "db6 ab5 e5 ~",
  L: "eb5 ~ eb5 ~ eb5 ~ eb5 ~ eb5 ~ eb5 ~ eb5 ~ eb5 ~", M: "f5 ~ f5 ~ f5 ~ f5 ~ f5 ~ f5 ~ f5 ~ f5 ~",
  N: "f5 ~ f5 ~ f5 ~ f5 ~ f5 ~ f5 ~ f5@4", O: "ab5 ~ ab5 ~ ab5 ~ ab5 ~ ab5 ~ ab5 ~ ab5 ~ ab5 ~",
  P: "ab5 ~ ab5!2 ~ ab5!2 ~ ab5@4 ab5@2 f5 eb5", Q: "ab5@2 c6@2 c6@2 ab5 f5 ab5@2 c6@2 c6@2 eb6@2", R: "e6 b5 b5@2",
  S: "~@14 bb5 c6", T: "d6@2 bb5 c6 d6@2 bb5 c6 d6@4 bb5 ~ f6@2", U: "c6@2 c6@6 ~@2 bb5 ~ f6 g6@3",
  V: "d6@6 c6@6 f6 g6@3", W: "d6@6 c6@6 ~@2 bb5 c6", X: "d6@2 bb5 c6 d6@2 bb5 c6 d6@2 bb5@2 bb5 ~ f6@2",
  Y: "d6@6 c6@4 f5 ~ f5 f6@3", Z: "[f6@29 ~@3]/2", AA: "f6@15 ~", AB: "c6",
})).s("gm_flute").gain(0.3)

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

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~ A@2 B C A@2 B D E@2 F D A G B@2 A G B C H I H J H I H K L M N O ~ P@2 Q R P@2 S T U B@2 ~
>`.pickRestart({
  A: "eb3", B: "f3", C: "ab3", D: "ab3@7 ~", E: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~",
  F: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~", G: "eb3@3 eb3", H: "ab3@3 ab3@3 ab3@10",
  I: "bb3@3 bb3@3 bb3@10", J: "ab3@6 ab3@6 ab3!4", K: "ab3@2 ab3!2", L: "ab3 f3!2 ab3", M: "g3 bb2 eb3 g3",
  N: "ab3 eb3 ab3 c4", O: "db4", P: "f3@6 f3 ~ f3@4 f3@4", Q: "g3@6 g3 ~ f3@4 f3@4", R: "f3@3 ~ eb3@2 g3@2",
  S: "g3@3 f3@3 f3@2", T: "f3@3 f3", U: "f3@4 f3@3 ~",
})).s("gm_tenor_sax").gain(0.3)

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

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~ A B C D E F G H ~@3 I J K L M N K O P Q ~@3 R S T@2 U V W X Y Z AA AB AC AD AA AE AF@2 AG AH ~
>`.pickRestart({
  A: "ab4@3 eb4@3 ab4@3 eb4@3 ab4@2 ab4 eb4", B: "bb4@3 f4@3 bb4@3 f4@3 bb4@2 ab4 bb4",
  C: "c5@3 c5@5 c5@2 c5@2 c5 bb4 ab4 g4", D: "f4@7 ~", E: "ab4@3 eb4@5 ~@2 ab4@2 ab4@2 ab4 eb4",
  F: "bb4@3 f4@5 bb4 ab4 bb4@2 bb4@2 ab4 bb4", G: "c5@3 c5@5 c5@2 c5@2 c5@2 ab4@2", H: "ab4@7 ~", I: "~@14 ab4 bb4",
  J: "c5@2 ab4 bb4 c5@2 ab4 bb4 c5@4 ab4 ~ eb5@2", K: "bb4@2 bb4@6 ~@2 ab4 ~ eb5 f5@3", L: "c5@6 bb4@6 eb5 f5@3",
  M: "c5@6 bb4@6 ~@2 ab4 bb4", N: "c5@2 ab4 bb4 c5@2 ab4 bb4 c5@2 ab4@2 ab4 ~ eb5@2", O: "c5@6 bb4@6 ~@2 bb4 c5",
  P: "db5@2 ab4@2 ab4@2 e4@2 e4 eb4!2 ~ eb4@2 ab4 ~", Q: "ab4 ~@7", R: "ab4@3 eb4@3 ab4@3 eb4@3 ab4 eb4 ab4 eb4",
  S: "bb4@3 f4@3 bb4@3 f4@3 bb4 ab4 bb4 ab4", T: "[c5@3 c5@5 c5!4 c5@2 ab4 ab4@15 ~@2]/2", U: "f4 c4!2 f4",
  V: "eb4 bb3!2 eb4", W: "eb4 c4 eb4 ab4", X: "ab4", Y: "~@14 bb4 c5", Z: "d5@2 bb4 c5 d5@2 bb4 c5 d5@4 bb4 ~ f5@2",
  AA: "c5@2 c5@6 ~@2 bb4 ~ f5 g5@3", AB: "d5@6 c5@6 f5 g5@3", AC: "d5@6 c5@6 ~@2 bb4 c5",
  AD: "d5@2 bb4 c5 d5@2 bb4 c5 d5@2 bb4@2 bb4 ~ f5@2", AE: "d5@6 c5@4 f4 ~ f4 f5@3", AF: "[f5@15 ~]/2", AG: "f5",
  AH: "c6",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  ~ A B C D E F G H I J K L A M N O A M P B Q R S@2 Q R T@2 U V W X Y Z@2 AA AB Z@2 AC AD AE P AF ~
>`.pickRestart({
  A: "ab4", B: "bb4", C: "eb4@3 bb4@13", D: "eb4@3 g4@3 c5@10", E: "g4 db5", F: "ab4 db5", G: "bb4@2 eb5 db5",
  H: "db5@2 eb5@5 ~", I: "bb4 eb5", J: "eb5 db5", K: "db5 g4", L: "ab4@7 ~", M: "bb4@3 bb4", N: "c5 bb4", O: "db5",
  P: "c5", Q: "ab4@3 eb4@3 ab4@3 eb4@3 ab4 eb4 ab4 eb4", R: "bb4@3 f4@3 bb4@3 f4@3 bb4 ab4 bb4 ab4",
  S: "[c5@3 c5@5 c5!4 c5@2 ab4 ab4@15 ~@2]/2", T: "[c5@3 c5@5 c5!4 c5@2 ab4 ab4@15 f4 eb4]/2",
  U: "f4@2 ab4@2 ab4@2 f4 eb4 f4@2 ab4@2 ab4@2 f4 eb4", V: "f4@2 bb4@2 bb4@2 f4 eb4 f4@2 bb4@2 bb4@2 ab4 g4",
  W: "ab4@2 c5@2 c5@2 ab4 f4 ab4@2 c5@2 c5@2 eb5@2", X: "e5 b4 b4@2", Y: "~@7 bb4",
  Z: "[bb4@2 bb4@2 bb4@2 bb4@2 bb4@4 bb4 ~ bb4@4 bb4@6 ~@2 bb4 ~ c5@4]/2", AA: "bb4@2 a4 c5", AB: "bb4@3 bb4@3 ~ bb4",
  AC: "bb4@6 bb4@4 f4 ~ f4@4", AD: "db5@3 db5", AE: "db5@4 db5@3 ~", AF: "f5",
})).s("gm_trumpet").gain(0.3)

// chords · piano
const piano = note(`<
  ~ A B C D E F G H I J K L M N O P M N Q R S T U V S T W X Y Z AA AB ~ AC AD AE AF AG AD AH AI AJ AK AL ~
>`.pickRestart({
  A: "[ab2,eb3,ab3,eb4,ab4]@15 ~", B: "[bb2,eb3,bb3,eb4,bb4]@15 ~", C: "~@3 c4@3 [f4,ab4]@9 ~, [f3,ab3]@15 ~",
  D: "~@3 ab3@3 [eb4,ab4]@9 ~, [db3,f3]@15 ~", E: "ab4 eb5, [ab2,eb3]@15 ~", F: "bb4 eb5, [bb2,eb3]@15 ~",
  G: "f5@2 ab5 g5, [f3,ab3]@15 ~", H: "[db3,f3,f5]@13 ~@3",
  I: "[ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~, [f2,ab2]@15 ~", // Ab Fm
  J: "[bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~, [g2,bb2]@15 ~", // Eb5 Gm
  K: "[ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~ [ab3,c4] ~, [ab2,c3]@15 ~", // Ab
  L: "[bb2,db3,bb3,db4]@13 ~@3", M: "[ab2,ab3,eb4,ab4]@15 ~", N: "[eb4,ab4]@11 ~ [eb4,g4]@4, [eb2,eb3]@15 ~",
  O: "[f4,ab4] [f4,g4], [f2,f3]@15 ~", P: "[db2,db3]@11 ~ [db2,db3]@4, [f4,ab4]@15 ~", Q: "[f2,f3,f4,ab4]@15 ~",
  R: "[db2,db3,ab4,db5]@15 ~", S: "[ab2,c3,eb4,ab4] ~ [eb4,ab4]!6, ~ [eb4,ab4] ~@6, ~@3 [ab2,c3]@3 [ab2,c3]@9 ~",
  T: "[bb2,eb3,f4,bb4] ~ [f4,bb4]!6, ~ [f4,bb4] ~@6, ~@3 [bb2,eb3]@3 [bb2,eb3]@9 ~", // Bbsus4 Bb5 Eb5
  U: "[ab2,c3,f4,ab4] ~ [f4,ab4]!6, ~ [f4,ab4] ~@6, ~@3 [ab2,c3]@3 [ab2,c3]@9 ~", // Fm Ab
  V: "[f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 [ab2,db3]!4, [ab2,db3]@3 [ab2,db3]@3 [f4,ab4]@2", // Fm Db5 Fm
  W: "[ab2,c3,ab4,c5] ~ [ab4,c5]!6, ~ [ab4,c5] ~@6, ~@3 [ab2,c3]@3 [ab2,c3]@9 ~", // Ab
  X: "[ab4,db5]@2 [ab4,db5]!2 ~ [ab4,db5] [ab4,db5]@2 [ab2,db3,ab4,db5]@4 [ab4,c5]@2 f4 eb4, [ab2,db3]@2 ~ [ab2,c3]", // Db5 Ab Db5 Ab
  Y: "[f2,f3]!2 ~@2 [f4,ab4]@2 [ab4,c5]@2, [c4,ab4] f4 ~@2, ~@6 [f2,f3]@9 ~", // F Fm Ab Fm F
  Z: "[g2,g3]!2 ~@2 [eb4,g4]@2 [bb3,eb4]@2, [g4,bb4] [eb4,bb4] ~@2, ~@6 [g2,g3]@9 ~", // G Eb Eb5 Gm Eb5 G
  AA: "[ab2,ab3]!2 ab3!2 c4@2 [c4,eb4]@2, c4@4 eb4@4 ab3@7 ~, ~@6 ab2@9 ~", AB: "[db2,db3,db4,e4]@15 ~",
  AC: "[d4,g4]@3 [d4,g4] [bb2,d4,g4]@2 [bb2,d4,g4]@2, bb2 ~", // G5 Gm
  AD: "[bb3,c4]@3 [bb3,c4] [f2,bb3,c4]@2 [f2,a3,c4]@2, f2 ~", AE: "[bb3,d4]@3 [bb3,d4] [g2,a3,c4]@2 [f2,a3,c4]@2, g2 ~",
  AF: "[g3,bb3]@6 ~@2 eb2 ~ eb2 ~ eb2 ~ eb2 ~, eb2@2 [g3,bb3] [bb3,eb4]", // Gm Eb5
  AG: "[bb3,d4]@3 [bb3,d4] [bb2,bb3,d4]@2 [bb2,bb3,d4]@2, bb2 ~", // Bb
  AH: "[bb3,d4]@3 ~@3 [bb3,d4]@2, g2 f2, ~@3 [a3,c4]@3 ~@2", AI: "[db2,db3,ab3,db4]@11 ~ [c2,c3,ab3,db4]@4",
  AJ: "[bb1,bb2,bb3,db4]@4 [g2,g3,bb3,db4]@3 ~", AK: "[f2,f3,c4,a4]", AL: "[f2,f3,f4,c5]",
})).s("gm_piano").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<A ~@7 B C@3 D E@2 F G E@2 H C I@3 J I@4 C@3 K L M@7 N O P Q R>".pickRestart({
  A: "x!13 ~@3", B: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x ~@2 x!2 ~@3", D: "x ~@11 x ~ x!2", E: "x ~@2 x ~@3 x",
  F: "x ~@5 x ~@7 x!2", G: "x ~@2 x ~@2 x!2", H: "x ~@5 x ~@5 x ~ x!2", I: "x!8", J: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
  K: "x ~@5 x!2", L: "x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~ x ~", M: "x ~@5 x ~@3 x ~ x!4", N: "x ~ x ~@3 x!5 ~ x ~ x ~",
  O: "x ~ x ~@3 x ~ x ~@5 x!2", P: "x ~ x!2 ~ x!2 ~", Q: "x!2 ~@2 x!2 ~@2 x ~ x!2 ~ x!3", R: "x",
})).gain(0.3)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~ A B C D A B C E ~@37>".pickRestart({
  A: "x ~@2 x ~@2 x ~@7 x ~", B: "x ~@2 x ~@2 x ~@7 x!2", C: "x ~@2 x ~@2 x ~@3 x ~ x ~ x ~", D: "x ~@4 x!3", E: "x",
})).gain(0.2)

// drums · whistle
const whistle = s("ballwhistle:0").struct(`<
  ~@8 A B@3 C ~ A D ~@2 A D E F@2 G H F@2 G I B@3 J ~ F K@2 L F K@2 M D ~ N ~
>`.pickRestart({
  A: "~@14 x!2", B: "x ~ x!2 ~@2 x!3 ~ x!2 ~@2 x!2", C: "x ~@6 x", D: "x", E: "~@8 x!3 ~ x ~ x ~",
  F: "~@3 x!2 ~@4 x!2 ~@2 x ~@2", G: "~@3 x ~ x ~@10", H: "~@3 x!3 ~@3 x!3 ~@4", I: "x ~ x!2 ~ x!2 ~@9",
  J: "x ~@12 x ~@2", K: "~@3 x!2 ~@4 x!2 ~@5", L: "~@3 x!2 ~@4 x!3 ~@4", M: "~@12 x!4", N: "~ x!8 ~ x ~@5",
})).gain(0.39)

// drums · whistle · soft notes
const whistle_soft = s("ballwhistle:0").struct("<~ [x ~@2 x ~@4]!2 [~@3 x] ~ [x ~@2 x ~@4]!2 [~@3 x] ~@38>").gain(0.26)

stack(
  flute, clarinet, tenor_sax, baritone_sax, trumpet, trumpet_2, piano, high_tom, high_tom_soft, whistle, whistle_soft
)