Strudelify

One Love

åµ

KeyB♭ majorTempo100 bpm
0:00/0:00
// One Love — åµ
// 100 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/8 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5888021; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · viola · "ヴィオラ"
const viola = note(`<
  ~ A@4 B C D E F G H I J@2 K L M N O P M Q R S T U V W X Y@2 Z@4 AA@2 AB@2 Z@4 AA@2 AC F G H I AD@2 AE AF AG AH AE AF
  AG AH AI AJ@2 AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY@2 AZ AX AY@2 BA BB BC BD BE BF BG BH BI BJ@2 AA@2 AB@2 Z@4
  AA@2 BK BL@2 Z@4 AA@2 AC F G H I BM BN BM@2 BO BP
>`.pickRestart({
  A: "~ bb3 f4 f3 c4 f3 bb3 f3", B: "[bb3,d4] g4", C: "bb4@3 g4 g4@4", D: "bb4 a4 bb4 f5 bb4 a4 bb4 f5",
  E: "bb4@2 a4@2 bb4@2 f5@2 bb4@2 a4@2 bb4@2 f4 [g4,a4]", F: "bb4@4 f5@3 d5 eb5@2 d5@2 c5@2 bb4@2",
  G: "f4@6 bb4 bb4@3 a4@2 bb4@2 c5@2", H: "d5@4 bb4@3 d5 g5@2 f5@2 eb5@2 d5@2", I: "eb5@2 bb4 d5 d5@2 c5@2",
  J: "[b4@14 ~ g4]/2", K: "g4@2 d4 g4 ~ a4@2 a4@5 ~@2 g4 a4", L: "b4@2 c5 b4 ~ a4@2 g4@5 ~@2 g4@2",
  M: "d5@2 c5 c5@2 b4@2 c5@3 b4@2 a4@2 g4@2", N: "a4@2 b4 b4@9 ~@2 g4!2", O: "g4@2 d4 g4@2 a4@2 a4@5 ~@2 g4 a4",
  P: "b4@2 c5 b4@2 g4@2 g4@5 ~@2 g4@2", Q: "a4@2 g4 g4@9 ~@4", R: "[c4,g4]!8", S: "[d4,a4]!6 [d4,a4]@2",
  T: "[d4,a4]!4 [d4,a4]@2 b4 d5", U: "f5@4 f5@2 f5 e5 e5@2 d5@2 c5@2 b4@2", V: "c5@2 ~@2 b4@2 c5 d5@3 g4@2 b4@2 d5@2",
  W: "eb5@3 eb5!3 f5 eb5", X: "[gb4,d5]", Y: "[~@12 d5@2 f5 g5@5 f5@2 d5 c5@5 bb4@2 c5@2]/2",
  Z: "[d5@2 f5@2 c5@2 d5 bb4@5 g4@2 d5 c5@5 c5@2 bb4 c5@3 d5@2 bb4@2 c5 d5@9 ~@4 d5@2 f5 g5@5 f5@2 d5 c5@5 d5@2 eb5@2]/4",
  AA: "[f5@2 eb5@2 d5@2 c5 bb4@5 g4@2 d5 c5@5 c5@2 d5@2 eb5@2 eb5@2 d5@2 c5@2]/2",
  AB: "[c5@2 bb4 bb4@9 d5@2 f5 g5@5 f5@2 d5 c5@5 bb4@2 c5@2]/2", AC: "c5@2 bb4 bb4@9 c4 [d4,eb4] f4 [g4,a4]",
  AD: "[b4@28 ~@2 [g3,d4]!2]/2", AE: "[g3,d4]@4 [g3,d4]@3 [g3,d4] ~ [a3,d4]@3 [a3,d4]@2 [a3,d4]@2",
  AF: "[g3,e4]@4 [g3,e4]@3 [g3,e4] ~ [b3,d4]@3 [b3,d4]@2 [b3,d4]@2", // C Bm
  AG: "[g3,e4]@4 [g3,e4]@3 [g3,e4] [g3,gb4]@2 [g3,gb4]@2 [g3,gb4] [g3,gb4]@2 [g3,gb4]", // C Gmaj7
  AH: "[g3,d4]@4 [g3,d4]@3 [g3,d4] ~ [g3,d4]@3 [g3,d4]@2 [g3,d4]@2", AI: "[g3,e4]!8", AJ: "[b3,gb4]!8",
  AK: "[ab3,d4]!8", AL: "[e4,a4] ~ [e4,a4] ~ [b3,d4] ~ [b3,d4] ~", AM: "[g3,b4]@2 [g3,b4]@2 [g3,b4]!4",
  AN: "[a4,b4]@3 [a4,b4]@3 [a4,b4]@4 [a4,b4]@2 [a4,b4]@2 [a4,b4]@2", // Asus2
  AO: "[a4,c5]@3 [a4,c5]@3 [a4,c5]@4 [a4,c5]@2 [a4,c5]@4", // Am
  AP: "[eb4,bb4]@4 [eb4,bb4] [eb4,bb4]@2 [eb4,bb4] [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2", // Eb5
  AQ: "[f4,a4]@4 [f4,a4] [f4,a4]@2 [f4,a4] [f4,a4]@2 [f4,a4]@2 [f4,a4] [f4,a4]@2 [f4,a4]", // F
  AR: "g4@4 g4 g4@2 g4 [f4,c5]@2 [f4,c5]@2 [f4,a4]@2 [f4,a4]@2", // F5 F
  AS: "[f4,bb4]@4 [f4,bb4] [f4,bb4]@2 [f4,bb4]!3 [f4,bb4]@2 [f4,bb4] [f4,bb4]@2 [f4,bb4]", // Bb5
  AT: "[eb4,bb4]@4 [eb4,bb4] [eb4,bb4]@2 [eb4,bb4] [f4,c5]@2 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2", // Eb5 F5
  AU: "[d4,bb4]@4 [f4,a4]@4 [d4,bb4]@2 [d4,bb4]@2 [d4,bb4]!4", // Gm F Gm
  AV: "g4@4 g4 g4@2 g4 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2", // F5
  AW: "[d4,bb4]@3 [d4,bb4] ~@2 [d4,bb4]@4 d5@2 d5@2 eb5@2", AX: "f5@2 ~@2 bb4@2 ~ c5@3 bb4@2 ~ bb4 c5 bb4",
  AY: "[f5@2 bb4@2 c5@3 bb4 ~@4 bb4 [c5,db5] bb4@6 f4 g4 bb4 bb4@3 g4@2 ~@2 bb3 d4]/2", // Dbmaj7
  AZ: "eb4@3 eb4@3 d4@2 [d4,bb4]@2 d5@2 d5@2 eb5@2", BA: "eb4@3 eb4@3 d4@6 eb4@4", BB: "f4 g4 a4 bb4",
  BC: "f4@2 c5@2 bb4 c5 d5 eb5", BD: "d5@3 bb4@3 g4@2", BE: "[f4,bb4]", BF: "a4", BG: "d5 eb4 g4 bb4 c5@4",
  BH: "d5@4 bb4 a4 g4@2", BI: "eb4@2 c4 eb4 [f4,bb4]@2 [f4,a4]@2",
  BJ: "[[f4,bb4]@8 ~@4 d5@2 f5 g5@5 f5@2 d5 c5@5 d5@2 eb5@2]/2", BK: "c5@2 bb4 bb4@9 ~@4",
  BL: "[[d4,bb4]@12 d5@2 f5 g5@5 f5@2 d5 c5@5 bb4@2 c5@2]/2", BM: "[d4,b4]!4",
  BN: "[d4,b4]@2 [d4,b4]@2 [d4,b4]@2 [d4,b4]!2", BO: "[d4,b4]", BP: "[d4,b4] ~@7",
})).s("gm_viola").gain(0.25)

// chords · viola · "ヴィオラ"
const viola_2 = note(`<
  A B@2 C@2 D E F G H I J K L M N O P Q N O P Q R S@2 T U V W X Y Z AA AB AC AD AE AF Y Z AA AB AC AD AE AF H I J K L AG
  AH AI AJ AK AL AM AJ AN AO AP AQ AR AS AT AU AV@2 AW@4 AX@2 AY AZ@2 BA BB AZ@2 BA BC BD BE BF BG BH ~ BI BJ BK AC AD
  AE AF Y Z AA AB AC AD AE AF BL Y Z AA AB AC AD AE BM H I J K BN BO BP BO BQ BR
>`.pickRestart({
  A: "~@14 [bb3,f4]!2", B: "[[bb3,f4]@28 ~@2 [bb3,f4]!2]/2", C: "[[bb3,f4]@7 ~]/2", D: "f4 [c4,eb4]", E: "~@3 eb4",
  F: "c4@3 g3", G: "f3", H: "[bb3,f4]@4 [bb3,f4]@3 [bb3,f4] [c4,g4]@2 [c4,g4]@6",
  I: "[bb3,f4]@4 [bb3,g4]@3 [bb3,g4] [bb3,g4]@2 [bb3,g4]@6", J: "[bb3,f4]@4 [bb3,f4]@3 [bb3,f4] [bb3,g4]@2 [bb3,g4]@6",
  K: "[c4,g4]@4 [c4,g4]@3 [c4,g4] [bb3,f4]@2 [bb3,f4]@2 [a3,f4]@2 [a3,f4]@2", L: "[g3,d4]@6 ~ [g3,d4]",
  M: "[g3,d4]@12 ~@2 [g3,d4]!2", N: "[g3,d4]@4 [g3,d4]@3 [g3,d4] ~ [a3,d4]@3 [a3,d4]@2 [a3,d4]@2",
  O: "[g3,e4]@4 [g3,e4]@3 [g3,e4] ~ [b3,d4]@3 [b3,d4]@2 [b3,d4]@2", // C Bm
  P: "[g3,e4]@4 [g3,e4]@3 [g3,e4] [g3,gb4]@2 [g3,gb4]@2 [g3,gb4] [g3,gb4]@2 [g3,gb4]", // C Gmaj7
  Q: "[g3,d4]@4 [g3,d4]@3 [g3,d4] ~ [g3,d4]@3 [g3,d4]@2 [g3,d4]@2", R: "[g3,e4]@4 ~@3 [g3,e4] [g3,e4]@2 [g3,e4]@6",
  S: "[b3,gb4]@4 ~@3 [b3,gb4] [b3,gb4]@2 [b3,gb4]@6", T: "[ab3,d4]@4 ~@3 [ab3,d4] [ab3,d4]@2 [ab3,d4]@6",
  U: "[e4,a4] ~ [e4,a4] ~ [b3,d4] ~ [b3,d4] ~", V: "[g3,b4]@2 [g3,b4]@2 [g3,b4]!4",
  W: "[a4,b4]@3 [a4,b4]@3 [a4,b4]@4 [a4,b4]@2 [a4,b4]@2 [a4,b4]@2", // Asus2
  X: "[a4,c5]@3 [a4,c5]@3 [a4,c5]@4 [a4,c5]@2 [a4,c5]@4", // Am
  Y: "[eb4,bb4]@4 [eb4,bb4] [eb4,bb4]@2 [eb4,bb4] [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2", // Eb5
  Z: "[f4,a4]@4 [f4,a4] [f4,a4]@2 [f4,a4] [f4,a4]@2 [f4,a4]@2 [f4,a4] [f4,a4]@2 [f4,a4]", // F
  AA: "g4@4 g4 g4@2 g4 [f4,c5]@2 [f4,c5]@2 [f4,a4]@2 [f4,a4]@2", // F5 F
  AB: "[f4,bb4]@4 [f4,bb4] [f4,bb4]@2 [f4,bb4]!3 [f4,bb4]@2 [f4,bb4] [f4,bb4]@2 [f4,bb4]", // Bb5
  AC: "[eb4,bb4]@4 [eb4,bb4] [eb4,bb4]@2 [eb4,bb4] [f4,c5]@2 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2", // Eb5 F5
  AD: "[d4,bb4]@4 [f4,a4]@4 [d4,bb4]@2 [d4,bb4]@2 [d4,bb4]!4", // Gm F Gm
  AE: "g4@4 g4 g4@2 g4 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2", // F5
  AF: "[d4,bb4]@3 [d4,bb4] ~@2 [d4,bb4]@4 [d4,bb4]@2 [d4,bb4]@2 [d4,bb4]@2", AG: "[g3,d4]@6 ~ g4",
  AH: "g4@2 d4 g4 ~ a4@2 a4@5 ~@2 g4 a4", AI: "b4@2 c5 b4 ~ a4@2 g4@5 ~@2 g4@2",
  AJ: "d5@2 c5 c5@2 b4@2 c5@3 b4@2 a4@2 g4@2", AK: "a4@2 b4 b4@9 ~@2 g4!2", AL: "g4@2 d4 g4@2 a4@2 a4@5 ~@2 g4 a4",
  AM: "b4@2 c5 b4@2 g4@2 g4@5 ~@2 g4@2", AN: "a4@2 g4 g4@9 ~@4", AO: "~@2 gb4 g4", AP: "a4 b4 c5 e5",
  AQ: "gb5@4 ~@2 b4 d5", AR: "f5@4 f5@2 f5 e5@3 d5@2 c5@2 b4@2", AS: "c5@2 ~@2 b4@2 c5 d5@3 g4@2 b4@2 d5@2",
  AT: "eb5@3 eb5!3 f5 eb5", AU: "[gb4,d5]", AV: "[~@12 d5@2 f5 g5@5 f5@2 d5 c5@5 bb4@2 c5@2]/2",
  AW: "[d5@2 f5@2 c5@2 d5 bb4@5 g4@2 d5 c5@5 c5@2 bb4 c5@3 d5@2 bb4@2 c5 d5@9 ~@4 d5@2 f5 g5@5 f5@2 d5 c5@5 d5@2 eb5@2]/4",
  AX: "[f5@2 eb5@2 d5@2 c5 bb4@5 g4@2 d5 c5@5 c5@2 d5@2 eb5@2 eb5@2 d5@2 c5@2]/2",
  AY: "c5@2 bb4 bb4@9 [d4,bb4]@2 [d4,bb4]@2", AZ: "[f4,bb4]@2 ~@2 [f4,bb4]@3 [f4,bb4] ~@2 [f4,bb4]@6",
  BA: "[d4,f4]@2 ~@2 [d4,f4]@3 [d4,f4] ~@2 [d4,f4]@6", // Dm
  BB: "[g3,eb4]@3 [g3,eb4] [g3,eb4]@2 [g3,eb4]@2 [g3,eb4]@4 [d4,bb4]@2 [d4,bb4]@2", // Cm Gm
  BC: "[g3,eb4]@3 [g3,eb4] [g3,eb4]@2 [g3,eb4]@2 [g3,eb4]@4 [bb3,f4]@4", // Cm Bb5
  BD: "[eb4,bb4]@2 ~@2 [eb4,bb4]@3 [eb4,bb4] ~ [eb4,bb4]@3 [eb4,bb4]@2 [eb4,bb4]@2", // Eb5
  BE: "[f4,a4]@2 ~@2 [f4,a4]@3 [f4,a4] ~ [d4,bb4]@3 [d4,bb4]@2 [d4,bb4]@2", // F Gm
  BF: "[eb4,c5]@6 [eb4,c5]!2 [eb4,c5]@6 [eb4,c5]@2", BG: "c5@6 ~ c5", BH: "[eb4,c5]", BI: "~ a3 bb3 a3",
  BJ: "g3@2 c4 g3", BK: "[bb3,f4]@2 [bb3,f4]@2 [bb3,f4]@2 [bb3,f4]@2 [bb3,f4]!8",
  BL: "[d4,bb4]@4 [d4,bb4]@2 ~ f4 f4@2 g4@3 bb4@3", BM: "[d4,bb4]@3 [d4,bb4] ~@2 [d4,bb4]@4 [d4,bb4]@2 [d4,bb4]!4",
  BN: "[g4,b4]@4 [g4,b4]@4 [g4,b4]@4 [g4,b4]@2 [g4,b4]!2", BO: "[g4,b4]@4 [g4,b4]@4 [g4,b4]@4 [g4,b4]!4",
  BP: "[g4,b4]@4 [g4,b4]@4 [g4,b4]@4 [g4,b4]!2 [g4,b4]@2", BQ: "[g4,b4]", BR: "[g4,b4] ~@7",
})).s("gm_viola").gain(0.25)

// other · cello · "チェロ"
const cello = note(`<
  ~ A B A C D E C@2 F G H I J@2 ~@3 K L M N O P Q R S T U V W X Y Z AA AB AC Z AD X Y Z AA AB AE Z AD F G H I J@2 ~@3 K
  L M N AF AG AH AI AJ T U V W X Y Z AA AB AC Z AK AL@2 AM AN AL@2 AM AO AP AQ AR AS AT AU AV AW AX AB AC Z AD X AY Z AA
  AB AE Z AD AZ X Y Z AA AB AE Z AD F G H I BA@4 BB BC
>`.pickRestart({
  A: "eb4@2 bb3@2 f4@2 bb3@2 eb4@2 d4 [d4,eb4] c4@2 bb3@2", B: "f3 bb3 a3 bb3 c4 f3 bb3 f3", C: "f4", D: "bb3 c3",
  E: "d3@3 eb3@5", F: "bb2@4 bb2@3 bb2 c3@2 c3@4 bb2 c3", G: "d3@4 d3@3 d3 eb3@2 eb3@4 d3 eb3",
  H: "f3@3 f3 f3@3 f3 g3@2 g3@4 f3 g3", I: "c3@4 c3@3 c3 f3@2 f3@2 c3@2 f3@2", J: "g3/2", K: "~@14 e3 gb3", L: "g3 gb3",
  M: "e3 d3", N: "c3 d3", O: "g2@4 ~ g2 a2 b2", P: "c3@2 ~@5 c3 c3@2 c3@2 ~@4", Q: "c3@2 ~@5 c3 c3@2 c3@2 d3@2 c3@2",
  R: "b2@2 ~@5 gb2 b2@2 b2@2 a2@2 b2@2", S: "gb3@2 e3@2 d3@3 c3 b2@2 b2@2 a2@2 f2@2", T: "a2 ~ a2 ~ g2 ~ g2 ~",
  U: "c3 ~ c3 ~ c3!4", V: "d3@3 c3 c3@2 b2@2 b2@2 g2@2 e2@2 d2@2", W: "f3@3 e3 e3@2 d3@2 d3@2 c3@2 b2@2 a2@2",
  X: "eb2@2 eb2 eb3 f2 f3 c3 f2", Y: "d2@2 d2 d3 bb2 a3 d3 g2", Z: "c2@2 c2 c3 f2 f3 c3 f3",
  AA: "bb2@2 bb2 bb3 bb2!2 bb3 bb2", AB: "eb2@2 eb2 eb3 f2 f3 c3 f3", AC: "[bb2,f3]@2 [a2,f3]@2 [g2,f3]@3 g2",
  AD: "[bb2,f3]@3 [bb2,f3] ~@2 [bb2,f3]@4 [bb2,f3]@2 [bb2,f3]@4", AE: "[bb2,f3]@2 [a2,eb3]@2 [g2,f3]@3 g2",
  AF: "g2@4 ~ g3 b3 d4", AG: "e4@4 c4@2 d4 e4@5 d4@2 e4@2", AH: "gb4@4 gb4@2 g4 gb4@3 e4@2 d4@2 c4@2",
  AI: "d4@4 b3@2 c4 d4@5 b3@2 a3@2", AJ: "ab3@4 a3@2 b3 d3", AK: "[bb2,f3]@3 [bb2,f3] ~@2 [bb2,f3]@6 [bb2,f3]@4",
  AL: "db3@2 c3 db3 db3@2 c3 db3 db3@3 db3@3 c3 db3", AM: "bb2@2 a2 bb2 bb2@2 a2 bb2 bb2@3 bb2@3 a2 bb2",
  AN: "bb2@3 bb2 bb2@2 a2 bb2 bb2@3 bb2 [bb2,f3]@4", AO: "bb2@3 bb2 bb2@2 a2 bb2 bb2@3 bb2 [bb2,d3]@2 [a2,d3] [bb2,d3]",
  AP: "eb3!2 bb2@2 eb3!2 bb2 eb3", AQ: "d3@3 d3 a3@4 g3@2 g3@2 d3@2 g3@2", AR: "ab2@4 eb3@3 ab3!3 bb3@2 ab3@2 eb3@2",
  AS: "f3@2 f3@2 c3@2 c3 f3!3 c3@2 f3@2 c3@2", AT: "f2", AU: "eb3 f3", AV: "d3 g3", AW: "c3 f3", AX: "bb2",
  AY: "d2@4 d2@2 d3@2 bb2!2 a3@2 d3@2 g2@2", AZ: "[bb2,f3]!16", BA: "[[g2,g3]@14 ~ [g2,g3]]/2", BB: "[g2,g3]!16",
  BC: "[g2,g3] ~@7", // G
})).s("gm_cello").gain(0.25)

stack(viola, viola_2, cello)