Strudelify

è¹æ äèåä¹é Boat song (Chinese viola and orchestra)

ç½åä½

KeyC majorTempo72 bpm
0:00/0:00
// è¹æ äèåä¹é Boat song (Chinese viola and orchestra) — ç½åä½
// 72 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/1021931; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 84 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/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.

// chords · flute
const flute = note("<~@4 A B C D E F G H ~@36 I J K L M N O P ~@28>".pickRestart({
  A: "g4@3 a4 g4@2 c5 d5", B: "e5@6 g5@2 e5@3 g5 e5@2 d5@2", C: "c5@3 d5 c5@3 a4", D: "g4",
  E: "[g4,c5]@3 [a4,d5] [g4,c5]@2 [a4,d5] [c5,e5]", F: "[d5,g5]@6 [e5,a5]@2 [d5,g5]@3 [e5,a5] [d5,g5]@2 [c5,e5]@2",
  G: "[a4,d5]@6 [c5,e5]@2 [a4,d5]@2 [c5,e5] [a4,d5] [g4,c5]@2 [e4,a4]@2", H: "[g4,c5]", I: "a5@6 a5 g5",
  J: "a5@6 a5 c6", K: "a5 g5 g5@4 a5 g5", L: "e5", M: "[a5,c6]@6 [a5,c6] [g5,b5]",
  N: "[a5,c6]@3 [g5,b5] [a5,c6]@2 [a5,d6] [c6,e6]", O: "[a5,d6] [g5,c6]@5 [e5,a5] [d5,g5]",
  P: "[e5,g5] [g5,c6] [g5,c6]@6", // Em C5
})).s("gm_flute").gain(0.22)

// chords · orchestral harp · "Harp"
const orchestral_harp = note(`<
  A B A C ~@8 D E F E G H I J D E F E G H I J ~@4 D E F E G H I J D E F E G H I J K@2 L@2 K@2 L@2 D E F E G H I J D E F
  E G H I J M N M O@2 P@2 Q@2 R P S
>`.pickRestart({
  A: "[c4,g4]@4 [g4,c5]@4 [a4,d5]@4 [c5,e5]!8 [a4,d5]!12", B: "[c4,g4]@4 [g4,c5]@4 [a4,d5]@4 [c5,e5]!20",
  C: "[g4,c5]!32", D: "c4 g4 c4 g4", E: "c4@2 g4 e4 ~ g4 a4 g4", F: "c4 g4 d4 g4", G: "d4 g4 g3 g4",
  H: "d4@2 g4 g3 ~ g4 a4 g4", I: "d4 g4 d4 g4", J: "e4@2 g4 e4 ~ g4 g3 g4", K: "a4@3 a4 ~@2 a4@2 ~@2 a4@2 a4@2 ~@2",
  L: "g4@3 g4 ~@2 g4@2 ~@2 g4@2 g4@2 ~@2", M: "~ [d4,g4,b4,d5]@3 ~@28, [g3,b3] ~@7",
  N: "~ [d4,g4,b4,d5]@3 ~@12 g3@4 g4@4 d4@4 b3@4, [g3,b3] ~@7", O: "g4@2 c5 g4 ~ c5 g4@2", P: "g4@2 e5 g4 ~ e5 g4@2",
  Q: "g4@2 d5 g4 ~ d5 g4@2", R: "g4@2 d5 g4 ~ d5!2 g4", S: "c5 ~@3",
})).s("gm_orchestral_harp").gain(0.15)

// other · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~@32 A B A B C D C B A B A B C D C B E@2 F@2 E@2 F@2 A B A B C D C B A B A B C D C B ~@3 G@2 H@2 I J K L M
>`.pickRestart({
  A: "c3@3 c4 g3@2 e3@2 c3@3 c4 g3@2 e3@2", B: "c3@3 c4 g3@2 e3@2 ~@2 g3@2 a3@2 g3@2",
  C: "g2@3 d3 g3@2 d3@2 g2@3 d3 g3@2 b2@2", D: "g2@3 d3 g3@2 b2@2 ~@2 g3@2 a3@2 g3@2",
  E: "[c3,f3,a3]@3 [c3,f3,a3] ~@2 [c3,f3,a3]@2 ~@2 [c3,f3,a3]@2 [c3,f3,a3]@2 ~@2", // F
  F: "[c3,e3,g3]@3 [c3,e3,g3] ~@2 [c3,e3,g3]@2 ~@2 [c3,e3,g3]@2 [c3,e3,g3]@2 ~@2", G: "g3@2 c4 g3 ~ g3 c4 g3",
  H: "c3@3 c4 g3@2 e3@2 ~@2 c3@2 g3@2 g3@2", I: "g2@3 g3 d3@2 b2@2 ~@2 b2@2 d3@2 b2@2",
  J: "g2@3 g3 d3@2 b2@2 ~@2 b2@2 g3@4", K: "g2@3 g3 d3@2 b2@2 ~@2 b2@2 d3@2 g3@2", L: "c3@3 c4 g3@2 e3@2 ~@2 c3@2 g3@4",
  M: "c4 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.2)

// chords · oboe
const oboe = note("<~@40 A B C D E ~@11 F G H I J K L M N O P Q R S T U ~@3 V W D U X Y Z AA@2>".pickRestart({
  A: "~ e5@5 ~@2", B: "g5@3 e5@5", C: "~ e5@7", D: "e5", E: "~ d5 d5@4 g5@2",
  F: "[g4,d5]@3 [a4,e5] [c5,e5]@2 [d5,g5]@2 [c5,e5]@3 [a4,d5] [c5,e5]@2 [c5,e5]@2", G: "[c5,e5]@7 [a4,d5]",
  H: "[g4,c5]@3 [a4,d5] [c5,e5]@2 [a4,d5]@2 [g4,c5]@2 [a4,d5] [g4,c5] [e4,a4]@2 [d4,g4] [e4,a4]", I: "[g4,c5]",
  J: "[d4,g4]@3 [e4,a4] [g4,c5]@2 [a4,c5]@2 a4@2 [g4,c5] [e4,a4] [g4,c5]@2 [g4,c5]@2", K: "e4@4 [g4,c5]@3 [e4,a4]",
  L: "[d4,g4]@3 [e4,a4] [g4,c5]@2 [e4,a4]@2 [d4,g4]@2 [c4,a4]@2 [a3,g4]@2 [g3,a4] [a3,g4]", M: "[e4,c5]",
  N: "g5@3 a5 c6@2 d6@2 c6@3 a5 c6@2 c6@2", O: "c6@7 a5", P: "g5@3 a5 c6@2 a5@2 g5@2 a5 g5 e5@2 d5 e5", Q: "g5",
  R: "d5@3 e5 g5@2 a5@2 a5@2 g5 e5 g5@2 g5@2", S: "e5@4 g5@3 e5", T: "d5@3 e5 g5@2 e5@2 d5@2 c5@2 a4@2 g4 a4", U: "c5",
  V: "~ e5@5 g5 e5", W: "e5@6 g5 e5", X: "d5@3 g5", Y: "g5 d5", Z: "d5@6 d5 c5", AA: "[c5@5 ~@3]/2",
})).s("gm_oboe").gain(0.11)

// other · oboe
const oboe_2 = note("<~@64 A B C D E F G D ~@3 H@4 I@3 J@2>".pickRestart({
  A: "~ e5@5 g5@2", B: "e5", C: "~ e5@7", D: "c5", E: "~ d5@5 g5@2", F: "d5", G: "~ d5@5 g4@2", H: "[~ c5@31]/4",
  I: "g4/3", J: "[c5@5 ~@3]/2",
})).s("gm_oboe").gain(0.3)

// other · violin
const violin = note("<~@24 A B C D ~@12 E@2 F ~@2 B G ~@37>".pickRestart({
  A: "g5@6 g5 e5", B: "d5@3 e5 g5@2 a5@2 g5@2 e5@2 g5@2 e5@2", C: "d5@6 d5 c5", D: "c5",
  E: "[~@2 e5@4 g5@6 e5 c6@2 a5]/2", F: "g5", G: "d5",
})).s("gm_violin").gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A@3 B A@3 B ~@16 A@3 C ~@16 D@3 E D E D C ~@8 B F B@6 ~@12>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!2 ~ x!2 ~@3", C: "x", D: "x ~@2 x ~@2 x ~@7 x ~", E: "x ~@2 x ~@2 x ~@9",
  F: "x!2 ~ x!2 ~@2 x",
})).gain(0.3)

stack(flute, orchestral_harp, acoustic_guitar_nylon, oboe, oboe_2, violin, low_tom)