Strudelify

Summer

Joe Hisaishi

KeyB♭ majorTempo80 bpm
0:00/0:00
// Summer — Joe Hisaishi
// 80 bpm, 4/4, key Bb 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, 2/4 at bar 23, 4/4 at bar 23, 2/4 at bar 45, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5959114; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · trumpet · "B♭ Trumpet 1"
const trumpet = note(`<
  ~@8 A B C D E F E G H@4 I J@2 K@2 L M N O P@2 Q@3 R ~@3 S T U V W X Y@2 Z AA Z AB ~ AC ~@2 Z AD Z AE AF@2 AG@2 AH@3
  ~@7 AI@5 AJ AK AL@4 AM@2
>`.pickRestart({
  A: "c4 bb3 f4 bb3 c4 bb3 f4 bb3", B: "c4 bb3 f4 bb3 c4 bb3 f4 bb4", C: "c5 bb4 f5 bb4 c5 bb4 f5 bb4",
  D: "c5@2 bb4@2 f5@2 bb4@2 c5@4 eb4 ab4 bb4 c5", E: "bb4@2 ab4 ab4@9 eb4 ab4 bb4 c5",
  F: "bb4@2 ab4 bb4@2 c5@2 c5@5 eb4 ab4 bb4 c5", G: "bb4@2 ab4 bb4@2 eb5@2 c5@5 ~@4",
  H: "eb5 ~@3 eb5 ~@3 eb5 ~@2 eb5@2 ~ eb5 ~", I: "ab4", J: "[f4@24 eb4 f4 ab4 f4 ab4@2 ab4@2]/2",
  K: "eb4 f4 ab4 f4 ab4@2 ab4@2 eb4 f4 ab4 f4 ab4@2 ab4@2", L: "eb4 f4 ab4 f4 ab4@2 ab4@2 eb4 f4 ab4 f4 ab4 f4 ab4 f4",
  M: "eb4@2 ~@2 c5@2 db5@2 eb5@2 eb5 eb5@3 eb5@2", N: "eb5@2 c5 ab4@3 c5 db5 eb5@2 eb5 eb5@3 eb5@2",
  O: "eb5@2 c5 ab4@3 ab4 bb4 c5@2 c5 c5@3 c5@2", P: "[c5@4 bb4 [bb4,c5] bb4 f4 ab4@12 ~@8 eb5@2 ~@2]/2",
  Q: "~@2 eb5 ~@3 eb5 ~", R: "~@2 eb5 ~@5", S: "~@8 eb4 ~ bb4 ~ eb5 ~ bb4 ~",
  T: "db4 ~ ab4 ~ db5 ~ ab4 ~ c4 ~ g4 ~ c5 ~ g4 ~", U: "f4 ~ c5 ~ f5 ~ c5 ~ bb3 ~ f4 ~ bb4 ~ f4 ~",
  V: "eb4 ~ bb4 ~ eb5@4 ~@4 ab4@4", W: "g4@3 eb4 c4@4", X: "bb3@2 ~ ab4", Y: "[g4@3 eb4 f4@8 ~ bb3 eb4 f4]/2",
  Z: "g4@6 f4@2 g4@3 ab4@3 bb4@2", AA: "eb4@6 ~ eb4", AB: "c5@3 ~", AC: "f4 eb4", AD: "eb4", AE: "c5@6 c5 d5",
  AF: "[eb5@14 c5 d5]/2", AG: "[eb5@14 eb4 f4]/2", AH: "[g4@4 c4 eb4 g4@4 bb4 g4 eb4@6 ~@6]/3",
  AI: "[~@4 bb4 eb5 f5 g5 f5@2 eb5 eb5@9 bb4 eb5 f5 g5 f5@2 eb5 f5@2 g5@2 g5@5 bb4 eb5 f5 g5 f5@2 eb5 eb5@9 bb4 eb5 f5 g5 f5@2 eb5 f5@2 bb5@2 g5@5 g5@2 ab5@2 bb5@2 bb5 bb5@3 bb5@2]/5",
  AJ: "bb5@2 g5 eb5@3 g5 ab5 bb5@2 bb5 bb5@3 bb5@2", AK: "bb5@2 g5 eb5@3 eb5 f5 g5@2 g5 g5@3 g5@2",
  AL: "[g5@4 f5 [f5,g5] eb5@2 eb5@13 eb5@2 f5@2 ~ g5@2 g5 ~ g5@4 g5@2 g5@5 ~ f5 g5 eb5@3 eb5@16 ~, ~@44 f5 ~@19]/4", // Fsus2
  AM: "[~@4 eb5@21 ~@7]/2",
})).s("gm_trumpet").gain(0.14)

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

// other · trumpet · "B♭ Trumpet 2" · soft notes
const trumpet_soft = note("<~@12 A B A B C@4 ~@10 D E@3 F G H G I ~@2 J@2 K@2 L ~@26 M N@2 O@2 ~@8>".pickRestart({
  A: "~ c4 db4@2", B: "~ eb4@3", C: "~@2 eb4 ~@3 eb4 ~@3 eb4 ~@2 eb4 ~@2", D: "~@5 eb4 ~ eb4",
  E: "~ eb4 ~ eb4 ~ eb4 ~ eb4", F: "~@2 eb4@2 ~@2 eb4@2 ab3@2 ~@2 f4 ~ c4@2",
  G: "f3@2 ~@2 db4 ~ ab3 ~ g3@2 ~@2 eb4 ~ bb3 ~", H: "c4@2 ~@2 ab4 ~ eb4 ~ ab3@2 ~@2 f4 ~ db4 ~",
  I: "c4@2 ~@2 ab4 ~ eb4 ~ ab3@2 ~@6", J: "[~ bb3 c4@4 f4@2]/2", K: "[eb4@8 eb4@16 ~@4 db4 f4 g4 ab4]/2",
  L: "c5@2 bb4 ~", M: "~@3 g4", N: "[ab4@2 ~ bb4@3 ~ g4]/2", O: "[ab4@2 ~ bb4@2 ~@3]/2",
})).s("gm_trumpet").gain(0.11)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~@4 A B A B A B A B ~@4 C D E F G H I J K L M N O P@2 Q R Q S ~@6 T@2 U@2 V W X W Y Z G AA@2 H AB H AC AD AE AD AF
  AG@2 AH@7 AI@2 ~@3 AJ AK AL AM@4 AN@2
>`.pickRestart({
  A: "c4 ab3", B: "bb3 eb3", C: "~ g3@2 f3", D: "~@2 g3@4 f3 eb3", E: "d4 f4@2 c4",
  F: "~@2 f3@2 bb3@2 f3@2 f3@2 g3 g3@5", G: "bb3", H: "g3", I: "g3@4 bb3 eb4 f4 g4 f4 ~ eb4!2 ~@4",
  J: "~@4 bb3 eb4 f4 g4 f4 ~ eb4 f4 ~ g4 ~ g4", K: "~@4 bb3 eb4 f4 g4 f4 ~ eb4!2 ~@4",
  L: "~@4 bb3 eb4 f4 g4 f4 ~ eb4 f4 ~ bb4 ~ g4", M: "~@4 c4@2 db4@2 eb4@2 eb4 eb4@3 eb4@2",
  N: "eb4@2 c4 ab3@3 c4 db4 eb4@2 eb4 eb4@3 eb4@2", O: "eb4@2 c4 ab3@3 ab3 bb3 c4@2 c4 c4@3 c4@2",
  P: "[c4@4 bb3 [bb3,c4] ab3!2 c4@12 ~@4 c4@8]/2", Q: "ab3 bb3", R: "c4!2", S: "c4 ~", T: "[~ g3 eb3@4 ~@2]/2",
  U: "[~@4 eb3 ab3 bb3 c4 bb3@2 ab3 ab3@13 ab3@8]/2", V: "ab3@3 ~", W: "bb3@6 bb3@2 bb3@3 bb3@3 bb3@2",
  X: "bb3@5 ab3 bb3 ~", Y: "c4@3 eb4", Z: "f4@3 f4 d4@4", AA: "[c4@6 c4 d4]/2", AB: "bb3 ab3",
  AC: "~ eb3 ab3 bb3 c4 eb4!2 d4", AD: "c4@3 c4 bb3@2 g3@2", AE: "g3 f3 c4 f3", AF: "ab3@2 g3 f3 g3@2 ~@2",
  AG: "[c4@4 ~@2 bb3@4 ~@3 g3 eb4 bb3]/2", AH: "[g3 ~ g3@3 g3 eb3@3 eb3 f3@3 f3 bb3@3 d4 eb4@4 c4@3 c4 d4@2]/7",
  AI: "[~@2 d4@2 bb3 ~ bb3@6 ~@4]/2", AJ: "g3@4 eb4@2 eb4@2 d4@2 d4 d4@3 d4@2",
  AK: "c4@2 c4 ab3@3 ab3 bb3 d4@2 d4 d4@3 d4@2", AL: "c4@2 c4 g3@3 ~@2 ab3@8",
  AM: "[ab3@4 f3@4 g3@13 ~@5 ab3@10 ab3@5 ~ f3@5 g3@16 ~]/4", AN: "[~@4 f4@21 ~@7]/2",
})).s("gm_french_horn").gain(0.17)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~@12 A B A B ~@18 C D E D F ~@33 G@2 H@2 ~@9>".pickRestart({
  A: "~ ab3@3", B: "~ bb3 c4@2", C: "~@8 f3 ~ c4 ~ f4@2 ~@2", D: "db3 ~ ab3 ~ db4@2 ~@2 eb3 ~ bb3 ~ eb4@2 ~@2",
  E: "ab3 ~ eb4 ~ ab4@2 ~@2 f3 ~ c4 ~ f4@2 ~@2", F: "ab3 ~ eb4 ~ ab4@2 ~@10", G: "[~@3 eb4@3 ~ f3]/2",
  H: "[g3@2 ~ eb3@3 ~ f3]/2",
})).s("gm_french_horn").gain(0.11)

// bass · tuba
const bass = note(`<
  A B A B A B A B A B A B ~@4 C D E F G H I J K J L M N B O ~@3 P@5 ~@2 Q R S R T U V U W X Y Z AA AB AC AB AD AE AD AE
  AF AG@3 AH AI AJ AK AH AI AL@2 ~@3 AM AN AO AP AQ@5
>`.pickRestart({
  A: "f2 db2", B: "eb2 ab1", C: "eb2 db2", D: "c2 f2", E: "bb1 db2", F: "eb2", G: "f2 eb2", H: "db2 eb2",
  I: "c2@8 f2 ~ f2@4 f2 ~", J: "db2 ~ db2@4 db2 ~ eb2 ~ eb2@4 eb2 ~", K: "ab1 ~ ab1@4 ab1 ~ f2 ~ f2@4 f2 ~",
  L: "ab1 ~ ab1@4 ab1 ~ eb2@8", M: "db2 c2", N: "f2 bb1", O: "ab2 ~",
  P: "[~@4 eb2 ab2 bb2 c3 bb2@2 ab2 ab2@9 eb2 ab2 bb2 c3 bb2@2 ab2 bb2@2 c3@2 c3@5 eb2 ab2 bb2 c3 bb2@2 ab2 ab2@9 eb2 ab2 bb2 c3 bb2@2 ab2 bb2@2 eb3@2 c3@5 ~@12]/5",
  Q: "~@4 eb2@4 ab1@2 eb2@2 ab2 ~ eb2 ~", R: "f2@2 c3@2 f3 ~ c3 ~ db2@2 ab2@2 db3 ~ ab2 ~",
  S: "eb2@2 bb2@2 eb3 ~ bb2 ~ ab1@2 eb2@2 ab2 ~ eb2 ~", T: "bb1@3 ~", U: "eb2 eb2@2 eb2", V: "ab1 ab1@2 ab1",
  W: "ab1 ab1@2 ab2", X: "d3 b2", Y: "c3 ~ c2@2", Z: "ab1", AA: "bb1!2", AB: "eb2@3 eb2", AC: "ab1@3 ab1",
  AD: "ab1@6 ab1 bb1", AE: "c2 bb1", AF: "ab1@2 g1 g2", AG: "[ab2@2 ~ bb2@2 ~ eb2@3 ~ c2!2]/3",
  AH: "c2@4 c2 ~ bb1 ~ ab1@4 ab1@4", AI: "ab1@4 ab1 ~ ab1 ~ bb1@4 bb1@4", AJ: "bb1@4 bb1 ~ ab1 ~ g1@4 g1@4",
  AK: "g1@4 g1 ~ bb1 ~ c2@4 c2@4", AL: "[bb1@4 bb1 ~ ab1 ~ g1@4 g1@12 ~@8]/2",
  AM: "~@2 bb2@2 eb3 ~ eb2 ~ bb1@2 f2@2 bb2 ~ f2 ~", AN: "ab1@2 eb2@2 ab2 ~ eb2 ~ g1@2 d2@2 g2 ~ d2 ~",
  AO: "c2@2 g2@2 c3 ~ c2 ~ f2@8", AP: "bb1@4 eb2 bb2 eb3 f3",
  AQ: "[g3@4 ~ g2@5 f2@10 bb1@11 eb2@3 bb2@2 eb3@3 f3@3 g3@5 g3@5 eb3@21 ~@7]/5",
})).s("gm_tuba").gain(0.18)

// bass · tuba · soft notes
const bass_soft = note("<~@12 A B A B ~@56 C D E D F ~@8>".pickRestart({
  A: "f2@2 c3@2 f3 ~ c3 ~ db2@2 ab2@2 db3 ~ ab2 ~", B: "eb2@2 bb2@2 eb3 ~ bb2 ~ ab1@2 eb2@2 ab2 ~ ab1 ~",
  C: "~@8 c2@2 g2@2 c3 ~ g2 ~", D: "ab1@2 eb2@2 ab2 ~ eb2 ~ bb1@2 f2@2 bb2 ~ f2 ~",
  E: "eb2@2 bb2@2 eb3 ~ eb2 ~ c2@2 g2@2 c3 ~ ab2 ~", F: "eb2 ~@7",
})).s("gm_tuba").gain(0.09)

stack(trumpet, trumpet_2, trumpet_soft, french_horn, french_horn_soft, bass, bass_soft)

More by Joe Hisaishi