Strudelify

breathe íì

Lee Hi

KeyA♭ majorTempo62 bpm
0:00/0:00
// breathe íì — Lee Hi
// 62 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5917964; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(62/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.

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  A B C D E F G H E F I J K L M N O P Q R@2 S T U V W X Y A Z AA AB AC AD AE AF S AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT AQ AU AV AW AX@2 AY AZ BA BB AR BC BD@3 ~ A BE BF@2 BG
>`.pickRestart({
  A: "c3 f2 c3 f2 c3 f2 c3 f2 c3@4 ~ bb2 ab2 eb2", B: "c3 eb2 bb2 eb2 ab2 eb2 g2 bb1 eb2@2 ~@3 g2 ab2 bb2",
  C: "c3@3 ab2 c3@2 bb2@2", D: "bb2@4 bb2 eb2@2 bb2 eb2@8", E: "db2", F: "c2", G: "bb1", H: "ab1", I: "ab1 eb2",
  J: "[ab1,eb2] ~", K: "ab1!2 bb1@2", L: "bb1!2 ab1@2", M: "ab1@2 ab1 bb1", N: "c2@3 eb2 ab1@2 ab1 g1",
  O: "ab1!2 bb1!2", P: "bb1@2 eb2@2 ab1@2 ab1 eb2", Q: "ab1!4", R: "[ab1 eb2@3]/2", S: "db2!2", T: "bb1!2 ab1 ab2",
  U: "db2 ab2", V: "eb2 ab2 eb2 ab2 db2 ab2 eb2 ab2", W: "eb2@3 eb2 eb2@2 eb2@2",
  X: "eb2@4 bb1 eb2 ~ g2 ab2@2 eb2@2 eb2@2 ab2@2", Y: "db2 ab1 db2@2",
  Z: "c3 eb2 bb2 eb2 ab2 eb2 g2 bb1 eb2@2 ~@4 c3 db3", AA: "eb3@3 db3@2 c3@3 bb2@3 ab2@3 eb2@2",
  AB: "f2@2 g2 ab2 bb2@2 eb2@2", AC: "db2 ~ db2 ~", AD: "c2 ~ f2 eb2", AE: "bb1@2 ~@2 eb2@3 eb1", AF: "ab1@2 bb1 c2",
  AG: "c2@3 c2 f2@2 f2 f1", AH: "bb1@7 f1 bb1@6 c2@2", AI: "eb2@5 eb2 bb1@2 eb2@2 ~@2 d2@4",
  AJ: "db2@6 db2@2 db2@6 ab1 db2", AK: "c2@6 c2@2 f2@4 f2@3 f1", AL: "bb1@6 bb1@2 eb2@6 f1 bb1",
  AM: "ab1@6 ab1@2 bb1@4 f1 ab1 eb2 c2", AN: "db2@6 db2@2 db2@5 ab1 db2@2", AO: "c2@6 c2@2 f2@6 f1 c2",
  AP: "bb1@3 c2 eb2@2 eb1@2", AQ: "ab1@3 ab1 ~@3 g1 ab1 bb1@2 ab1 bb1 c2 eb2 ab1",
  AR: "db2@3 db2 ~@2 db2@2 db2@5 ab1 db2@2", AS: "c2@3 c2 ~ ab1 c2 ab2 f2@4 f1 ab1 c2 ab1",
  AT: "bb1@3 bb1 ~@2 bb1@2 eb2@4 eb1@4", AU: "db2@6 db2@2 db2@5 ab1 db2 ab1", AV: "c2@3 c2 c3@2 bb1@8 ab1 eb2",
  AW: "bb1@3 bb1 f2 ab1 c2 f2 bb1@2 c2@2 db2@2 f2@2", AX: "[eb2@5 f2 eb2 bb1 eb1@16 ~@8]/2",
  AY: "c3 db2 eb2 f2 ab2 bb2 c3@2 bb2@6 ~@2", AZ: "bb2 c2 db2 eb2@2 eb3@2 g2 ab2@4 g2@4",
  BA: "f2@4 db3 eb2 c3 eb2 bb2@4 eb2@3 eb1", BB: "ab1@3 c2 f2 ab1@3 ab1 bb1@2 ab1 bb1 c2 eb2 ab1",
  BC: "c2@3 c2 ~ ab1 c2 ab2 f2@8", BD: "[bb1 eb2@4 ~]/3", BE: "c3 eb2 bb2 eb2 ab2 eb2 g2 bb1 eb2@2 ~@4 c2 db2",
  BF: "[eb2@4 db2 c2 ab1 f1 f1@2 ab1@2 bb1@8 ~@11 eb2]/2", BG: "eb1",
})).s("gm_electric_bass_finger").gain(0.25)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  ~@12 A B C D E B F G@2 H I J K H I L M N O P H I Q K E I R S T U V W T U X Y Z AA X AB AC AD AE AF@2 AG AH AI AJ AK AL
  AM@2 AN@2 M N O AO AP
>`.pickRestart({
  A: "[f2,db3,f3,ab3,c4,f4]!2 [eb3,bb3,eb4,g4]@2", B: "[eb3,c4,eb4,g4]!2 [f2,c3,f3,ab3,c4,f4]@2",
  C: "[bb2,f3,ab3,db4,f4]@2 [eb3,bb3,eb4,g4]!2", // Bbm7 Eb
  D: "[ab2,c3,eb3,ab3,c4,ab4]@2 [eb3,bb3,db4,gb4] [ab2,c3,eb3,ab3,c4,ab4]", // Ab Ebm7 Ab
  E: "[db3,f3,ab3,db4,f4]!2 [eb3,bb3,eb4,g4]!2", F: "[bb2,f3,ab3,db4,f4]", G: "[eb3,bb3,eb4,g4]/2",
  H: "[f2,db3,f3,ab3,c4,f4]!2 [eb3,bb3,eb4,g4]!2", I: "[eb3,c4,eb4,g4]!2 [f2,c3,f3,ab3,c4,f4]!2",
  J: "[bb2,f3,ab3,db4,f4]!2 [eb3,bb3,eb4,g4]!2", // Bbm7 Eb
  K: "[ab2,c3,eb3,ab3,c4,ab4]!2 [eb3,bb3,db4,gb4] [ab2,c3,eb3,ab3,c4,ab4]", L: "[bb2,f3,ab3,db4,f4] [eb3,bb3,eb4,g4]",
  M: "[f2,db3,f3,ab3,c4,f4]", N: "[eb3,c4,eb4,g4]", O: "[f2,c3,f3,ab3,c4,f4] [bb2,f3,ab3,db4,f4]",
  P: "[eb3,c4,eb4,g4]@2 [f2,db3,f3,ab3,c4,f4] [eb3,bb3,eb4,g4]", Q: "[bb2,f3,bb3,db4,f4]!2 [eb3,bb3,eb4,g4]!2",
  R: "[bb2,f3,ab3,db4,f4]@3 [bb2,f3,ab3,db4,f4] ~@2 [bb2,f3,ab3,db4,f4]@2 [bb2,f3,ab3,db4,f4]@4 [bb2,f3,ab3,db4,f4]@4", // Bbm7
  S: "[eb3,bb3,eb4,g4]@3 [eb3,bb3,eb4,g4] [eb3,bb3,eb4,g4]@2 ~@2", // Eb
  T: "[f2,db3,f3,ab3,c4,f4]@4 [f2,db3,f3,ab3,c4,f4]@2 [f2,db3,f3,ab3,c4,f4]@2 [eb3,bb3,eb4,g4]@4 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]!2", // Dbmaj7 Eb
  U: "[eb3,c4,eb4,g4]@4 [eb3,c4,eb4,g4]@2 [eb3,c4,eb4,g4]!2 [f2,c3,f3,ab3,c4,f4]@2 [f2,c3,f3,ab3,c4,f4]@2 [f2,c3,f3,ab3,c4,f4]@2 [f2,c3,f3,ab3,c4,f4]@2", // Cm Fm
  V: "[bb2,f3,ab3,db4,f4]@4 [bb2,f3,ab3,db4,f4]@2 [bb2,f3,ab3,db4,f4]!2 [eb3,bb3,eb4,g4]@4 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]!2", // Bbm7 Eb
  W: "[ab2,c3,eb3,ab3,c4,ab4]!2 [ab2,c3,eb3,ab3,c4,ab4]@2 [eb3,bb3,db4,gb4]@2 [ab2,c3,eb3,ab3,c4,ab4]@2", // Ab Ebm7 Ab
  X: "[bb2,f3,ab3,db4,f4]@4 [bb2,f3,ab3,db4,f4]@2 [bb2,f3,ab3,db4,f4]!2 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]@2", // Bbm7 Eb
  Y: "[ab2,c3,eb3,ab3,c4,ab4]@4 [ab2,c3,eb3,ab3,c4,ab4]@2 [ab2,c3,eb3,ab3,c4,ab4]!2 [eb3,bb3,db4,gb4]@4 [ab2,c3,eb3,ab3,c4,ab4]@4", // Ab Ebm7 Ab
  Z: "[f2,db3,f3,ab3,c4,f4]@2 [f2,db3,f3,ab3,c4,f4]!2 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]!2", // Dbmaj7 Eb
  AA: "[eb3,c4,eb4,g4]@4 [eb3,c4,eb4,g4]!4 [f2,c3,f3,ab3,c4,f4]@3 [f2,c3,f3,ab3,c4,f4] [f2,c3,f3,ab3,c4,f4]@2 [f2,c3,f3,ab3,c4,f4]@2", // Cm Fm
  AB: "[ab2,c3,eb3,ab3,c4,ab4] ~ [ab2,c3,eb3,ab3,c4,ab4]!3 ~ [ab2,c3,eb3,ab3,c4,ab4]!2 [eb3,bb3,db4,gb4]@2 [eb3,bb3,db4,gb4]@2 [ab2,c3,eb3,ab3,c4,ab4]@2 [ab2,c3,eb3,ab3,c4,ab4]!2", // Ab Ebm7 Ab
  AC: "[db3,f3,ab3,db4,f4]@4 [db3,f3,ab3,db4,f4]@2 [db3,f3,ab3,db4,f4]!2 [eb3,bb3,eb4,g4]@4 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]!2", // Db Eb
  AD: "[eb3,c4,eb4,g4]@4 [eb3,c4,eb4,g4]@2 [f2,c3,f3,ab3,c4,f4]@6 [f2,c3,f3,ab3,c4,f4]!4", // Cm Fm
  AE: "[bb2,f3,ab3,db4,f4]@4 [bb2,f3,ab3,db4,f4]@2 [bb2,f3,ab3,db4,f4]!2 [bb2,f3,ab3,db4,f4]@4 [bb2,f3,ab3,db4,f4]@2 [bb2,f3,ab3,db4,f4]!2", // Bbm7
  AF: "[[eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]!4 [eb3,bb3,eb4,g4]@16 ~@8]/2", // Eb
  AG: "[f2,db3,f3,ab3,c4,f4] [eb3,bb3,eb4,g4]", AH: "[eb3,c4,eb4,g4] [f2,c3,f3,ab3,c4,f4]",
  AI: "[bb2,f3,ab3,db4,f4]@8 [eb3,bb3,eb4,g4]@4 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]!2", // Bbm7 Eb
  AJ: "[ab2,c3,eb3,ab3,c4,ab4]@4 [ab2,c3,eb3,ab3,c4,ab4]!4 [eb3,bb3,db4,gb4]@4 [ab2,c3,eb3,ab3,c4,ab4]@4", // Ab Ebm7 Ab
  AK: "[f2,db3,f3,ab3,c4,f4]@4 [f2,db3,f3,ab3,c4,f4]@2 [f2,db3,f3,ab3,c4,f4]!2 [eb3,bb3,eb4,g4]@4 [eb3,bb3,eb4,g4]!2 ~ [eb3,bb3,eb4,g4]", // Dbmaj7 Eb
  AL: "[eb3,c4,eb4,g4]@4 [eb3,c4,eb4,g4]@2 [eb3,c4,eb4,g4]!2 [f2,c3,f3,ab3,c4,f4]@4 [f2,c3,f3,ab3,c4,f4]@4", // Cm Fm
  AM: "[[bb2,f3,ab3,db4,f4] [eb3,bb3,eb4,g4]@2 [f2,db3,f3,ab3,c4,f4]]/2", // Bbm7 Eb Dbmaj7
  AN: "[[bb2,f3,ab3,db4,f4] [eb3,bb3,eb4,g4]@3]/2", AO: "[eb3,bb3,eb4,g4]", AP: "~ [ab2,c3,eb3,ab3]@15, [c4,ab4]",
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · acoustic guitar steel · "Acoustic Guitar" · soft notes
const acoustic_guitar_steel_2 = note("<A B C D A B E F A G H F ~@60>".pickRestart({
  A: "[f2,db3,f3,ab3,c4,f4]", B: "[eb3,c4,eb4,g4]", C: "[f2,c3,f3,ab3,c4,f4] [bb2,f3,ab3,db4,f4]",
  D: "[eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4] [ab2,c3,eb3,ab3,c4,ab4]", E: "[bb2,f3,ab3,db4,f4]",
  F: "[ab2,c3,eb3,ab3,c4,ab4]", G: "[eb3,c4,eb4,g4] [f2,c3,f3,ab3,c4,f4]", H: "[bb2,f3,ab3,db4,f4] [eb3,bb3,db4,g4]",
})).s("gm_acoustic_guitar_steel").gain(0.2)

stack(bass, acoustic_guitar_steel, acoustic_guitar_steel_2)