Strudelify

fireflies

O'Neall Agosto

KeyE♭ majorTempo160 bpm
0:00/0:00
// fireflies — O'Neall Agosto
// 160 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/107762; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 177 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trombone
const trombone = note(`<
  A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H ~@16 I@3 J@2 K L M N O P M Q R@2 S A B C D E F G H A B
  C D E F G H T@3 ~@12 U@2 ~@3 V@2 W ~ X@2 W ~ V@2 W ~@3 Y@2 Z AA Y AB AC@2 Y@2 Z AA Y AB AD AE T@3 AF@2 W AG AH AI AJ
  AK AH AL AM@2 AN@4 AF@2 W AG AH AI AJ AK AH AL AM@2 AO@2 ~@14
>`.pickRestart({
  A: "~@2 d4 ~@2 bb3 ~@2", B: "~@2 f4 eb4 f4 bb4 ~@2", C: "~@2 c4 bb3 c4 eb4 ~@2", D: "~@2 c4 bb3 c4 eb4 c4 f4",
  E: "~@2 d4 ~@2 bb3 ~ eb4", F: "~ eb4 f4 eb4 ab4 g4 f4 eb4", G: "~@2 c4 ~@2 bb3 ~@2", H: "c4 ~ c4 bb3 ~ d4 eb4 ~",
  I: "[~@2 g3@2 f3@2 eb3 bb3@3 g3@2 f3@2 eb3 f3@9]/3", J: "[~@2 bb2@2 eb3@2 d3 c3@9]/2", K: "bb2@3 ~", L: "d3",
  M: "c3@6 ~ bb2", N: "c3@2 c3 eb3@2 eb3 g3@2", O: "f3 eb3@2 bb2@3 ~ bb2", P: "c3 eb3!2 f3",
  Q: "c3@2 eb3 eb3@2 eb3 g3@2", R: "[f3 eb3@2 bb2@2 eb3@2 f3@9]/2", S: "c3",
  T: "[~@2 g4@2 f4@2 eb4 bb4@3 g4@2 f4@2 eb4 f4@9]/3", U: "[~ c4 g4@2 f4@2 eb4 eb4@9]/2",
  V: "[~@4 bb3@3 c4@2 eb4@2 bb3 c4@2 eb4@2]/2", W: "bb3@3 ~", X: "[~@4 bb3@3 ab3@2 c4@2 bb3 eb4@2 f4@2]/2",
  Y: "d4@3 eb4@3 bb3@2", Z: "ab3@3 c4@3 ab3@2", AA: "ab4@3 g4@3 bb4@2", AB: "d4@3 eb4@3 g4@2",
  AC: "[eb4@3 bb3@3 eb4@3 bb3@3 eb4@2 bb3 c4]/2", AD: "eb4@3 bb3@3 eb4@2", AE: "c5@3 g4@3 f4@2",
  AF: "[~@2 bb3@2 eb4@2 d4 c4@9]/2", AG: "d4", AH: "c4@6 ~ bb3", AI: "c4@2 c4 eb4@2 eb4 g4@2",
  AJ: "f4 eb4@2 bb3@3 ~ bb3", AK: "c4 eb4!2 f4", AL: "c4@2 eb4 eb4@2 eb4 g4@2", AM: "[f4 eb4@2 bb3@2 eb4@2 f4@9]/2",
  AN: "[~ c4 g4@2 f4@2 eb4 eb4@2 ~ g4@2 f4@2 eb4 bb4@3 g4@2 f4@2 eb4 f4@9]/4", AO: "[~ c4 g4@2 f4@2 eb4 eb4@7 ~@2]/2",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@83 A@2 B C D E F G D H I@2 ~@82>".pickRestart({
  A: "[~@2 bb3@2 eb4@2 d4 c4@9]/2", B: "bb3@3 ~", C: "d4", D: "c4@6 ~ bb3", E: "c4@2 c4 eb4@2 eb4 g4@2",
  F: "f4 eb4@2 bb3@3 ~ bb3", G: "c4 eb4!2 f4", H: "c4@2 eb4 eb4@2 eb4 g4@2", I: "[f4 eb4@2 bb3@2 eb4@2 f4@9]/2",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_2 = note(`<
  ~@7 A B C@2 D@2 E@2 ~@16 F G H I@2 G H J K G L M G@3 N ~ G H I@2 G H J K G L M G@2 H N ~ O@2 P Q O R S T O@2 P Q U V W
  X G H I@2 G H J K G L M G@3 N ~@2 Y O@2 P Z O R S T O@2 P Z U V AA ~ AB@2 AC AD AB AE AF@2 AB@2 AC AD AB AE AG AH G H
  I@2 G H J K G L M G@3 N ~ G H I@2 G H J K G L M G@3 N ~@16
>`.pickRestart({
  A: "~@3 eb4", B: "d4@3 bb3@3 eb4@2", C: "[d4@3 bb3@3 c4@8 bb3@2]/2", D: "[c4@3 eb4@3 f4@6 ~ bb3 bb3@2]/2",
  E: "[g4@3 f4@3 eb4@10]/2", F: "~@2 g3 ~@2 f3 ~@2", G: "ab3", H: "c4", I: "bb3/2", J: "g3", K: "f3", L: "d4",
  M: "c4 bb3", N: "bb3", O: "d3 ~@2 eb3 ~@2 bb2 ~", P: "ab2 ~@2 c3 ~@2 ab2 ~", Q: "ab3 ~@2 g3 ~@2 eb3 ~",
  R: "d3 ~@2 eb3 ~@2 g3 ~", S: "eb3 ~@2 bb2 ~@2 eb3 ~", T: "~ bb2 ~@2 eb4 ~ bb2 c3", U: "d3 ~@2 eb3 ~@2 f3 ~",
  V: "g3 ~@2 f3 ~@2 g3 ~", W: "eb3 ~@2 c3 ~@2 g3 ~", X: "c4 ~@2 g3 ~@4", Y: "~@5 c3 d3 f3", Z: "ab3 ~@2 g3 ~@2 bb3 ~",
  AA: "eb3 ~@7", AB: "d3@3 eb3@3 bb2@2", AC: "ab2@3 c3@3 ab2@2", AD: "ab3@3 g3@3 bb3@2", AE: "d3@3 eb3@3 g3@2",
  AF: "[eb3@3 bb2@3 eb3@3 bb2@3 eb3@2 bb2 c3]/2", AG: "eb3@3 bb2@3 eb3@2", AH: "c4@3 g3@3 f3@2",
})).s("gm_trombone").gain(0.25)

// other · trombone
const trombone_3 = note(`<
  A B C D E B F G A B C D E B F G ~@15 H I J K@2 I@2 L M I N O I@2 J N ~ I J K@2 I@2 L M I N O I@3 N ~ P@2 Q R P S T U
  P@2 Q R V W X Y I J K@2 I@2 L M I N O I@2 J N ~@3 P@2 Q Z P S T U P@2 Q Z V W B ~ AA@2 AB AC AA AD AE@2 AA@2 AB AC AA
  AD AF AG I J K@2 I@2 L M I N O I@2 J N ~ I J K@2 I@2 L M I N O I@2 J N ~@16
>`.pickRestart({
  A: "bb2 ~@2 bb2 ~@4", B: "eb3 ~@7", C: "ab2 ~@5 eb3 ab2", D: "~@4 c3 ~@3", E: "bb2 ~@3 f3 ~@3",
  F: "ab2 ~@2 eb3 ab2 ~@2 eb3", G: "~ ab2 ~@2 c3 ~@3", H: "~@2 g3 ~@2 f3 ~@2", I: "eb3", J: "g3", K: "f3/2", L: "d3",
  M: "c3", N: "f3", O: "g3 f3", P: "d3 ~@2 eb3 ~@2 bb2 ~", Q: "ab2 ~@2 c3 ~@2 ab2 ~", R: "ab3 ~@2 g3 ~@2 eb3 ~",
  S: "d3 ~@2 eb3 ~@2 g3 ~", T: "eb3 ~@2 bb2 ~@2 eb3 ~", U: "~ bb2 ~@2 eb4 ~ bb2 c3", V: "d3 ~@2 eb3 ~@2 f3 ~",
  W: "g3 ~@2 f3 ~@2 g3 ~", X: "eb3 ~@2 c3 ~@2 g3 ~", Y: "c4 ~@2 g3 ~@4", Z: "ab3 ~@2 g3 ~@2 bb3 ~",
  AA: "d3@3 eb3@3 bb2@2", AB: "ab2@3 c3@3 ab2@2", AC: "ab3@3 g3@3 bb3@2", AD: "d3@3 eb3@3 g3@2",
  AE: "[eb3@3 bb2@3 eb3@3 bb2@3 eb3@2 bb2 c3]/2", AF: "eb3@3 bb2@3 eb3@2", AG: "c4@3 g3@3 f3@2",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_4 = note(`<
  ~@7 A B C@2 D@2 E@2 ~ F G H I J K L M F G H I F N ~ O ~@64 P Q ~@2 R@2 S ~ T@2 S ~ R@2 S ~@2 U F G H I J K L M F G H I
  F V L W X Y Z@2 X@2 AA AB X AA AC X@3 AD ~ X Y Z@2 X@2 AA AB X AA AC X@3 AD ~ X Y Z@2 X@2 AA AB X AD AC X@2 Y AD
>`.pickRestart({
  A: "~@3 eb3", B: "d3@3 bb2@3 eb3@2", C: "[d3@3 bb2@3 c3@8 bb2@2]/2", D: "[c3@3 eb3@3 f3@6 ~ bb2 bb2@2]/2",
  E: "[g3@3 f3@3 eb3@10]/2", F: "bb2 ~@2 bb2 ~@4", G: "~@2 eb3 ~@5", H: "ab2 ~@2 ab2 ~@2 ab2 ~", I: "~@2 ab2 ~@4 ab2",
  J: "bb2 ~@2 bb3 ~@4", K: "~@2 eb3 ~@2 eb4 ~@2", L: "ab2 ~@2 ab2 ~@3 ab2", M: "~ eb3 ab2 ~@3 c3@2",
  N: "~@2 bb2 ~@2 eb3 ~@2", O: "c3 ~ c3 bb2 ~ d3 eb3 ~", P: "~@2 c3 bb2 c3 eb3 ~@2", Q: "~ bb2 c3 bb2 ~ c3 d3 f3",
  R: "[~@4 bb3@3 c4@2 eb4@2 bb3 c4@2 eb4@2]/2", S: "bb3@3 ~", T: "[~@4 bb3@3 ab3@2 c4@2 bb3 eb4@2 f4@2]/2",
  U: "~@6 g2 ab2", V: "~@2 bb3 ~@2 eb3 ~@2", W: "~ ab2!2 ~@5", X: "c4", Y: "eb4", Z: "d4/2", AA: "bb3", AB: "ab3",
  AC: "eb4 d4", AD: "d4",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft_2 = note(`<
  ~@32 A B C@2 A@2 D E A D F A@3 G ~ A B C@2 A@2 D E A D F A@2 B G ~ H I J K L M N O H I J K H P ~ Q A B C@2 E A D E A D
  F A@3 G ~@82
>`.pickRestart({
  A: "c4", B: "eb4", C: "d4/2", D: "bb3", E: "ab3", F: "eb4 d4", G: "d4", H: "bb2 ~@2 bb2 ~@4", I: "~@2 eb3 ~@5",
  J: "ab2 ~@2 ab2 ~@2 ab2 ~", K: "~@2 ab2 ~@4 ab2", L: "bb2 ~@2 bb3 ~@4", M: "~@2 eb3 ~@2 eb4 ~@2",
  N: "ab2 ~@2 ab2 ~@3 ab2", O: "~ eb3 ab2 ~@3 c3@2", P: "~@2 bb2 ~@2 eb3 ~@2", Q: "c3 ~ c3 bb2 ~ d3 eb3 ~",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_5 = note(`<
  ~@16 A B C D E F G H A B C D A I ~ J K L M@2 K N@2 O K P Q K@2 L P ~ K L M@2 K N@2 O K P Q K@3 P ~ A B C D E F G H A B
  C D A I ~ J R S T@2 R U@2 V R W X R@2 S W ~@3 A B C D E F G H A B C D A I ~ Y A B C D E F G H A B C D A Z G AA R S T@2
  R U@2 V R W X R@2 S W ~ R S T@2 R U@2 V R W X R@2 S W ~ R S T@2 R U@2 V R W X R@2 S W
>`.pickRestart({
  A: "bb2 ~@2 bb2 ~@4", B: "~@2 eb3 ~@5", C: "ab2 ~@2 ab2 ~@2 ab2 ~", D: "~@2 ab2 ~@4 ab2", E: "bb2 ~@2 bb3 ~@4",
  F: "~@2 eb3 ~@2 eb4 ~@2", G: "ab2 ~@2 ab2 ~@3 ab2", H: "~ eb3 ab2 ~@3 c3@2", I: "~@2 bb2 ~@2 eb3 ~@2",
  J: "c3 ~ c3 bb2 ~ d3 eb3 ~", K: "ab2", L: "c3", M: "bb2/2", N: "g2", O: "f2", P: "bb2", Q: "c3 bb2", R: "ab3",
  S: "c4", T: "bb3/2", U: "g3", V: "f3", W: "bb3", X: "c4 bb3", Y: "~@6 g2 ab2", Z: "~@2 bb3 ~@2 eb3 ~@2",
  AA: "~ ab2!2 ~@5",
})).s("gm_trombone").gain(0.2)

stack(trombone, trombone_soft, trombone_2, trombone_3, trombone_4, trombone_soft_2, trombone_5)