Strudelify

Gli amanti

Fiorella Mannoia

KeyB♭ majorTempo110 bpm
0:00/0:00
// Gli amanti — Fiorella Mannoia
// 110 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 7 acoustic guitar nylon (copy of ch 6 acoustic guitar nylon)
// 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.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
setcpm(110/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 · piano
const piano = note(`<
  A B C D E F G H A B C D E F G I J K L M N O P Q R S R T U V W X Y F G H Y F G H Y F G H Z K L M N O P Q R S R T U V AA
  AB AC AD AE AF AC AD AE AF AC AD AE AF AC AD AE AF AC AD AE AF AC AD AE AF AC AD AE AF AG@3 AH@2 ~@2
>`.pickRestart({
  A: "~ f3, gb3@11 ~@13, ~@3 db4@20 ~, ~@6 ab4@17 ~, ~@9 bb4@14 ~",
  B: "~@6 db3@5 ~, eb3 ~, ~@3 bb3@19 ~@2, ~@3 f4@8 ~, ~@9 gb4@13 ~@2",
  C: "~@12 bb2@11 ~, b2 ~, ~@3 gb3@20 ~, ~@3 db4@8 ~, ~@9 eb4@14 ~",
  D: "b3 ~@6 b3, ab2 db3, ~@3 eb3@10 ~@2 eb3@9, ~@3 gb3@5 ~ gb3@3, ~@3 b3@2 ~@3", E: "[gb3,gb4] [f3,f4], [db4,bb4]",
  F: "[eb3,eb4]@12 [db3,db4]@11 ~, [bb3,gb4]@23 ~", G: "[b2,b3]@12 [bb2,bb3]@11 ~, [eb4,gb4]@11 ~",
  H: "[gb3,b3] ~@5 gb3@2, ab2 db3, ~@3 eb3@10 ~@2 eb3@9, ~@2 gb3@3 ~@3, ~@9 b3@5 ~@10", // B5
  I: "[gb3,b3]@3 ~@9 db3 ~@5 gb3@6, ab2@13 ~@11, ~@3 eb3@10 ~@2 eb3@9, ~@2 gb3@3 ~@3, ~@9 b3@5 ~@10", // B5
  J: "b3@2 ~ ab3, e4, ab3@3 ~, db3 ~@11 b3@12", K: "a2@6 ~ a3, [b3,e4], a3@7 ~, ~@3 a2",
  L: "db3@6 ~ ab3, [b3,e4], ab3@7 ~, ~@3 db3", M: "[a2,a3,b3,e4]", N: "ab3@5 ~ db3@2, [b3,e4], db3@3 ~, ~@5 ab3@3",
  O: "~@3 a3@3 a3@2, [a2,b3,e4]", P: "ab3@6 ~ db3, [b3,e4], db3@7 ~, ~@3 ab3",
  Q: "b2@2 ~@4 b3@3 ~@9 a2@6, a2@3 ~, ~ a3@7, ~@3 [b3,e4]@5", R: "[f3,c4,f4,g4] [eb3,bb3,eb4,g4]",
  S: "[db3,ab3,db4,f4]@5 [eb3,bb3,eb4,g4]@3", T: "[db3,ab3,db4,f4]",
  U: "c4@4 ~@3 c4, g4, f3@3 f3, f4@5 f4@3, ~@4 c4@3 ~", V: "~@5 c5@3, f3@12 f3@11 ~, f4@3 f4@5, ~@6 c4@17 ~",
  W: "b3@5 ~@16 b3@3, db3@3 db3, gb4@5 gb4@3, eb4@3 eb4@5, ~@2 b3@5 ~",
  X: "b3@3 ~@3 db3@2, ab4, db3@3 ~, f4@5 f4@3, ~@3 b3@5", Y: "[gb3,db4] [f3,f4], [bb3,gb4]@23 ~",
  Z: "b3@2 ~ ab3, e4, ab3@3 ~, ~ b3", AA: "f3@5 ~@16 f3@3, f4, c4@5 c4@3, bb3@3 bb3@5, ~@2 f3@5 ~",
  AB: "f3@3 ~@3 f4@2, f4@3 ~, c4@5 c4@3, a3@12 a3@11 ~, ~@3 f3@5", AC: "~@9 d5@14 ~, ~@3 f4@20 ~, ~@6 c5@17 ~",
  AD: "~@9 bb4@13 ~@2, ~@3 d4@19 ~@2, ~@3 a4@8 ~", AE: "~@9 g4@14 ~, ~@3 bb3@20 ~, ~@3 f4@8 ~",
  AF: "eb4 ~@6 eb4, ~ g3@3 f3@4, ~@3 bb3@5 ~ bb3@3, ~@3 eb4@2 g3@3",
  AG: "[~@6 f4@3 ~@12 bb4@6 ~@3 f4@3 ~@21 bb3@4 ~@2 [g3,bb3,eb4]@10 ~@2, ~@3 f3@20 ~@4 f3@18 bb4@10 ~@17, ~@3 bb3@6 ~@2 bb3@6 f3@7, ~@5 f4@4 ~@4 f4@5 ~@6]/3", // Eb
  AH: "[~ d4@22 ~, f3@15 ~, ~ bb3@44 ~@3, ~ c4@2 ~@45]/2",
})).s("gm_piano").gain(0.43)

// bass · electric bass finger
const bass = note(`<
  A B C D A B C D A B C D A B C E F G H G I G J K L M L I N@2 O I A B C D A B C D A B C E F G P Q R G J K L M L I N I S
  N T U V W T U V W T U V X T U V W T U V W T U V W T U V Y Z AA AB AC@4
>`.pickRestart({
  A: "gb2 f2", B: "eb2 db2", C: "b1 bb1", D: "ab1@12 db2@11 ~", E: "ab1", F: "db2@19 ~@2 b1 ~@2", G: "a1@23 ~",
  H: "db2@19 ~@5", I: "db2@23 ~", J: "db2@7 e2", K: "a2@8 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ e2@2 ~", L: "f2 eb2",
  M: "db2@5 eb2@3", N: "f2@23 ~", O: "db2@19 ~@2 db2 ~@2", P: "db2@19 ~@2 e2@3",
  Q: "a2@7 e2@2 [ab2,b2]@3 [a2,db3]@10 ~@2", R: "db2@21 a1 ~@2", S: "f2@20 ~ f2 ~@2", T: "bb2 a2", U: "g2 f2",
  V: "eb2 d2", W: "c2@12 f2@11 ~", X: "c2@6 ~ c2 ~ eb2 c2 ~ f2@12", Y: "c2 f2", Z: "bb1@19 ~@2 bb1 ~@2", AA: "bb1@11 ~",
  AB: "bb1@23 ~", AC: "[~ bb1@79 ~@16]/4",
})).s("gm_electric_bass_finger").gain(0.63)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@12 B@4 C D E F C D E F ~@8 A@8 G@4 C D E F C D E F ~@8 H@16 I@8 H@4 J@4 ~@3
>`.pickRestart({
  A: "[~@3 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3, ~@3 db3@11 ~ db3@11 ~ db3@10 ~@2 db3@11 ~ db3@10 ~@2 db3@11 ~ db3@11 ~ db3@9, ~@6 db4@9 ~@3 db4@9 ~@3 db4@8 ~@4 db4@10 ~@2 db4@9 ~@3 db4@9 ~@3 db4@10 ~@2 db4@6]/4",
  B: "[~@3 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@5, ~@3 db3@11 ~ db3@11 ~ db3@10 ~@2 db3@11 ~ db3@10 ~@2 db3@11 ~ db3@21, ~@6 db4@9 ~@3 db4@9 ~@3 db4@8 ~@4 db4@10 ~@2 db4@9 ~@3 db4@9 ~@3 db4@18]/4",
  C: "~ ab3 eb4 b3 ~ ab3 eb4 b3, e4@10 ~@2 e4@9 ~@3", D: "~ a3 eb4 b3 ~ a3 eb4 b3, e4@5 ~ e4@5 ~",
  E: "~ ab3 eb4 b3 ~ ab3 eb4 b3, e4@3 ~ e4@3 ~", F: "~@3 a3@3 eb4@3 b3@3 ~@3 a3@3 eb4@3 b3@2 ~, e4@5 ~ e4@6",
  G: "[~@9 gb3@6 ~@6 gb3@6 ~@6 gb3@5 ~@7 gb3@6 ~@6 gb3@6 ~@6 gb3@6 ~@6 gb3@15, ~@3 db3@11 ~ db3@11 ~ db3@10 ~@2 db3@11 ~ db3@10 ~@2 db3@11 ~ db3@21, ~@6 db4@9 ~@3 db4@9 ~@3 db4@8 ~@4 db4@10 ~@2 db4@9 ~@3 db4@9 ~@3 db4@18]/4",
  H: "[~@3 bb3@2 ~@2 bb3@2 ~@2 bb3@2 ~@2 bb3@2 ~@2 bb3@2 ~@2 bb3@2 ~@2 bb3@2 ~@2 bb3, ~@3 f3@11 ~ f3@11 ~ f3@10 ~@2 f3@11 ~ f3@10 ~@2 f3@11 ~ f3@11 ~ f3@9, ~@6 f4@9 ~@3 f4@9 ~@3 f4@8 ~@4 f4@10 ~@2 f4@9 ~@3 f4@9 ~@3 f4@10 ~@2 f4@6]/4",
  I: "[~@9 bb3@6 ~@6 bb3@6 ~@6 bb3@5 ~@7 bb3@6 ~@6 bb3@6 ~@6 bb3@6 ~@6 bb3@6 ~@6 bb3@3, ~@3 f3@11 ~ f3@11 ~ f3@10 ~@2 f3@11 ~ f3@10 ~@2 f3@11 ~ f3@11 ~ f3@9, ~@6 f4@9 ~@3 f4@9 ~@3 f4@8 ~@4 f4@10 ~@2 f4@9 ~@3 f4@9 ~@3 f4@10 ~@2 f4@6]/4",
  J: "[~@9 bb3@6 ~@6 bb3@6 ~@6 bb3@6 ~@6 bb3@6 ~@6 bb3@6 ~@7 bb3@7 ~@19, ~@3 f3@11 ~ f3@11 ~ f3@10 ~@2 f3@11 ~ f3@11 ~ f3@12 ~@21, ~@6 f4@9 ~@3 f4@9 ~@3 f4@8 ~@4 f4@10 ~@2 f4@9 ~@4 f4@10 ~@19]/4",
})).s("gm_acoustic_guitar_nylon").gain(0.19)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note(`<
  A@3 ~ A@3 ~ A@3 ~ A@3 ~@17 A@3 ~ A@3 ~ B@3 ~@17 C@3 ~ C@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ C@3 ~@8
>`.pickRestart({
  A: "[~@9 bb4@16 ~@8 gb4@16 ~@8 eb4@15, ~@3 db4@21 ~@3 bb3@22 ~@2 gb3@21, ~@3 ab4@10 ~@2 f4@10 ~@2 db4@9]/3",
  B: "[~@9 bb4@17 ~@7 gb4@16 ~@8 eb4@15, ~@3 db4@21 ~@3 bb3@22 ~@2 gb3@21, ~@3 ab4@10 ~@2 f4@10 ~@2 db4@9]/3",
  C: "[~@9 d5@16 ~@8 bb4@16 ~@8 g4@15, ~@3 f4@21 ~@3 d4@22 ~@2 bb3@21, ~@3 c5@10 ~@2 a4@10 ~@2 f4@9]/3",
  D: "[~@9 d5@17 ~@7 bb4@16 ~@8 g4@15, ~@3 f4@21 ~@3 d4@22 ~@2 bb3@21, ~@3 c5@10 ~@2 a4@10 ~@2 f4@9]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.29).pan(0.1)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C@5 ~ A B D@2 A B D@2 ~@16 A B D@2 A B D@2 A B D@2 ~@16 E F G@2 E F H@2 E F H@2 I@7 ~ J@7 ~@8
>`.pickRestart({
  A: "~@9 bb4@14 ~, ~@3 db4@20 ~, ~@6 ab4@17 ~", B: "~@9 gb4@14 ~, ~ bb3@7, ~ f4@3",
  C: "[~@9 eb4@21 ~@9 [ab4,b4]@2 ~ [ab4,b4]@2 ~@10 gb4@3 f4@9 db5@2 ~ eb4@9 [gb4,db5]@2 ~ [db4,gb4]@8 ~@7 [b3,eb4]@8 ~ [bb3,eb4]@13 ~@2, ~@3 gb3@26 ~@19 gb3@18 ~@29 gb3@22 ~@3, ~@2 db4@8 ~@5 [gb4,bb4]@2 db4@5 gb4@4 ~@14]/5", // Abm Gb5 B Eb5 Gb
  D: "[~@3 eb4@7 ~@6, ~@3 gb3@26 ~@19, ~ db4@4 ~@3]/2", E: "~@9 d5@14 ~, ~@3 f4@20 ~, ~@6 c5@17 ~",
  F: "~@9 bb4@14 ~, ~ d4@7, ~ a4@3", G: "[~@3 g4@7 ~@6, ~@3 bb3@26 ~@19, ~ f4@4 ~@3]/2",
  H: "[~@3 g4@7 ~@6, ~@3 bb3@25 ~@20, ~ f4@4 ~@3]/2",
  I: "[~@21 d5@14 ~@10 bb4@14 ~@28 [c5,eb5]@2 ~ [c5,eb5]@2 ~@10 bb4@3 a4@9 f5@2 ~ g4@9 [bb4,f5]@2 ~ [f4,bb4]@8 ~@7 [eb4,g4]@8 ~ [d4,g4]@13 ~@2, ~@15 f4@20 ~@4 d4@22 ~@2 bb3@25 ~@8 bb3@18 ~@29 bb3@22 ~@3, ~@18 c5@17 ~@7 a4@18 ~@6 f4@24 ~@9 f4@15 ~@54, ~@23 g4@7 ~ [bb4,d5]@2 ~@5 bb4@4 ~@14]/7", // Cm Bb5 Eb G5 Bb
  J: "[~@21 d5@14 ~@10 bb4@14 ~@28 [c5,eb5]@2 ~ [c5,eb5]@2 ~@10 bb4@3 a4@9 f5@2 ~ g4@9 [bb4,f5]@2 ~ [f4,bb4]@8 ~@7 [eb4,g4]@8 ~ [d4,g4]@13 ~@2, ~@15 f4@20 ~@4 d4@22 ~@2 bb3@26 ~@7 bb3@18 ~@29 bb3@22 ~@3, ~@18 c5@17 ~@7 a4@18 ~@6 f4@24 ~@9 f4@15 ~@54, ~@23 g4@7 ~ [bb4,d5]@2 ~@5 bb4@4 ~@14]/7", // Cm Bb5 Eb G5 Bb
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@16 A B C D A B C D ~@20 A B C D A B C D ~@36 E F G@2 ~@3>".pickRestart({
  A: "db3@23 ~", B: "~ e3@7, a2", C: "db3", D: "~@3 e3@20 ~, a2@23 ~", E: "bb2@11 ~", F: "bb2",
  G: "[~@4 bb4@11 ~, ~ bb2@14 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.4)

// other · pad warm
const pad_warm = note("<A@5 B@8 C@3 ~@8 D@2 E@2 F@2 ~ G@6 H@7 ~@8 D@2 E@2 F@2 ~ I@6 J@16 K@8 L@2 M@3 ~>".pickRestart({
  A: "[db4@2 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4]/5", // Gb5
  B: "[~@2 gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4]/8", // Gb5
  C: "[~@2 gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 ~]/3", // Gb5
  D: "[c4@24 bb3@23 ~, f3@23 ~]/2", E: "[~@12 bb3@11 ~, [f3,c4]@23 ~@25, ~@12 f4@35 ~]/2", F: "[c4,f4]/2",
  G: "[~@23 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4]/6", // Gb5
  H: "[~@2 gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@2 ~ gb4@2 ~ [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 db4@2 ~ gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@3 [gb4,db5]@3 gb4@3 db4@3 gb4@2 ~ [gb4,db5]@3 gb4@3 ~]/7", // Gb5
  I: "[~@23 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@3 [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3]/6", // Bb5
  J: "[~@2 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@3 [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@3 [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3]/8", // Bb5
  K: "[~@2 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@3 [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@3 [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@3 [f4,bb4]@3 f4@3 bb3@2 ~ f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3]/8", // Bb5
  L: "[~@2 f4@3 [f4,bb4]@3 f4@3 bb3@3 f4@2 ~ [f4,bb4]@3 f4@3 bb3@3 f4@3 [f4,bb4]@3 f4@3 bb3@3 f4@3 ~ [f4,bb4]@3 f4@3]/2", // Bb5
  M: "[bb3@3 ~]/3",
})).s("gm_pad_warm").gain(0.48)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@20 A@4 B C B D E@4 ~@16 A@4 B C B D F@2 G@2 ~@7 H@5 I@7 J@5 K@4 L@7>".pickRestart({
  A: "[~@84 e5@6 gb5@5 ~, [ab3,e4]]/4", B: "[f4,ab5] [eb4,g5], c5", C: "[db4,f5]@5 [eb4,g5]@3, bb4@23 ~",
  D: "[db4,bb4,f5]", E: "[g5@24 f5@23 ~ b3@24 [b3,db4,ab4]@23 ~, [f4,c5]@47 [db4,gb4]@24 ~@25, ~ db3]/4",
  F: "[g5 f5, [f4,c5]]/2", G: "[bb3 a3, [f3,c4,f4]]/2", H: "[~@24 f5@95 ~, ~@23 bb4@96 ~]/5", I: "[bb4,f5]/7",
  J: "[~@17 d6 c6@2, ~ bb4@9, ~@24 f5@95 ~]/5", K: "[~ bb4@7, [f5,bb5]]/4", L: "[f5@51 ~@5]/7",
})).s("gm_string_ensemble_1").gain(0.35)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@88 A@7>".pickRestart({
  A: "[[bb2,bb3,bb4,bb5]@51 ~@5]/7", // Bb
})).s("gm_string_ensemble_1").gain(0.21)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B A@3 B A@3 B A@3 B A B A B A B A B@3 C B A B A B A@3 B A@3 B A@3 B A B A B A B A B@3 C B A B A B A@2 C B A@3 B
  A@4 B@2 A B A B A B A B A B A B A B A B A@2 D ~@3
>`.pickRestart({
  A: "x", B: "x ~@6 x", C: "x ~@4 x ~@2", D: "~ x ~@22",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<A@3 ~ A@3 ~ A@3 ~ A@3 ~@15 A@5 ~ A ~ A ~ A@3 ~@15 A ~@29 A ~ A ~@4>".pickRestart({
  A: "~ x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@16 A@14 ~ B ~@12 A@14 ~ B A@5 ~ A@21 B ~@7>".pickRestart({
  A: "~ x", B: "~@18 x!2 ~@4",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@15 A ~@7 B ~@5 A ~ C ~@11 A ~@7 D ~ E ~@5 F ~@11 G ~@7 B ~@7 H ~@7>".pickRestart({
  A: "~@3 x", B: "~ x ~ x ~ x!2 ~", C: "~@3 x ~@16 x ~@3", D: "~@3 x ~ x!2 ~", E: "~@3 x ~ x ~@2",
  F: "~@3 x ~@8 x ~@2 x ~@4 x ~@3", G: "~@5 x!2 ~", H: "~@3 x ~@8 x ~@7 x ~@3",
})).gain(0.32)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@7 B ~@7 C ~@19 B ~@5 A ~@37>".pickRestart({
  A: "~@3 x", B: "~@5 x!2 ~", C: "~ x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@5 B ~ C ~@11 B ~@7 D ~ D ~@3 E ~ F ~@11 G ~@7 H ~@7 I ~@7>".pickRestart({
  A: "~ x ~ x ~@4", B: "~@3 x", C: "~ x ~@6", D: "~@3 x ~@4", E: "~@5 x ~@2", F: "~@4 x!2 ~@2", G: "~@5 x!2 ~",
  H: "~ x ~ x ~ x!2 ~", I: "~ x ~@2 x ~@3",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7
>`.pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@6 B A C ~@4 A ~@13 A ~@3 A ~@2 B A C A ~@3 A ~@13 A ~@7 A ~@14>".pickRestart({
  A: "x", B: "~@7 x", C: "~@5 x ~@2",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@59 [~ x ~@6] ~@35>").gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@24 A B@2 C B D A D ~@20 A B A C B D A D E ~@15 E ~@7 E ~@6 F ~@3>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x ~ x ~ x!3 ~", E: "x", F: "~ x ~@22",
})).gain(0.64)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@24 A B A C A B A B ~@20 A B A C A B A B ~@35>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@3 x", C: "~ x ~ x ~ x ~@2",
// … 36 more lines

More by Fiorella Mannoia