Strudelify

Just Say Hello

Rene Froger

KeyA♭ majorTempo98 bpm
0:00/0:00
// Just Say Hello — Rene Froger
// 98 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 95 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · "FINGERDBAS"
const bass = note(`<
  ~@4 A B C D E F G H I F G J K L I M N O P Q R S T U R S T V W X Y Z F G H I F G J K L I M N O P Q R S T U R S T V W X
  Y AA AB AC AD AE AF G AG AH AI AJ AK AL AI AM AK AN AI AJ AK AL AI AO AK AP AQ AR AS AR AQ AR AS AT
>`.pickRestart({
  A: "ab1 ~@2 ab1 ~@2 ab1@3 ~@2 ab1 ~@2 ab1 ~@2 ab1 c2@6", B: "f1 ~@2 f1 ~@2 f1@4 ~ f1 ~@2 f1 ~@2 f1 f1@3 eb2@3",
  C: "db2 ~@2 db2 ~@2 db2@3 ~@2 db2 ~@2 db2 ~@2 db2 db2@3 c2@3", D: "bb1 ~@2 bb1 ~@2 bb1@5 eb2@6 ~ eb2@2 ~ g1@2 ~",
  E: "f1 ~@2 f1 ~@2 f1@3 ~@2 f1 ~@2 f1 ~@2 f1 f2@6", F: "eb2 ~@2 eb2 ~@2 eb2@4 ~ eb2 ~@2 eb2 ~@2 eb2 eb2@6",
  G: "db2 ~@2 db2 ~@2 db2@3 ~@2 db2 ~@2 db2 ~@2 db2 db2@6", H: "eb2 ~@2 eb2 ~@2 eb2@3 ~@2 c2 ~@2 c2 ~@2 c2 c2@6",
  I: "f2 ~@2 f2 ~@2 f2@3 ~@2 f2 ~@2 f2 ~@2 f2 f2@6", J: "eb2 ~@2 eb2 ~@2 eb2@3 ~@2 eb2 ~@2 eb2 eb2@2 ~ f2@2 ~ g2@3",
  K: "ab2 ~@2 ab2 ~@2 ab2@3 ~@2 ab2 ~@2 ab2 ~@2 ab2!2 ~@5", L: "g2 ~@2 g2 ~@2 g2@4 ~ g2 ~@2 g2 ~@2 g2 g2@3 eb2@3",
  M: "c2 ~@2 c2 ~@2 c2@3 c2 ~ c2 ~@2 c2 ~@2 c2 c2@3 ~@3", N: "db2 ~@2 db2 ~@2 db2@3 ~@2 db2 ~@2 db2 ~@2 db2!2 ~@4 eb2",
  O: "ab2 ~@2 ab2 ~@2 ab2@4 ~ ab2 ~@2 ab2 ~@2 ab2 ab2@6", P: "gb2 ~@2 gb2 ~@2 gb2@3 ~@2 gb2 ~@2 gb2 ~@2 gb2 gb2@3 b1@3",
  Q: "c2 ~@2 c2 ~@2 c2@3 ~@2 eb2 ~@2 eb2 eb2@2 ~ eb2@2 ~ g2@3", R: "ab2 ~@2 ab2 ~@2 ab2@3 ~@2 ab2 ~@2 ab2 ab2@2 ~ c2@6",
  S: "f2 ~@2 f2 ~@2 f2@4 ~ f2 ~@2 f2 ~@2 f2 f2@3 eb2@3",
  T: "db2 ~@2 db2 ~@2 db2@3 ~@2 db2 ~@2 db2 db2@2 ~ db2@2 ~ c2@3",
  U: "bb1 ~@2 bb1 ~@2 bb1@4 ~ eb2 ~@2 eb2 eb2@2 ~ eb2@2 ~ g2@2 ~",
  V: "bb1 ~@2 bb1 ~@2 bb1@4 ~ eb2 ~@2 eb2 eb2@2 ~ eb2@3 d2@3",
  W: "gb1 ~@2 gb1 ~@2 gb1@3 ~@2 db2 ~@2 db2 ~@2 db2 db2@3 ab1@3",
  X: "ab2 ~@2 ab2 ~@2 ab2@4 ~ ab2@2 ~ ab2@2 ~ ab2 ab2@3 c2@3", Y: "gb1 ~@2 gb1 ~@2 gb1@3 ~@2 db2 ~@2 db2!2 ~@2 db2@6",
  Z: "f2 ~@2 f2 ~@2 f2@3 ~@2 f2 ~@2 f2 ~@2 f2!2 ~@5", AA: "ab2 ~@2 ab2 ~@2 ab2@3 ~@2 eb2 ~@2 eb2 eb2@3 ab2@3 eb2@3",
  AB: "db2 ~@2 db2 ~@2 db2@4 ~ db2 ~@2 db2 ~@2 db2 db2@6", AC: "gb2 ~@2 gb2 ~@2 gb2@3 ~@2 gb2 ~@2 gb2 ~@2 gb2 gb2@6",
  AD: "c2 ~@2 c2 ~@2 c2@3 ~@2 c2 ~@2 c2 ~@2 c2 c2@6", AE: "f2 ~@2 f2 ~@2 f2@3 ~@2 f2 ~@2 f2 ~@2 f2 f2@3 c2@2 ~",
  AF: "db2@2 ~ db2@2 ~ db2@3 ~@2 db2 ~@2 db2 ~@2 db2 db2@6", AG: "bb1@2 ~ bb1@2 ~ bb1@3 ~@2 bb1 ~@2 bb1 ~@2 bb1 bb1@6",
  AH: "eb2 ~@2 eb2 ~@2 eb2@3 ~@2 e2 ~@2 e2 ~@2 e2 e2@2 ~ ab2@2 ~", AI: "a2 ~@2 a2 ~@2 a2@3 ~@2 a2 ~@2 a2 a2@2 ~ db2@6",
  AJ: "gb2 ~@2 gb2 ~@2 gb2@4 ~ gb2 ~@2 gb2!2 ~ gb2 gb2@3 e2@3",
  AK: "d2 ~@2 d2 ~@2 d2@3 ~@2 d2 ~@2 d2 d2@2 ~ d2@2 ~ db2@3", AL: "b1 ~@2 b1 ~@2 b1@4 ~ e2 ~@2 e2!2 ~ e2 e2@2 ~ ab2@3",
  AM: "gb2 ~@2 gb2 ~@2 gb2@4 ~ gb2 ~@2 gb2 ~@2 gb2 gb2@3 e2@3", AN: "b1 ~@2 b1 ~@2 b1@4 ~ e2 ~@2 e2 e2@2 ~ e2@3 ab2@3",
  AO: "gb2 ~@2 gb2 ~@2 gb2@4 ~ gb2 ~@2 gb2 ~@2 gb2 gb2@3 db2@3", AP: "b1 ~@2 b1 ~@2 b1@4 ~ e2 ~@2 e2 e2@2 ~ e2@3 gb1@3",
  AQ: "g1 ~@2 g1 ~@2 g1@3 ~@2 d2 ~@2 d2 ~@2 d2 d2@3 a1@3", AR: "a2 ~@2 a2 ~@2 a2@4 ~ a2@2 ~ a2@2 ~ a2 a2@3 db2@3",
  AS: "g1 ~@2 g1 ~@2 g1@3 ~@2 d2 ~@2 d2 d2@2 ~ d2@3 a1@3", AT: "a2 ~@2 a2 ~@2 a2@4 ~ a2@2 ~ a2@2 ~ a2 a2@3 ~@3",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B A B A B A C D@2 E F D@2 E G H I D J K L M N O D E P O D E P Q R Q D@2 E F D@2 E G H I D J K L M N O D E P O D E P
  Q R Q ~@9 S T U V S T U V S T U V S T U V W X W X W X W X
>`.pickRestart({
  A: "[ab3,ab4] ~@2 [ab3,ab4] ~@2 [ab3,ab4]@2 ab3 [ab3,ab4] ~ [ab3,ab4] ~@2 [ab3,ab4] ~@2 [ab3,ab4] [ab3,ab4]@2 [ab3,ab4]@2 ~ [ab3,ab4]", // Ab
  B: "[ab3,ab4]@2 ~ [ab3,ab4]@2 ~ [ab3,ab4]@2 ab3 [ab3,ab4]@2 [ab3,ab4] ab3 ~ [ab3,ab4] ~@2 [ab3,ab4] [ab3,ab4]@2 [ab3,ab4]!2 ~ [ab3,ab4]", // Ab
  C: "[ab3,ab4]@2 ~ [ab3,ab4]@2 ~ [ab3,ab4]@2 ab3 [ab3,ab4]@2 [ab3,ab4] ab3 ~ [ab3,ab4] ~@2 [ab3,ab4] [ab3,ab4]@2 [ab3,ab4]!2 ~@2", // Ab
  D: "~@3 [c4,f4,ab4] ~@5 [c4,f4,ab4] ~@5 [c4,f4,ab4] ~@5 [c4,f4,ab4] ~@2", // Fm
  E: "~@3 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@2", // Db
  F: "~@3 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@5 [c4,e4,g4] ~@5 [c4,e4,g4] ~@2", // Eb C
  G: "~@3 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@2", // Eb
  H: "~@3 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@2", // Ab
  I: "~@3 [f4,g4,bb4] ~@5 [f4,g4,bb4] ~@5 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@2", // Gm7 Eb
  J: "~@3 [f4,g4,c5] ~@5 [f4,g4,c5] ~@5 [e4,g4,c5] ~@5 [e4,g4,c5] ~@2", // Fsus2 C
  K: "~@3 [ab3,db4,f4] ~@5 [ab3,db4,f4] ~@5 [ab3,db4,f4] ~@5 [ab3,db4,f4] ~@2", // Db
  L: "~@3 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [db4,f4,ab4] ~@5 [c4,eb4,ab4] ~@2", // Ab Db Ab
  M: "~@3 [db4,gb4,ab4] ~@5 [db4,gb4,ab4] ~@5 [db4,gb4,ab4] ~@5 [db4,gb4,ab4] ~@2", // Dbsus4
  N: "~@3 [e4,g4,c5] ~@5 [e4,g4,c5] ~@5 [eb4,bb4,eb5] ~@5 [eb4,bb4,eb5] ~@2", // C Eb5
  O: "~@3 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [bb3,eb4,ab4] ~@2", // Ab Ebsus4
  P: "~@3 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@5 [bb3,eb4,g4] ~@5 [bb3,eb4,g4] ~@2", // Db Eb
  Q: "~@3 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@5 [ab3,db4,f4] ~@5 [ab3,db4,f4] ~@2", // Gb Db
  R: "[ab3,ab4] ~@2 [ab3,ab4] ~@2 [ab3,ab4]@2 ab3 [ab3,ab4] ~ [ab3,ab4] ~@2 [ab3,ab4] ~@2 [ab3,ab4] [ab3,ab4]@2 [ab3,ab4]@2 ~@2", // Ab
  S: "~@3 [db4,e4,a4] ~@5 [db4,e4,a4] ~@5 [db4,e4,a4] ~@5 [b3,e4,a4] ~@2", // A Esus4
  T: "~@3 [db4,gb4,a4] ~@5 [db4,gb4,a4] ~@5 [db4,gb4,a4] ~@5 [db4,gb4,a4] ~@2", // Gbm
  U: "~@3 [d4,gb4,a4] ~@5 [d4,gb4,a4] ~@5 [d4,gb4,a4] ~@5 [d4,gb4,a4] ~@2", // D
  V: "~@3 [d4,gb4,a4] ~@5 [d4,gb4,a4] ~@5 [b3,e4,ab4] ~@5 [b3,e4,ab4] ~@2", // D E
  W: "~@3 [b3,d4,g4] ~@5 [b3,d4,g4] ~@5 [a3,d4,gb4] ~@5 [a3,d4,gb4] ~@2", // G D
  X: "[a3,a4] ~@2 [a3,a4] ~@2 [a3,a4]@2 a3 [a3,a4] ~ [a3,a4] ~@2 [a3,a4] ~@2 [a3,a4] [a3,a4]@2 [a3,a4]@2 ~@2", // A
})).s("gm_electric_guitar_clean").gain(0.23).pan(0.3)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D A B C E F G H I F G H J K L M N O P Q R A B S E A T U V W X Y F G H Z AA G H J K L M N O P Q R A B S E A T U
  AB W X Y AC AD AE AF AG AH AI AJ AK AL AM AN AO AL AM AN AO AL AM AN AP AL AQ AR AS AT AU AT AU AT AU AT AV
>`.pickRestart({
  A: "[ab2,eb3,ab3,c4]@17 ~ [c2,eb3,ab3,bb3,eb4]@6", B: "f2@6 f3 eb2, [eb3,ab3,c4]@23 ~",
  C: "ab3@6 ab3 f2, [db2,f3,db4]@11 ~", // Db
  D: "[bb2,f3]@13 [eb3,ab3,bb3]@4 ~ [eb3,g3,bb3]@2 ~ [eb3,g3,bb3,eb4]@3, [ab3,db4]@11 ~@2 eb2@10 ~, ~@13 eb4@7 ~@4", // Bb5 Ebsus4 Eb Db5
  E: "[bb2,f3,ab3,db4]@10 [eb3,ab3,bb3,eb4]@7 ~ [eb3,g3,bb3,eb4]@6, ~@5 eb2@7", // Bbm7 Ebsus4 Eb
  F: "f3@16 ~@5 f2@3, [ab3,c4]@23 ~, f2@5 ~, ~@18 f3@5 ~", G: "f3@17 ~@4 eb2@3, [ab3,c4]@23 ~, eb2@5 ~, ~@18 eb3@5 ~",
  H: "f3@17 ~@4 db2@3, [ab3,db4]@23 ~, db2@5 ~, ~@18 f3@5 ~", // Db5
  I: "[eb2,g3,bb3,eb4]@5 ~@4 [g3,c4,g4]@3, ~@10 [g3,c4,e4]@7 ~@7, ~@11 c2@13", // Eb C5 C
  J: "[g3,bb3,eb4]@2 [g3,bb3,eb4]@3 [eb2,eb3,eb4] [f2,f3,f4] [g2,g3,g4], eb2@7 ~@5", K: "[c4,eb4,ab4]@7 ~, ab2@23 ~",
  L: "[f3,bb3,f4,g4]@10 ~ [bb3,eb4,g4]@11 ~@2, g2@23 ~, ~@11 eb3@13", M: "[ab3,c4,f4]@7 ~, f2@23 ~",
  N: "[g3,c4,f4]@5 ~@4 e3@3, c3@17 ~@7, ~@11 [g3,c4,e4]@11 ~@2", O: "[db3,ab3,db4,f4]@11 ~",
  P: "[ab3,c4,eb4]@10 [ab3,db4,f4]@7 ~ [ab3,c4,eb4]@6, ab2", Q: "[gb3,bb3,db4]@7 ~, gb2",
  R: "c2@5 ~ c2@4 [eb2,g3,bb3,eb4]@4 ~ [eb2,eb3]@3 [f2,f3,bb3,eb4]@3 [g2,g3,bb3,db4,eb4]@3, [g3,c4,e4]@10 ~@5 [bb3,eb4]@2 ~@7", // Eb Ebsus2 Eb7 C Eb5
  S: "[f3,ab3,db4]@6 ~ f2, db2@11 ~, ~@18 [f3,ab3,db4]@5 ~", T: "f2@6 f3 [eb2,eb3,ab3,c4], [eb3,ab3,c4]@5 ~",
  U: "[f3,ab3,db4]@20 ~ [f2,f3,ab3,db4]@3, db2@7 ~", // Db
  V: "[bb2,f3,ab3,db4]@10 [eb3,ab3,bb3,eb4]@7 ~ [eb3,g3,bb3,eb4]@3 [eb3,g3,bb3]@3, ~@10 eb2@13 ~", // Bbm7 Ebsus4 Eb
  W: "[gb2,db3,gb3,bb3]@10 ~ [db2,db3,f3,ab3]@12 ~", // Gb Db
  X: "[ab2,eb3,ab3] ~@2 [ab2,eb3,ab3] ~@2 [ab2,eb3,ab3]@3 ~@2 [ab2,eb3,ab3] ~@2 [ab2,eb3,ab3] ~@2 eb3 [eb3,ab3]@3 c3@3, ~@17 ab2@4 ~@3", // Ab5
  Y: "[gb2,db3,gb3,bb3]@11 [db2,db3,f3,ab3]@12 ~", // Gb Db
  Z: "[eb2,g3,bb3,eb4]@10 ~@8 g4@3 g4@3, ~@10 [g3,c4,e4]@7 ~ [g3,c4]@6, ~@11 c2@13", // Eb C C5
  AA: "f4@16 ~@5 f2@3, [ab4,c5]@23 ~, f2@5 ~, ~@18 f3@5 ~", // Ab
  AB: "[bb2,f3,ab3,db4]@10 [eb3,ab3,bb3,eb4]@7 ~ [eb3,g3,bb3,eb4]@3 [eb3,g3,bb3]@3, ~@5 eb2@7", // Bbm7 Ebsus4 Eb
  AC: "[ab2,ab3,c4,eb4]@2 [eb2,gb3,bb3,db4] [ab2,ab3,c4,eb4]", AD: "[db3,f3,ab3,c4]@7 ~, db2@23 ~",
  AE: "[gb2,gb3,bb3,db4,e4]@23 ~", AF: "[c3,g3,bb3,c4,eb4]@23 ~", AG: "[f2,g3,bb3,c4,eb4]@19 ~@2 [eb2,eb3,ab3,c4]@3",
  AH: "[db2,db3,f3,ab3,c4]", AI: "[db2,db3,e3,ab3,bb3]@23 ~", AJ: "[f3,ab3,bb3,eb4]@9 ~ [f3,ab3,bb3,d4]@13 ~, bb2",
  AK: "[eb2,eb3,ab3,bb3,eb4]@10 ~ [a3,e4]@13, ~@10 [e2,e3,b3]@13 ~", AL: "[a2,e3,a3,db4]@17 ~ [db2,e3,a3,b3,e4]@6",
  AM: "gb2@6 gb3 e2, [e3,a3,db4]@23 ~", AN: "[gb3,a3,d4]@6 ~ gb2, d2@11 ~, ~@18 [gb3,a3,d4]@5 ~",
  AO: "[b2,gb3,a3,d4]@10 [e3,a3,b3,e4]@7 ~ [e3,a3,db4] ~@2 [e3,b3] ~@2, ~@5 e2@7, ~@21 ab3@2 ~", // Bm7 Esus4 A E5
  AP: "[b2,gb3,a3,d4]@10 [e3,a3,b3,e4]@7 ~ [e3,ab3,b3,e4]@6, ~@5 e2@7", AQ: "gb2@6 gb3 [e2,e3,a3,db4], [e3,a3,db4]@5 ~",
  AR: "[gb3,a3,d4]@20 ~ [gb2,gb3,a3,d4]@3, d2@7 ~", // D
  AS: "[b2,gb3,a3,d4]@10 [e3,a3,b3,e4]@7 ~ [e3,ab3,b3,e4]@3 [e3,ab3,b3]@3, ~@5 e2@7", // Bm7 Esus4 E
  AT: "[g2,d3,g3,b3]@10 ~ [d2,d3,gb3,a3]@12 ~", // G D
  AU: "[a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@3 ~@2 [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 e3 [e3,a3]@3 db3@3, ~@17 a2@4 ~@3", // A5
  AV: "[a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@3 ~@2 [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 e3 [e3,a3]@3 ~@3, ~@17 a2@4 ~@3", // A5
})).s("gm_piano").gain(0.42)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@5 A ~@16 B C ~ A ~ D ~ A ~ D ~@2 E ~@14 B C ~ A ~ D ~ A ~ D ~@2 E F ~@3 G@2 H ~@2 I J K L M J K L I J K L M J K N O
  P O P O P Q R
>`.pickRestart({
  A: "~@18 [bb3,bb4]@2 [ab3,ab4] [f3,f4]@2 [ab3,ab4]", B: "~@3 ab4 ~ [db4,gb4]@3, gb3@23 ~, gb4@7 ~@5, ~ bb4",
  C: "[g3,c4,g4,bb4,e5]@11 ~@4 [eb3,eb4]@3 [f3,f4]@3 g4@2 ~, ~@21 g3 ~@2", // C7 Eb F
  D: "~@14 [eb3,eb4]!2 ~ [eb3,eb4] [f3,f4] ~ [ab3,ab4] [bb3,bb4]@2 [ab3,ab4]", // Eb F Ab Bb Ab
  E: "[gb3,db4,gb4]!2 [f3,db4,f4,ab4]@2, bb4 ~", F: "[eb3,c4,eb4,ab4]@2 [gb3,db4,gb4] [ab3,eb4,ab4]",
  G: "[~@18 f4@2 g4 ab4@2 ~@12 ab4@13, ~@23 db4@24 ~, ~ [ab3,c4,f4]]/2", // Fm
  H: "[db4,e4]@3 [e3,bb3]@3 [bb3,db4]@3 [db4,e4] ~@14, [ab4,bb4]@5 ~@7", // Dbm Edim Bbm Dbm Absus2
  I: "~@3 [e4,a4,db5] ~@2 [e4,a4,db5] ~@2 [e4,a4,db5] ~@2 db5@6 [e4,ab4,b4] ~@5, ~@5 [e4,a4]@4 ~@3", // A E A5
  J: "~@3 [db4,gb4,a4] ~@2 [db4,gb4,a4] ~@2 [db4,gb4,a4] ~@2 db5@4 [db4,gb4,a4,db5] ~@7, ~@5 [db4,gb4,a4]@3 ~@4", // Gbm
  K: "[d4,gb4,a4,d5] ~@2 [gb4,a4,d5] ~@2 [gb4,a4,d5] ~@2 [d4,gb4,a4,d5] ~@2 d5@6 [d4,e4,a4,db5]@6, ~@5 [d4,gb4,a4]@4 ~@3", // D A D
  L: "[d4,e4,a4,b4]@11 [e4,ab4]@3 [b3,e4,ab4]!2 ~@2 [db4,gb4,a4] ~@2 [e4,ab4,b4] ~@2, ~@11 b4@6 ~@7", // Dsus2 E Gbm E
  M: "[e4,a4,db5] ~@2 [e4,a4,db5] ~@2 [e4,a4,db5] ~@2 [e4,a4,db5] ~@2 db5@6 [e4,ab4,b4] ~@5, ~@5 [e4,a4]@4 ~@3", // A E A5
  N: "[d4,e4,a4,b4]@11 [e4,ab4,b4]@13", O: "[b3,d4,g4]@6 [g3,d4,g4,b4,d5]@5 ~ [gb3,d4,gb4,d5]@12, ~@11 a4@13",
  P: "~@14 [e3,e4]!2 ~ [e3,e4] [gb3,gb4] ~ [a3,a4] [b3,b4]@2 [a3,a4]", // E Gb A B A
  Q: "[b3,d4,g4]@6 [g3,d4,g4,b4,d5]@5 ~ d5@6 d5@6, ~@11 a4@12 ~, ~ [gb3,d4,gb4]", // G D
  R: "[e3,a3,e4,a4,db5,a5] ~@2 [e3,a3,e4,a4,db5,a5] ~@2 [e3,a3,e4,a4,db5,a5]@3 ~ e3 [a3,e4,a4,db5,a5] ~@2 [e3,a3,e4,a4,db5,a5] ~@2 [e3,a3,e4,a4,db5,a5]!2 ~@5", // A
})).s("gm_brass_section").gain(0.42).pan(0.6)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  ~@4 A B C D ~@8 E F G@2 H I J K L B C M L B C N@2 O@2 P@4 Q@4 E F R@2 S I T K L B C M L B C N@2 O@2 U V@2 W X Y Z AA
  AB AC AD AE AF AG AD AE AF AG AD AE AF AG AD AE AH@2 AI@6 AJ
>`.pickRestart({
  A: "[c4,eb4]@3 [eb4,ab4]", B: "[ab3,c4]@6 [bb3,db4] [c4,eb4]", C: "[db4,f4]@3 [c4,eb4]", D: "[ab3,db4]@11 ~@13",
  E: "[c4,eb4]", F: "f4@5 eb4@7, bb3", G: "[[ab3,c4]@23 ~ d4@11 [c4,e4]@13, ~@23 c5@24 ~, ~@23 bb3@11 ~@14]/2",
  H: "[f3,db4,f4]@17 [f3,eb4]@3 ~ [g3,db4]@3, db5 ~", I: "[c4,eb4]@10 ~ f4@6 ~ c4@6, ab3, ~@10 db4@7 eb4@6 ~",
  J: "ab3@10 ~@5 db4@3 c4@3 bb3@3, bb3@7 ~, db4@5 ~@3, ~@10 gb3@13 ~", K: "[g3,c4]@10 [ab3,eb4]@11 [g3,db4]@3",
  L: "[c4,eb4]@3 [eb4,g4]", M: "[ab3,db4]@5 [bb3,eb4]@7",
  N: "[[ab3,db4]@10 [bb3,eb4]@13 ~ db4@10 [ab3,db4]@13 ~, ~@23 bb3@10 ~@15]/2", // Db5 Eb5 Db5
  O: "[ab3@3 ab3@3 [ab3,eb4]@4 ab3@2 ~ [ab3,eb4] ~@2 ab3 eb4 [ab3,eb4]@3 ~@3 db4@10 [ab3,db4]@13 ~, eb4 ~@2 eb4 ~@6 eb4 ~@12 bb3@10 ~@15]/2", // Ab5 Db5
  P: "[ab3@24 g3@10 f3@14 ab3@23 [g3,bb3]@11 e3@6 c4@7 ~, c4@72 ~@10 g3@13 ~]/4", // Gm
  Q: "[ab3@24 g3@10 f3@14 ab3@18 [ab3,bb3]@3 [ab3,c4]@2 [g3,bb3]@15 ~ [bb3,eb4]@3 [g3,db4]@6, c4@11 ~@5]/4", // Absus2 Ab Gm Eb5 Gdim
  R: "[~@12 ab4@11 ~ d4@11 [c4,e4]@13, [ab3,c4]@23 c5@24 ~, ~@23 bb3@11 ~@14]/2", // C Ab
  S: "[f3,db4,f4]@17 [f3,eb4]@3 ~ [g3,db4]@3, db5 ~@3", // Db F7 Gdim
  T: "ab3@11 ~@4 db4@3 c4@3 bb3@3, bb3@7 ~, db4@5 ~@3, ~@11 gb3@12 ~",
  U: "[ab3,eb4]@11 ~ [gb3,bb3,db4]@6 [ab3,c4,eb4]@6", // Ab5 Gb Ab
  V: "[[ab3,c4,db4,f4]@12 ~@5 [ab4,ab5]@6 ~ bb5@15 [c5,c6]@3 [bb4,bb5]@3 [ab4,ab5]@3, ~@23 bb4@15 ~@10]/2", // Dbmaj7 Ab C Bb Ab
  W: "[eb5,eb6]", X: "[g4,bb4] [ab4,c5] [g4,bb4] [f4,ab4]", Y: "[c4,f4]", Z: "[db4,e4]", AA: "[bb3,eb4]@5 [bb3,d4]@7",
  AB: "[bb3,eb4]@5 [b3,e4]@7", AC: "db4@17 ~ [e4,ab4]@6, e4@7 ~@5", AD: "[a3,db4]@6 [b3,d4] [db4,e4]",
  AE: "[d4,gb4]@3 [db4,e4]", AF: "[a3,d4]@5 [b3,e4]@7", AG: "[db4,e4]@3 [e4,ab4]",
  AH: "[[a3,d4]@10 [b3,e4]@13 ~@11 [a3,gb4]@13 ~, ~@23 g4@10 ~@15, ~@12 b3@7 ~@5]/2", // D5 E5 D
  AI: "[[a3,e4] ~@2 [a3,e4] ~@2 [a3,e4]@3 ~ [a3,e4] ~@2 [a3,e4] ~@2 a3 e4 [a3,e4]@3 ~@3 b3@10 [a3,gb4]@13 ~, ~@23 g4@10 ~@15]/2", // A5 D
  AJ: "[a3,e4] ~@2 [a3,e4] ~@2 [a3,e4]@3 ~ [a3,e4] ~@2 [a3,e4] ~@2 a3 e4 [a3,e4]@3 ~@3", // A5
})).s("gm_synth_strings_2").gain(0.22)

// other · music box
const music_box = note(`<
  ~@39 A@3 B C D C E F G H ~@13 I J K L I ~ M N O P ~@2 Q R ~@2 Q P ~@2 S T ~@2 U ~ U ~ V ~ U ~
>`.pickRestart({
  A: "~@12 f6@4 ~ ab6@4 c7@3", B: "bb6@9 ~@6 g6@3 ab6@2 ~ bb6@2 ~", C: "c7@7 ~@17", D: "~@11 eb7@8 ~@5", E: "f7@7 ~@17",
  F: "db7@3 ~@5", G: "eb7@7 ~@17", H: "bb6@7 ~@17", I: "f6@11 ~@13", J: "e6@13 ~@11", K: "eb6@7 ~@17",
  L: "bb6@6 c7@5 ~ bb6@6 ab6@5 ~", M: "c7@5 ~@6 bb6@9 ~@4", N: "eb7@7 ~@3 e7@5 ~@9", O: "db7@12 ~@6 e7@5 ~",
  P: "a6@5 ~@3", Q: "db7@15 ~@3 e7@5 ~", R: "a6 ~", S: "db7@7 ~@2 e7@2 ~", T: "a6@7 ~@5", U: "b6@3 ~@3 a6@5 ~@13",
  V: "b6@3 ~@3 a6@4 ~@14",
})).s("gm_music_box").gain(0.2).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@4 A@29 B A@16 C A@9 B A@9 C A@17 B A B A B D B>".pickRestart({
  A: "x ~@5 x ~@4 x ~@2 x ~@2 x!2 ~@5", B: "x ~@2 x ~@2 x ~@4 x ~@2 x ~@2 x!2 ~@5", C: "x ~@5 x ~@4 x ~@3 x ~@8",
  D: "x ~@5 x ~@4 x ~@12",
})).gain(0.56)

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

// drums · clap
const clap = s("cp").struct("<[~ x ~ x ~ x ~ x]!94 [~ x ~ x ~ x ~@2]>").gain(0.32)

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

// … 32 more lines

More by Rene Froger