Strudelify

Ganga Addara Brass Band

B.Uditha Eshan Perera

KeyF majorTempo190 bpm
0:00/0:00
// Ganga Addara Brass Band — B.Uditha Eshan Perera
// 190 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5840700; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(190/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(`<
  ~@4 A@2 B@2 C@8 D@4 E@2 F G H@3 I J@4 K L M N K O P@2 Q@3 I R S B@2 T U V I W X P@2 Q@3 I R S B@2 ~ Y G H@3 I J@4
>`.pickRestart({
  A: "[a5@23 ~ g5@2 f5@2 e5@2 d5@2]/2", B: "[f5@15 ~]/2", C: "[c5@61 ~@3]/8", D: "[f5@2 f5 f5@2 f5!3]/2",
  E: "[g5@2 g5 g5@2 g5!3]/2", F: "g5@2 d5!2", G: "g5 a5", H: "[bb5@23 ~]/3", I: "c6 bb5", J: "[a5@61 ~@3]/4",
  K: "c5@2 c5!2", L: "e5@2 e5 f5", M: "g5!4", N: "g5 a5 g5@2", O: "c5 f5!2 g5", P: "[a5@15 ~]/2", Q: "[g6@23 ~]/3",
  R: "g5@15 ~", S: "a5 g5", T: "d5!2 d5@2", U: "f5!2 f5@2", V: "bb5!2", W: "a5 a5@2 g5", X: "f5 f5@2 g5", Y: "~@2 d5!2",
})).s("gm_flute").gain(0.4)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~@4 A@2 B@2 C@8 D@4 E@2 F G H@3 I J@4 K L M N K O P@2 Q R S T U I B@2 V W X Y Z AA P@2 AB Z AC AD U I B@2 ~ AE AF AG@3
  AH J@4
>`.pickRestart({
  A: "[a5@12 g5 f5 e5 d5]/2", B: "f5/2", C: "c5/8", D: "[f4@2 f4 f4@2 f4!3]/2", E: "[g4@2 g4 g4@2 g4!3]/2",
  F: "g4@2 d5!2", G: "bb5!2 a5@2", H: "[bb5@10 c5!2]/3", I: "a5!2 g5@2", J: "f5/4", K: "c5@2 c5!2", L: "e5@2 e5 f5",
  M: "g5!4", N: "g5 a5 g5@2", O: "c5 f5!2 g5", P: "a5/2", Q: "bb5@2 bb5 a5", R: "g5@2 g5 f5", S: "e5!2",
  T: "e5 d5!2 c5", U: "c5!2", V: "d5!2 d5@2", W: "f5!2 f5@2", X: "bb5!2", Y: "c6 bb5", Z: "a5 a5@2 g5",
  AA: "f5 f5@2 g5", AB: "g5 g5@2 g5", AC: "g5!2", AD: "g5 e5!2 d5", AE: "~@2 d5!2", AF: "bb5 a5", AG: "[bb5@5 c5]/3",
  AH: "a5 g5",
})).s("gm_clarinet").gain(0.4)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A@6 B@2 C D E F G@3 H C D E I J@3 K L@3 D M@4 N@3 O P@3 Q R@3 D S T U V W@3 X Y Z AA Q R@3 D S T AB@2 ~ AC K AD@2 AE D
  M@4
>`.pickRestart({
  A: "[f4@3 f4@2 f4 c4!2]/2", B: "[f4@3 f4@2 f4 c4@2]/2", C: "a4 c5!3", D: "c5 bb4", E: "a4!3 c5", F: "c5 f5!2 g5",
  G: "a5/3", H: "a4 c5", I: "f5 e5", J: "[d5@10 d4!2]/3", K: "g4 a4", L: "[~@6 g5 f5 e5@4, bb4]/3", M: "a4/4",
  N: "bb4/3", O: "c5@2 d5 c5 bb4@2 c5 bb4", P: "[a4@10 [a3,a4] [bb3,bb4]]/3", Q: "[c4,c5] [d4,d5] [e4,e5] [f4,f5]",
  R: "[g4 bb4@2, g5]/3", S: "g4", T: "a4 g4", U: "f4@2 [f3,f4] [g3,g4]", V: "[a3,a4]@2 [bb3,bb4] [c4,c5]",
  W: "[d4,d5]/3", X: "[f3,f4]@4 [d4,d5]@2 [e4,e5] [d4,d5]", Y: "c5", Z: "a4", AA: "c5@2 [a3,a4] [bb3,bb4]",
  AB: "[a3,a4]/2", AC: "~@2 d4!2", AD: "[~@6 g5 f5, bb4]/2", AE: "[bb4,e5]",
})).s("gm_alto_sax").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@4 A@2 B@2 C D E F G@3 H C D E I J@3 K L M N@2 O P Q@2 R S T U R F V@2 W X Y Z AA AB Q@2 AC AD AE AF AG AH V@2 AI AG
  AJ AK AA AB Q@2 ~@3 L M AL@2 O AM Q@2
>`.pickRestart({
  A: "[a4@12 g4 f4 e4 d4]/2", B: "[f4@3 c4]/2", C: "a3 c4!3", D: "c4 bb3", E: "a3!3 c4", F: "c4 f4!2 g4", G: "a4/3",
  H: "a4 c5", I: "f4 e4", J: "[d4@10 d4!2]/3", K: "d4", L: "~@2 d4 e4", M: "f4@2 e4 d4", N: "c4", O: "~@2 f4 g4",
  P: "a4@2 g4!2", Q: "f4/2", R: "c4@2 c4!2", S: "e4@2 e4 f4", T: "g4!4", U: "g4 a4 g4@2", V: "a4/2", W: "bb4@2 bb4 a4",
  X: "g4@2 g4 f4", Y: "e4!2", Z: "e4 d4!2 c4", AA: "c4!2", AB: "a4!2 g4@2", AC: "d4!2 d4@2", AD: "f4!2 f4@2",
  AE: "bb4!2", AF: "c5 bb4", AG: "a4 a4@2 g4", AH: "f4 f4@2 g4", AI: "g4 g4@2 g4", AJ: "g4!2", AK: "g4 e4!2 d4",
  AL: "c4/2", AM: "a4 g4",
})).s("gm_tenor_sax").gain(0.4)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~@4 A@2 B@2 C@12 D@4 E F G@2 H I J@2 K@3 L M@4 N O P Q R S T@2 U@4 V W X@2 Y V Z AA R S J@2 ~@3 E F AB@2 H AC J@2
>`.pickRestart({
  A: "[a4@12 g4 f4 e4 d4]/2", B: "[f4@3 c4]/2", C: "[f4@3 f4@5]/2", D: "[bb3@3 bb3@5]/2", E: "~@2 d4 e4",
  F: "f4@2 e4 d4", G: "c4", H: "~@2 f4 g4", I: "a4@2 g4!2", J: "f4/2", K: "bb3/3", L: "c4@2 d4 c4 bb3@2 c4 bb3",
  M: "a3/4", N: "bb4@2 bb4 a4", O: "g4@2 g4 f4", P: "e4!2", Q: "e4 d4!2 c4", R: "c4!2", S: "a4!2 g4@2",
  T: "[f4@3 e4]/2", U: "d4/4", V: "a4 a4@2 g4", W: "f4 f4@2 g4", X: "a4/2", Y: "g4 g4@2 g4", Z: "g4!2",
  AA: "g4 e4!2 d4", AB: "c4/2", AC: "a4 g4",
})).s("gm_french_horn").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@4 A@2 B@2 C D E F G@4 C D E H I@3 J K@3 L M@4 N O P Q N F R@2 S T U V W L X Y Z AA AB AC AD AE R@2 AF AD AG AH W L
  B@2 ~ AI AJ AK@3 AL M@4
>`.pickRestart({
  A: "[a5@12 g5 f5 e5 d5]/2", B: "f5/2", C: "a4 c5!3", D: "c5 bb4", E: "a4!3 c5", F: "c5 f5!2 g5", G: "a5/4",
  H: "f5 e5", I: "[d5@10 d5!2]/3", J: "bb5!2 a5@2", K: "[bb5@10 c5!2]/3", L: "a5!2 g5@2", M: "f5/4", N: "c5@2 c5!2",
  O: "e5@2 e5 f5", P: "g5!4", Q: "g5 a5 g5@2", R: "a5/2", S: "bb5@2 bb5 a5", T: "g5@2 g5 f5", U: "e5!2",
  V: "e5 d5!2 c5", W: "c5!2", X: "f5@2 f4 g4", Y: "a4@2 bb4 c5", Z: "d5!2 d5@2", AA: "f5!2 f5@2", AB: "bb5!2",
  AC: "[c5,c6] bb5", AD: "a5 a5@2 g5", AE: "f5 f5@2 g5", AF: "g5 g5@2 g5", AG: "g5!2", AH: "g5 e5!2 d5", AI: "~@2 d5!2",
  AJ: "bb5 a5", AK: "[bb5@5 c5]/3", AL: "a5 g5",
})).s("gm_trumpet").gain(0.4)

// other · trombone · "Tenor Trombone"
const trombone = note(`<
  A@18 B C D@4 E@2 F@2 G@2 H I J K L J M@4 K N O@2 K P Q@2 N@2 L R@3 S@2 T@4 K J@2 N ~ U@2 T@2 S@2 M@4
>`.pickRestart({
  A: "[c3@3 c3@5]/2", B: "c3@3 c3", C: "e3", D: "[f3@3 f3@5]/2", E: "[bb2@3 bb2@5]/2", F: "[g3@3 g3@5]/2",
  G: "[c4@3 c4@5]/2", H: "c4", I: "c4 e3", J: "c3", K: "g3", L: "d3", M: "c3/4", N: "f3", O: "g3/2", P: "a2",
  Q: "a2@2 a2!2", R: "c3/3", S: "c3/2", T: "d3/2", U: "f3/2",
})).s("gm_trombone").gain(0.4)

// bass · trombone · "Bass Trombone"
const bass = note(`<
  A@18 B C D@4 E@2 F@2 G@2 H I J K L J M@4 K N O@2 K J P@2 N@2 L Q@3 R@2 S@4 K J@2 C ~ T@2 S@2 R@2 M@4
>`.pickRestart({
  A: "[f2@3 f2@5]/2", B: "f2@3 f2", C: "a2", D: "[bb2@3 bb2@5]/2", E: "[g2@3 g2@5]/2", F: "[c3@3 c3@5]/2",
  G: "[a3@3 a3@5]/2", H: "a3", I: "a3 a2", J: "f2", K: "c3", L: "g2", M: "f2/4", N: "bb2", O: "c3/2", P: "f2@2 f2!2",
  Q: "f2/3", R: "f2/2", S: "g2/2", T: "bb2/2",
})).s("gm_trombone").gain(0.4)

// bass · tuba · "C Tuba"
const bass_2 = note(`<
  A@18 B C D@6 E@2 F@2 G H I J K I L@4 J M N@2 J C O@2 M@2 K P@3 Q@2 R@4 J I@2 C ~ S@2 R@2 Q@2 L@4
>`.pickRestart({
  A: "[a2@3 a2@5]/2", B: "a2@3 a2", C: "c3", D: "[d3@3 d3@5]/2", E: "[e3@3 e3@5]/2", F: "[f3@3 f3@5]/2", G: "f3",
  H: "f3 c3", I: "a2", J: "e3", K: "bb2", L: "a2/4", M: "d3", N: "e3/2", O: "c3@2 c3!2", P: "a2/3", Q: "a2/2",
  R: "bb2/2", S: "d3/2",
})).s("gm_tuba").gain(0.4)

stack(flute, clarinet, alto_sax, tenor_sax, french_horn, trumpet, trombone, bass, bass_2)