Strudelify

Thunder

Angel Flores

KeyC majorTempo85 bpm
0:00/0:00
// Thunder — Angel Flores
// 85 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4979554; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// 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(`<
  ~@12 A@2 B@2 C D C E ~@8 F G A@2 B@2 C D C E H I J K H I J L M N C D C E C D C E O@2 P Q O@2 P Q R ~
>`.pickRestart({
  A: "c6!2", B: "a5!2", C: "c6@3 c6@3 c6@2 c6@3 c6@5", D: "~@2 c6@2 c6@4 c6@3 c6@5", E: "~@2 c6@2 c6@4 c6@3 c6 ~@4",
  F: "~@3 c6", G: "c6@11 ~@5", H: "g4!2 g4@2", I: "g4@4 d4@11 ~", J: "d5 a4", K: "a4@3 a4@3 f4@2", L: "d5@15 ~",
  M: "g4@2 f4 e4 ~@2 g4!2 g4@2 f4 e4 ~@4", N: "~@2 g4@2 g4@2 f4 e4 g4@2 f4 e4 g4@2 f4 e4",
  O: "c6!2 ~ c6!2 ~ c6!2 ~ c6!2 ~ c6@4", P: "a5!2 ~ a5!2 ~ b5!2 ~ a5!2 ~ e5@4", Q: "a5!2 ~ a5!2 ~ g5!2 ~ a5!2 ~ e5@4",
  R: "c5@15 ~",
})).s("gm_flute").gain(0.4)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@11 A B C D E F G F H ~@8 I J B C D E F G F H K L M N K L M O ~@2 F G F H F G F H P@2 Q@2 P@2 Q@2 R ~
>`.pickRestart({
  A: "~@6 c4 g4", B: "c4 g4 ~@2 c4 g4 c4@2", C: "c4@2 g4@2 ~@2 c4!2 c4@2 g4@2 c4@2 g4@2", D: "~ e4@3 ~ e4 c4@2",
  E: "~ e4@3 ~ e4 d4 e4", F: "g4@3 g4@3 g4@2 g4@3 g4@5", G: "~@2 g4@2 g4@4 g4@3 g4@5", H: "~@2 g4@2 g4@4 g4@3 g4 ~@4",
  I: "~ g4", J: "g4@3 ~", K: "b4@4 b4@4 b4@6 a4 b4", L: "c5 b4 a4 g4 e4@8 ~@2 d5 e5", M: "f5@6 e5 d5 c5@6 d5 e5",
  N: "d5@3 c5@3 b4@2", O: "g5", P: "e4!2 ~ e4!2 ~ d4!2 ~ c4!2 ~ c4@4", Q: "c4!2 ~ c4!2 ~ b3!2 ~ a3!2 ~ e3@4", R: "c4",
})).s("gm_alto_sax").gain(0.64)

// other · french horn · "Mellophone"
const french_horn = note(`<
  ~@12 A@2 B C D E D F ~@8 G H A@2 B C D E D F I J K L I J K M N O D E D F D E D F P@2 Q R P@2 Q R S ~
>`.pickRestart({
  A: "g4!2", B: "e4!2", C: "f4!2", D: "e4@3 e4@3 e4@2 e4@3 e4@5", E: "~@2 e4@2 e4@4 e4@3 e4@5",
  F: "~@2 e4@2 e4@4 e4@3 e4 ~@4", G: "~ e4@3", H: "e4@3 ~", I: "e4!2 e4@2", J: "d4 b3@3", K: "a4 f4",
  L: "f4@3 f4@3 d4@2", M: "b4", N: "e4@2 d4 c4 ~@2 e4!2 e4@2 d4 c4 ~@4", O: "~@2 e4@2 e4@2 d4 c4 e4@2 d4 c4 e4@2 d4 c4",
  P: "g4!2 ~ g4!2 ~ g4!2 ~ g4!2 ~ g4@4", Q: "e4!2 ~ e4!2 ~ e4!2 ~ e4!2 ~ c4@4", R: "f4!2 ~ f4!2 ~ f4!2 ~ f4!2 ~ c4@4",
  S: "c4",
})).s("gm_french_horn").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@12 A B C D E F E G ~@8 H I A B C D E F E G ~@10 E G E G E G E G J@2 K L J@2 K L H ~
>`.pickRestart({
  A: "~ g4@3 ~ g4 e4@2", B: "~ g4@3 ~ g4 e4 g4", C: "a3 e4 ~@2 a3 e4 c4@2", D: "a3@2 e4@2 ~@2 a3!2 a3@2 e4@2 d4@2 e4@2",
  E: "c5@2 g4@2 ~@2 c5!2 c5@2 g4@2 ~@4", F: "~@2 c5@2 c5@2 a4 g4 c5@2 g4@2 ~@4",
  G: "~@2 c5@2 c5@2 a4 g4 c5@2 g4@2 c5@2 g4@2", H: "c4", I: "c4@3 ~", J: "g4!2 ~ g4!2 ~ g4!2 ~ g4!2 ~ g4@4",
  K: "e4!2 ~ e4!2 ~ e4!2 ~ e4!2 ~ c4@4", L: "f4!2 ~ f4!2 ~ f4!2 ~ f4!2 ~ c4@4",
})).s("gm_trumpet").gain(0.64)

// other · trombone
const trombone = note(`<
  ~@4 A@2 B@2 A@2 B C D@2 E F G D E H ~@2 A@2 B@2 A@2 B I D@2 E F G D E H J K L@2 J K L K ~@2 G D E F G D E F D@2 E M
  D@2 E M N ~
>`.pickRestart({
  A: "c3@3 c3@3 c3@3 c3 c3@6", B: "f2@3 f2@3 f2@3 f2 f2@6", C: "f3@3 f3@3 f3@3 f3 f3@6",
  D: "c3@3 c3 c4@2 c3@3 c3 c3@2 c4@4", E: "a2@3 a2 a3@2 a2@3 a2 a2@2 a3@4", F: "f3@3 f3 f4@2 f3@3 f3 f3@2 f4@4",
  G: "c3@3 c3 c4@2 c3@3 c3 c3@2 c4@2 c4@2", H: "f3@3 f3 f4@2 f3@3 f3 f3@2 ~@4", I: "f3@3 f3@3 f3@3 f3 f3@2 ~@4",
  J: "e2@3 e2 e3@2 e2@3 e2 e2@2 e3@4", K: "g2@3 g2 g3@2 g2@3 g2 g2@2 g3@4", L: "d2@3 d2 d3@2 d2@3 d2 d2@2 d3@4",
  M: "f2@3 f2 f3@2 f2@3 f2 f2@2 f3@4", N: "c3",
})).s("gm_trombone").gain(0.3)

// other · french horn · "Baritone Horn"
const french_horn_2 = note(`<
  ~@4 A@2 B@2 A@2 B@2 C@2 D E F C D G ~@2 A@2 B@2 A@2 B H C@2 D E F C D G I J K@2 I J K J ~@2 F C D E F C D E C@2 D E
  C@2 D E L ~
>`.pickRestart({
  A: "c3@3 c3@3 c3@3 c3 c3@6", B: "f3@3 f3@3 f3@3 f3 f3@6", C: "c3@3 c3 c4@2 c3@3 c3 c3@2 c4@4",
  D: "a2@3 a2 a3@2 a2@3 a2 a2@2 a3@4", E: "f3@3 f3 f4@2 f3@3 f3 f3@2 f4@4", F: "c3@3 c3 c4@2 c3@3 c3 c3@2 c3@2 c3@2",
  G: "f3@3 f3 f4@2 f3@3 f3 f3@2 ~@4", H: "f3@3 f3@3 f3@3 f3 f3@2 ~@4", I: "e3@3 e3 e4@2 e3@3 e3 e3@2 e4@4",
  J: "g3@3 g3 g4@2 g3@3 g3 g3@2 g4@4", K: "d3@3 d3 d4@2 d3@3 d3 d3@2 d4@4", L: "c4",
})).s("gm_french_horn").gain(0.4)

// bass · tuba
const bass = note(`<
  ~@4 A@2 B@2 A@2 B@2 C@2 D E F C D G A@4 B@2 A@2 B H C@2 D E F C D G I J K@2 I J K J ~@2 F C D E F C D E C@2 D E C@2 D
  E L ~
>`.pickRestart({
  A: "c3@3 c3@3 c3@3 c3 c3@6", B: "f3@3 f3@3 f3@3 f3 f3@6", C: "c2@3 c2 c3@2 c2@3 c2 c2@2 c3@4",
  D: "a1@3 a1 a2@2 a1@3 a1 a1@2 a2@4", E: "f2@3 f2 f3@2 f2@3 f2 f2@2 f3@4", F: "c2@3 c2 c3@2 c2@3 c2 c2@2 c2@2 c2@2",
  G: "f2@3 f2 f3@2 f2@3 f2 f2@2 ~@4", H: "f3@3 f3@3 f3@3 f3 f3@2 ~@4", I: "e2@3 e2 e3@2 e2@3 e2 e2@2 e3@4",
  J: "g2@3 g2 g3@2 g2@3 g2 g2@2 g3@4", K: "d2@3 d2 d3@2 d2@3 d2 d2@2 d3@4", L: "c3",
})).s("gm_tuba").gain(0.4)

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

// drums · china
const china = s("cr").struct(`<
  A B A C A B A C A D ~@2 A C A C E F E F A D A B G C A B ~@2 A C A C E F E F A@3 B A@3 ~@3 E F E F E F E F C@3 D C@3 D
  H ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!3 ~", C: "~ x ~@2", D: "~@4 x ~@7 x!4", E: "~@6 x!2", F: "x", G: "~@3 x",
  H: "~@5 x ~@2",
})).gain(0.44)

// drums · ride bell
const ride_bell = s("rd").struct("<~@28 [x ~@2 x ~@2 x ~@2 x!2 ~@5] [x ~@2 x ~@2 x ~@9] ~@36>").gain(0.44)

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

// drums · whistle
const whistle = s("ballwhistle:1").struct(`<
  A B A C A B A C A C ~@2 A C A C ~@6 A B A C A B ~@2 A C A C ~@22 A D@3 A D@3 ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!3 ~", C: "~@4 x ~@7 x!4", D: "~ x ~@2",
})).gain(0.64)

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

// drums · guiro
const guiro = s("guiro:4").struct("<~@28 [x ~@2 x ~@2 x ~@2 x!2 ~@5]!2 ~@36>").gain(9.24)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  A B A C A B A C A C A D A C A C D@4 ~@2 A B A C A B ~@2 A C A C D@4 E@7 ~@3 D@8 A B D@2 A B D@2 F ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!3 ~", C: "~@4 x ~@7 x!4", D: "~ x ~@2", E: "x!2", F: "~@3 x",
})).gain(0.63)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@64 [~@5 x ~@2] ~>").gain(2.13)

stack(
  flute, alto_sax, french_horn, trumpet, trombone, french_horn_2, bass, high_tom, china, ride_bell, cabasa, whistle,
  whistle_2, guiro, woodblocks, jingle_bells
)