Strudelify

brave shine

Aimer

KeyF majorTempo170 bpm
0:00/0:00
// brave shine — Aimer
// 170 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 1 "Alto Saxophone" named as a reed, played on alto sax (its synth strings 1 patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5945188; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 63 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A@2 B@2 C@2 D@2 E@2 F@2 G@4 H@6 I@6 J@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@4 S@4 T@2 U@4 V@4 W
>`.pickRestart({
  A: "[db3,f3,ab3,db4]/2", B: "[~@13 bb4@3, [c3,eb3], [g3,eb4]@3 g3, ~ g4, ~@24 bb4 eb4@7]/2",
  C: "[[f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3] ~ [f2,c3,f3]@2 [f2,c3,f3]@4 [f2,c3,f3] ~ [f2,c3,f3]@2 [f2,c3,f3] ~ [f2,c3,f3]@2 [f2,c3,f3] ~ [f2,c3,f3]@2 [f2,c3,f3]@8, [c4,f4]]/2", // F5
  D: "[[eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@4 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@8, [bb3,eb4]]/2", // Eb5
  E: "[[db2,ab2,db3]@2 [db2,ab2,db3]@2 [db2,ab2,db3] ~ [db2,ab2,db3]@2 [db2,ab2,db3]@4 [db2,ab2,db3] ~ [db2,ab2,db3]@2 [db2,ab2,db3] ~ [db2,ab2,db3]@2 [db2,ab2,db3] ~ [db2,ab2,db3]@2 [db2,ab2,db3]@8, [ab3,db4]]/2", // Db5
  F: "[[eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@4 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 [eb2,bb2,eb3] ~ [eb2,bb2,eb3]@2 ~@4 ab3@2 ab3@2, [bb3,eb4], ~@3 [eb2,bb2,eb3]]/2", // Eb5
  G: "[~ eb4!3 ~@2 bb3 ~@3 c4 ~@3 eb3 ~@7 bb3 ~@4 ab3@2 ab3@2 ab3, [f3,db4]@7 bb3@2 ab3 [f4,c5]@11 [c4,g4]@2 bb3@2 [eb3,ab3] bb3 eb4@5, ~@2 ab4@3 c4@2 db3@9 ab3 bb3 ab4@14, ~@3 g4@2 g4@5 [bb3,ab4] c4@5 f3@16, ~@4 eb4@11 eb3@4 [bb3,g4] eb4@3 db3@9]/4", // Db F5 C5 Ab5 Bb7 Eb
  H: "[eb4 ~@7 c4@2 ~@20 ab3 ~@2 eb4!3 ~@2 bb3 ~@7 eb3!2, f3@10 [c4,f4,c5]@9 g4 eb4 g4@6 eb4@4 ab3@4 g4 eb4 c4@2 [db3,bb3]@2 [eb3,ab3] bb3 [c4,eb4]@5, ~ eb4@2 g4 eb4@2 bb3 [db3,db4]@11 ab3@4 bb3 db3@11 ab4@14, ~@2 ab4@4 ab3@4 ab4@4 eb4@2 f3@9 eb3@12 g4@11, ~@2 c4@3 g4@10 bb3@3 ab4@8 bb3@6 [f3,db4]@16]/6", // F5 Gb Ab5 Cm Db
  I: "[~ bb3!2 ~@3 bb3 ~@4 ab3@2 ab3@2 ~ eb4 ~@5 bb3 ~@15 bb3 ~@4 eb4@5, f3@7 bb3@9 f3@7 bb3@2 eb3@12 [c4,g4]@2 bb3@2 eb3 bb3@6, ab3@5 g4@5 [c4,ab4]@5 ab3@3 c4 g4 eb4@2 c4 db3@12 [bb3,g4] eb4@3 db3@9, ~@2 ab4@3 c4@2 db3@10 eb4 ab4@7 ab3 [bb3,c4] eb4@4 bb3 f3@16, ~@3 [bb3,g4] eb4@5 ab3 [f4,c5]@11 g4@9 c4@4 [ab3,ab4]@14]/6", // C5 Fm Eb Bbsus2 Eb F5 Ab
  J: "[[db3,ab3,db4,f4,ab4]@3 [db3,ab3,db4,f4,ab4] ~@2 eb4!2 eb4 [db3,ab3,db4,eb4,f4,ab4]@2 [db3,ab3,db4,f4,ab4] [f4,ab5] [f4,f5] [db3,ab3,db4,f4,ab4,db5] [db3,ab3,db4,eb4,f4,ab4], [db5,f5]@13 ~@3, ab5@6 [db3,ab3,db4,ab4] ~, ~@4 [db3,ab3,db4,f4,ab4]@3 [db3,ab3,db4,f4,ab4]@2 ~@2 eb4@2 ~@3]/2", // Db Fm F Db Db5 Db
  K: "[~@3 [ab2,eb3,ab3,c4,eb4] ~@2 bb3 ~ b3 bb3!2 [ab2,eb3,ab3,c4,eb4] eb4!2 [ab2,eb3,ab3,c4,eb4,ab4] [ab2,eb3,ab3,c4,eb4,c5], [ab4,c5,eb5]@13 ~@3, [ab2,eb3,ab3,c4,eb4]@3 ~ [ab2,eb3,ab3,c4,eb4]@3 [ab2,eb3,ab3,c4,eb4]@2 [ab2,eb3,ab3,c4,eb4]@2 ~ [ab2,eb3,ab3,c4]@2 ~@2, ~ bb3@3 ~@9 bb3@3]/2", // Ab
  L: "[[eb3,bb3,eb4,g4,bb4]@3 [eb3,bb3,eb4,g4,bb4] ~ ab3 eb4!2 eb4!3 [eb3,bb3,eb4,g4,bb4] bb4!2 [eb3,bb3,eb4,g4,bb4,eb5] [eb3,bb3,eb4,g4,bb4,g5], [eb5,g5,bb5]@13 ~@3, ~@4 [eb3,bb3,g4,bb4]@3 [eb3,bb3,g4,bb4]@2 [eb3,bb3,g4,bb4]@2 ~ [eb3,bb3,eb4,g4]@2 ~@2, ~@4 eb4@2 ~@7 f4@3]/2", // Eb
  M: "[eb4@2 eb4 [f3,c4,f4,a4,c5] ~ g4 ~ [f3,c4,f4,a4,c5]@2 [c4,db4] ~ [ab3,eb4,ab4,c5,eb5]!5, [f5,a5,c6], [f3,c4,f4,a4,c5]@3 ab4@2 ~ eb4@3 ~ c4@2 ~@4, ~@4 [f3,c4,f4,a4,c5]@3 ~@2 [f3,f4,a4,c5]@2 ~@5]/2", // F Dbmaj7 Ab F
  N: "[eb4@2 ab3 ab3@2 g3@2 ab3@5 ~@2 eb4!2, [db2,ab2,db3]]/2", // Db5
  O: "[[eb2,bb2,eb3]!2 c4 eb4@2 f4@2 g4@3 ~@2 [ab3,eb4,ab4]@4, eb4 ~@7]/2", // Eb5 Ab5
  P: "[[f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3,f3]@4 [f2,c3] ~@5 [db2,ab2,db3]@2 [db2,ab2] ~ [db2,ab2] ~ ab4@2 bb4@6, [ab3,eb4]@5 ~@3, [f4,ab4,c5,f5] [db4,db5], ~@7 [db2,ab2,db3]@2 ~@3 [db2,ab2,db3]@4, ~@2 ab4 ~]/2", // F5 Db5 Ab5 Fm Db Db5
  Q: "[[ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [ab2,eb3] ~ [ab2,eb3] ~@5 [ab2,eb3] ~ bb4@2 ~@2 [eb2,bb2,eb3]@2 [eb2,bb2] ~ [eb2,bb2] ~@3 [bb3,f4,bb4]@4 [bb3,f4,bb4]@2, [ab4,eb5,ab5] [eb4,eb5], c5@2 db5 c5@2 db5@2 ~ bb4@5 ~@3, ~@4 [ab2,eb3,ab3]@2 ~ [eb2,bb2,eb3]@2 ab4@2 g4@2 ~@3, ~@3 [eb2,bb2,eb3]]/2", // Ab5 Eb5 Bb5 Ab5 Eb Ab5 Eb5
  R: "[[f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3,f3]@4 [f2,c3] ~@5 [db2,ab2,db3]@2 [db2,ab2] ~ [db2,ab2] ~ [ab3,eb4,ab4]@4 [ab3,eb4,ab4]@2 [ab3,ab4]@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [eb3,bb3,eb4]@2 eb3@2 ab3@2 ~@2 [ab2,eb3] ~@5 [eb2,bb2,eb3]@2 [eb2,bb2] ~ [eb2,bb2] ~@3 [g3,db4,g4]@4 [g3,db4,g4]@2, [ab3,eb4]@10 ~@9 [bb3,eb4]@2 [db3,ab3,db4]@2 ~@2 [db3,ab3,db4]@2 eb3 ~@4, [f4,ab4,c5,f5] [db4,db5] [ab4,eb5,ab5] [bb4,eb5], ~@14 [db2,ab2,db3]@4 ~@6 [db2,ab2,db3]@8 ~@4 ab2 ~ ab2 ~ [ab2,eb3]@4 ~@2 [eb2,bb2,eb3,f3,c4]@4 ~@6 [eb2,bb2,eb3]@8, ~@8 ab4@4 ~@3 eb4@3 ~@6 eb4@3 [bb3,eb4]@2 ~@3]/4", // F5 Db5 Ab5 Ab Ab5 Eb5 Ab5 Eb5 …
  S: "[[f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3,f3]@4 [f2,c3] ~@5 [db2,ab2,db3]@2 [db2,ab2] ~ [db2,ab2] ~ ab4@2 bb4@4 ~@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [ab2,eb3] ~ [ab2,eb3] ~@5 [ab2,eb3] ~ bb4@2 ~@2 [eb2,bb2,eb3]@2 [eb2,bb2] ~ [eb2,bb2] ~@3 ab4@6, [ab3,eb4]@5 ~@11, [f4,ab4,c5,f5] [db4,db5] [ab4,eb5,ab5] [eb4,bb4,eb5], ~@7 [db2,ab2,db3]@2 ~@3 [db2,ab2,db3]@4 ~@4 [ab2,eb3,ab3]@2 ~ [eb2,bb2,eb3]@2 ~@3 [eb2,bb2,eb3]@4, ~@8 ab4@4 ~@3 c5@3 db5 c5@2 db5@2 ~@3 ab4 g4@2 ~@3]/4", // F5 Db5 Ab5 Eb5 Ab5 Fm Db Ab5 …
  T: "[[c5,db5]@4 db5@2 [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ db5@2 c5@4 [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3,gb3]@2 [gb2,db3,gb3]@2 [gb2,db3,gb3]@4, [gb4,gb5], [gb2,db3,gb3]@3 c5@3 [gb2,db3,gb3]@3 ab4@2 eb4@3 ~@2]/2", // Dbmaj7 Gb5 Gb Gb5
  U: "[[c5,db5]@4 db5@2 [db2,ab2] ~ [db2,ab2] ~ [db2,ab2] ~@7 [db2,ab2] ~ [db2,ab2] ~ [db2,ab2] ~ [db2,ab2,db3]@2 [db2,ab2,db3]@2 ab4@2 ~@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3,f3]@4 [f2,c3] ~@5 [db2,ab2,db3]@2 [db2,ab2] ~ [db2,ab2] ~ [db2,ab2,db3]@8, db4@2 [f4,c5,f5] [db4,ab4,db5], ab4@12 ab4@2 ~ g4@3 ab4@2 ab4@4 ~@8, [db2,ab2,db3]@3 c5@2 db5@2 eb5@5 ~@20, ~@6 [db2,ab2,db3]@3 ~@5 [db2,ab2,db3]@2 ~@7 [db2,ab2,db3]@2 ~@7]/4", // Dbmaj7 Db5 F5 Db5 F5 Db5
  V: "[[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3] ~ [bb2,f3] ~ [bb2,f3,bb3]@4 [bb2,f3] ~@5 [eb2,bb2,eb3]@2 [eb2,bb2] ~ [eb2,bb2] ~ ab4@4 ~@4 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3,f3]@4 [f2,c3] ~@5 [db2,ab2,db3]@2 [db2,ab2] ~ [db2,ab2] ~ [db2,ab2,db3]@8, [bb4,f5,bb5] [eb4,bb4,eb5] [f4,c5,f5] [db4,ab4,db5], ~@7 [eb2,bb2,eb3]@2 ~@3 [eb2,bb2,eb3]@4 ~@7 [db2,ab2,db3]@2 ~@7, ~@7 g4@2 ab4 ab4@2 ~@4]/4", // Bb5 Eb5 F5 Db5 Bb5 Eb5 F5 Db5 …
  W: "[eb2,bb2,eb3]!3 ~@5", // Eb5
})).s("gm_alto_sax").gain(0.32)

// other · overdriven guitar
const overdriven_guitar = note("<~@4 A@3 B C@2 D@2 ~@51>".pickRestart({
  A: "[ab4 g4 eb4 f4 c5@4]/3", B: "ab4 bb4@7 eb5@8", C: "[g5@3 eb5@3 bb4@8 ab4 g4]/2",
  D: "[g4@3 ab4@3 eb5@3 ab4@3 g4@4]/2",
})).s("gm_overdriven_guitar").gain(0.45)

// bass · electric bass pick · "5-str. Electric Bass"
const bass = note(`<
  ~@4 A@2 B@2 C@2 B@2 ~@6 D E F G H I J@2 K@2 ~@8 L@2 M ~ N@2 O@2 P@2 Q R N@2 O@2 S@2 T@2 N@2 U@2 N@2 V
>`.pickRestart({
  A: "[f1 f1@2 f1 f1@2 f1 f1@2 f1 f1@2 f1!4]/2", B: "[eb1 eb1@2 eb1 eb1@2 eb1 eb1@2 eb1 eb1@2 eb1!4]/2",
  C: "[db1 db1@2 db1 db1@2 db1 db1@2 db1 db1@2 db1!4]/2", D: "~@7 db2", E: "eb2@2 g2 ab2 g2@2 eb2@2 bb1@2 ab1@2 g1@4",
  F: "f1@7 db2", G: "d2@12 f1 gb1 [g1,ab1] a1", H: "bb1@12 [a1,bb1] [f1,gb1,g1,ab1] eb1@2, ~@14 e1 ~",
  I: "eb1@5 bb1@2 bb1", J: "[f1@7 db2@7 ab1@2]/2", K: "[bb1@5 c2@2 eb1@4 eb1 eb2!2 eb2@2]/2",
  L: "[db1 db1@2 db1 db1@2 db1 db1@2 db1!7]/2", M: "eb1!2 ~@6", N: "[f1 f1@2 f1 f1@2 db1 db1@2 db1!7]/2",
  O: "[ab1 ab1@2 ab1 ab1@2 eb1 eb1@2 eb1!5 eb1@2]/2", P: "[f1 f1@2 f1 f1@2 db1 db1@2 db1!5 db1@2]/2",
  Q: "ab1 ab1@2 ab2@2 g2 eb2!2", R: "eb2 eb1 g1 eb1 bb1 ab1 g1 eb1",
  S: "[gb1 gb1@2 gb1 gb1@2 gb1 gb1@2 gb2!4 f2 db2@2]/2", T: "[db1 db1@2 db1 db1@2 db1 db1@2 db1!4 db2 f2 db2]/2",
  U: "[bb1 bb1@2 bb1 bb1@2 eb1 eb1@2 eb1!4 db1 eb1 g1]/2", V: "eb1 eb1@2 ~@5",
})).s("gm_electric_bass_pick").gain(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@15 B ~@9 C D E ~ F ~ F ~ F ~ F ~ F ~ F G H G I ~@6 J>".pickRestart({
  A: "~@3 x ~@4", B: "~@6 x!2", C: "~@3 x", D: "x!2 ~@6", E: "~@4 x!2 ~@2", F: "~@2 x!2 ~ x ~@2", G: "~ x",
  H: "~@2 x ~ x!2 ~@2", I: "~@10 x!4 ~@2", J: "x!3 ~@5",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@12 A B A B A B A B A B A B A B A C ~@8 D E ~@25>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2 ~@2", D: "x!5 ~ x ~", E: "x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 A ~ A ~ A ~ A ~@15 B ~@9 C ~@14 B D B E ~ A ~ A ~ F ~>".pickRestart({
  A: "~ x ~@2", B: "~@5 x ~@2", C: "~@4 x!2 ~@2", D: "~@3 x ~@2 x ~", E: "~@8 x!2 ~@4 x!2", F: "~@2 x ~@4 x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A B A B A B A B ~@16 C ~@3 C ~@4 D ~@18 A B A B A B ~>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x!4 ~@4", D: "~ x ~@2",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@27 [~@3 x!2 ~@3] ~@33 [~@3 x] ~>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@13 C D C D C D C D C D C D E F E F B ~ B ~ B ~@2
>`.pickRestart({
  A: "~@4 x!12", B: "x", C: "x!3 ~", D: "x!2", E: "x ~@2 x ~@2 x ~", F: "~ x ~@6",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@8 x ~@54>").gain(0.64)

stack(alto_sax, overdriven_guitar, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride)