Strudelify
Il portiere di notte cover art

Playlist: Enrico Ruggeri

Il portiere di notte

Ruggeri

KeyF minorTempo67 bpm
0:00/0:00
// Il portiere di notte — Ruggeri
// 67 bpm, 4/4, key F minor. 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: Full arrangement: all 79 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(67/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@3 B C@4 D E@3 F G H@2 I J K L M N O P@3 Q R S T U V W X Y Z@2 AA AB AC AD AE@2 AF AG AH I J K L M N O P@3 Q R S T U
  V AI AJ AK AL AM AN AO@2 AP@3 AQ@6
>`.pickRestart({
  A: "[~@23 f5, f3@6 f4 f5@5 ab4@5 c4@4 c5 f4@2, ~@2 f4@3 c5@5 f4 g4@5 f3@8, ~@3 g4@5 f3@5 c5@5 f4 g4@5, ~@4 ab4@5 c4@5 f4 f5@5 ab4@4]/3",
  B: "~@7 f4, db3@5 db5 ab4@2, ~ ab3@7, ~ db4@3, ~@3 f4 f5@4",
  C: "[~@3 c5 ~@6 f3 c4 ~@3 ab5 ~@11 f4 ~ db5 ~ f4, [e4,g4]@4 eb4@7 f3 [c4,g4,c5] f5@3 f3@5 c5@3 [db3,db5] ab3 db4@2 [f4,f5]@2 db5@2, ~ g3@3 g4@4 [f4,ab4]@8 f5@3 g4@13, ~@5 g3@11 c5@2 f4@2 ab4@12, ~@28 c5@4 c4@4 c3@29 ~@3 c4@60]/4", // Em C5 Db F Fm
  D: "~@5 bb4 ~ eb4, eb3, bb4@2 eb4 bb4, g4 eb4 eb5@2, ~ bb3@2 [bb3,g4]@5", // Eb
  E: "[~@23 db4, g4@10 f3 g3 ab3 c4 f4@4 db5@4 f4@2, c3@8 [ab3,f4] c3@7 db3@8, e4@2 e4@4 e4@10 ~ ab3@7, ~ g3@2 g3 f4@4 f2@8 ~@4 ab4@4]/3", // Db
  F: "~@2 eb4 ~@2 bb4 ~ eb4, eb3, g4 [g4,eb5], eb4@2 ~ eb4@4 ~, ~ bb3@5 [bb3,bb4]@2", // Cm Bb
  G: "~@2 c4 ~@4 c4, c3, g4@3 g4, ~ g3@7, ~@3 c4 e4@4",
  H: "[~ g4 ~@5 [c4,c5], c3@8 [f3,ab4,f5] c4 f4 g4 ab4 f4@2 ~, c5@4 c5@2 [c4,g4] e4@9, e4@2 c4@2 g4 e4 e5@10, ~ g3@15]/2", // C Fm C5
  I: "~@7 g4, eb3, bb4@3 g4 bb4@4, g4@2 eb4@3 g4 [eb4,eb5]@2, ~ bb3@7", // Eb
  J: "~@3 f4 ~ db5 ~ ab4, db3@2 ab4 [f4,db5], db5 f5, f4 db4@3, ~ ab3@7", // Db
  K: "~@5 eb4 ~ g4, [eb3,bb4], g4@3 f4@5, ~ bb3@5 [bb3,eb4,eb5]@2, ~@2 eb4@2 g4@3 ~", // Eb5
  L: "~@7 f4, f3@5 f4 c5@2, c5 [ab4,f5], f4@2 f4 g4@5, ~ c4@7", // Db
  M: "~@2 eb4!2 ~@3 bb3, [eb3,eb5], g4@3 g4, ~ bb3@4 bb3@2 ~, ~ bb4 [eb4,bb4]@2", // Eb Eb5
  N: "~@3 eb4@5, db3, ab4@25 ~@7, f4 db4@3, ~ ab3@7", O: "~@2 c3 ~@2 c4 [e4,g4]@2, g4@3 ~, ~@3 c3@5, ~@2 [d4,c5] ~",
  P: "[~@4 [f4,f5]@2 ~@7 ab4 ~ c4 ~@7 eb4, ~ g2@10 f4 g4@2 [ab4,c5]@2 eb3@4 g4 eb4 [g4,eb5]@2, ~ c3@3 [f2,f5]@4 eb5@2 bb4@2, ~@2 [e4,g4]@4 c5@4 f3@6 [g4,bb4]@2 eb4 f4@5, ~@12 c4@12 g4@8 ab4@4 c3@29 ~@3 bb3@28]/3", // F Ab Cm F Em Gm
  Q: "~@10 ab4@2 ~@3 ab3, db3, db5@3 f4 g4@2 [f4,db5]@2, f4@2 db4@5 db4, ~@2 ab3@13 ~", // Db
  R: "~@3 d4 ~@3 c4, c3, [e4,g4]@2 e4 [e4,c5], ~ g3@7, ~@2 c4@3 c4@2 ~", // Em C
  S: "~@7 c4, [f2,f5]@4 [ab4,c5] c4 [f3,ab4]@2, ab4@2 f3 g4@5, f4 f4@3, ~ c3@7", // F Ab Fm
  T: "~@7 eb4, eb3@4 g4 eb4 [g4,bb4]@2, bb4 eb5, g4@2 eb4 f4@5, eb4 bb3@7", // Gm
  U: "~@7 db4, db3@4 f4 db4 [f4,ab4]@2, [f4,ab4]@3 eb4@5, ~ ab3@7, ~@4 db4@3 ab4 db5@8", // Fm
  V: "~@8 c4@4 c4@2 d4@2 ~@12 c4@3 ~, [c3,e4,g4]@15 ~ c2@15 ~, ~@4 g3@11 ~ [e4,g4]@8 [c3,e4,g4,c5]@7 ~, ~@5 c4@2 ~", // C Em C
  W: "~@7 c4, ab2, [eb4,ab4]@4 [eb4,ab4] c4 [eb4,ab4,c5]@2, c4 ab3@3, ~ eb3@7", // Ab5 Ab
  X: "eb4 ~@7 bb3@4 ~@2 bb3@2 ~@12 bb3@4, eb2, [g4,bb4]@3 ab4 g4@4, ~ bb2@7, ~@2 eb3@2 eb4 bb3 [eb3,eb4]@2", // Gm Eb
  Y: "[db2,db4]", // Db
  Z: "[~@2 c3 ~@8 c4 [f4,f5]@2 [g4,c5]@2, [e4,g4]@3 g4@2 [e4,g4] ~@2, ~@3 c3@4 c4@3 c3@6, ~ [d4,c5] c2@2, ~@6 e4@2 ~ g2@7]/2", // F C5 Em D7
  AA: "[c4,f4,ab4]@2 [f4,ab4]@2 ~@3 f3, f2, ~ [c4,f4,ab4], ~@4 f3@3 ~, ~@3 ab3", // Fm
  AB: "~@3 [db2,ab3], db3, [db4,f4,ab4]!2, ~ ab3@2 ~", // Db5 Db
  AC: "~@2 eb4 [bb3,eb4], eb2, bb3@3 ~, [eb4,g4] [eb3,g4,bb4], ~ g3@3", // Eb5 Eb
  AD: "~@8 c4@8 ~@8 g3@7 ~, [c2,c5]@31 ~, [e4,g4]@16 [c3,c4,e4,g4]@15 ~", // C Em C
  AE: "[~@15 f4, f2@16 c4@4 ab3@4 [c4,f4]@4 ab3@7 ~ ab2@12 db4@4 f4@4 ab4@8, f4@3 ab3 ab4@4 db2@8, [c4,ab4]@2 f3@6 f4@3 ab3@5, ~ c3@7 db4@2 db3@6]/2", // F5 Fm
  AF: "~@3 bb3 ~@3 bb3, eb2, [eb4,g4] ab4, ~ bb2@7, ~@4 eb4 bb3 [eb4,bb4]@2", // Eb Eb5
  AG: "~@5 g3 ~ g3, c2, [c4,g4]@3 g3 [c4,f4]@2 [c4,e4]@2, ~ g2@7, ~ c3@3", // C5 F5 C
  AH: "~@3 [c4,c5], [f3,f5], ab4@3 g4@5, ~ c4@4 f4@2 ~, ~ f4 ab4@2", // C F
  AI: "~@3 eb4 ~@3 ab3, [ab1,ab2], ab4!2, eb4 c4 [c4,eb4]!2, c4 ab3@3 ~ ab3@2 ~", // Ab Cm
  AJ: "~@7 g3, eb2, eb3@5 g3@2 ~, g4@2 eb4 g4@3 ~@2, eb4 bb3@3 [bb3,eb4]@2 [eb3,bb3,eb4,g4]@2", // Eb5 Eb
  AK: "~@7 ab3, [db2,db3], f4@3 f4@2 ab3@2 ~, db4!2 ab4@2, ~ ab3@3 db4@2 [db4,f4]@2", // Db
  AL: "~@12 e4@4 ~@4 g3@4 ~@4 g3@3 ~, [c2,c3], g4 ~, e4@8 c4@8 [c4,f4]@9 ~@7, ~ g3@3 ~@2 [c4,e4]@2", // C F5 C
  AM: "~@2 ab3!2 ~@3 ab3, ab2, [c4,eb4,ab4] ab4, ~ eb3@7, ~@4 [c4,eb4] ab3 [c4,eb4]@2", // Ab Cm
  AN: "~@3 bb4, eb2@4 eb4 g4@3, g4@3 bb3@5, eb4 eb3@3, ~ bb2@7", AO: "[[db2,db4,f4]@49 ~@15]/2",
  AP: "[~@7 g3 ~ g3 ~@7 f4 ~ ab3 ~@3 f4, d4@4 c2@8 [f2,c4,f4,ab4] c3 f3 ab3 c4@2 [c4,f4,ab4]@2 ~@2 eb3@2, g3 [g3,e4]@2 [c4,e4] [c4,f4] g4@5 ~@2, ~ c4@5 c3@4 c4 g3@9 ~ bb2@3, ~@5 g2@15 [eb2,bb3,eb4,g4]@4]/3", // Fm C F5 Eb
  AQ: "[~@12 g3@4 ~@24 f4@8 ~@23 g3@6 ~@6 g3@7 ~ ab3@8 ~@24 f4@56 ~@13, eb4@16 ~@8 db3@8 ab3@4 db4@12 c2@42 f2@89 ~@13, bb3@8 [eb3,bb3]@8 db2@32 [c4,e4]@13 g3@4 [c4,d4]@12 [c4,e4]@14 f4@22 c4@67 ~@12, ~@4 g3@8 ~@8 ab2@29 ~@3 g2@39 c4@15 ab3@74 ~@12, ~@28 f3@21 ~@7 c3@36 ~@7 g3@80 ~@13]/6", // Eb5 C Csus2 C
})).s("gm_piano").gain(0.56)

// chords · piano · soft notes
const piano_soft = note(`<
  A@2 ~@2 B@2 C@2 ~ D@3 ~ E F G ~@5 H I J@2 ~@7 K L M N ~ O ~@4 P Q ~ G ~@5 H I J@2 ~@7 R ~@5 S@3 ~ T ~@6
>`.pickRestart({
  A: "[~ c4@8 ~@7]/2", B: "[~ c4 ~ c4 f2@4, c3@4 c3@5 ~@7]/2", C: "[~@8 f4@3 ~@5, ~@7 f5@5 ~@4]/2",
  D: "[~@5 g3@2 g3@4 ~@5 f3@2 f4 ~@2 db4@2 ~, ~@5 c4 db4 ~, ~@19 f4@3 ~@2]/3", E: "e4@4 ~ c4@2 ~", F: "~@3 e4@2 ~@3",
  G: "~@7 f4", H: "~ f4", I: "~@7 c4, c2, e4@3 ~, ~ g2@7", J: "c2/2", K: "~@3 c4@2 ~@3", L: "~ eb4@7 ~@8",
  M: "~ ab3@3, f4, ~ db3@7", N: "~@5 c4@2 ~, c2, ~ g2@7", O: "~ c4 ~@2", P: "~@15 db4", Q: "~ eb3@3", R: "~@15 ab2",
  S: "[~@3 ab3@9 ~@2 c3 c3@4 c3@3 ~@2, ~ ab2@11 c2@8 ~@4, ~@8 db3@41 ~@3 g2@28 ~@16]/3", T: "~@3 g3",
})).s("gm_piano").gain(0.32)

// other · oboe
const oboe = note("<~@6 A@2 B C D ~ B E@2 ~@27 F B G ~@26 H I J K@4 ~>".pickRestart({
  A: "[~@8 db5@4 c5@4 f4@21 ~@7 eb5@4 db5@8 ab4@8]/2", B: "g4@2 ab4 bb4", C: "c5@12 ~ ab4@3 g4@16, ~@6 bb4 ~@9",
  D: "~ f4@31", E: "[c5@55 ~@9]/2", F: "~@3 eb5 db5@2 ab4@2", G: "c5@6 bb4 ab4 g4@8", H: "~@4 ab4@3 g4",
  I: "f4 ab4 g4@2", J: "f4@2 g4@2 ab4@3 f4", K: "[f4@8 ab4@8 g4@29 c4@14 f4@69]/4",
})).s("gm_oboe").gain(0.4).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@10 A B ~ C D E F G H ~ I J ~ K L M N O@2 M N P Q@2 R S T ~@8 U F G H ~ I J ~ K V M N O@2 M N P W@2 R X Y@3 ~ Z@4
  AA@5
>`.pickRestart({
  A: "~@12 f3@2 g3@2 ab3@2 db4@2 c4@3 ~@9", B: "~@6 f3 g3 ab3 eb4 db4@2 ~@4", C: "~@6 e3 f3 g3 db4 c4 ~ e3 f3 g3 db4",
  D: "c5@2 bb4 ab4 ~@2 c4@2, e4@31 ~, c4@11 ~@5, ~ g4", E: "[f3,c4]@13 ~@3",
  F: "~@4 g3@2 ab3@2 bb3@2 f4@2 eb4@3 ~ g3@2 ab3@2 bb3 ~ f4@2 eb4@3 g3@4 ~", G: "ab3@3 bb3 c4@2 db4@2, [db3,f3]",
  H: "[eb3,g3,bb3]", I: "~@4 g3 ab3 bb3 eb4", J: "[db3,f3,db4]", K: "~ [c3,g3,c4]@15", L: "[f4,ab4], c4 ~@31",
  M: "[bb3,eb4,g4]", N: "[ab3,db4,f4]", O: "[[g3,e4] [f4,ab4], c4]/2", P: "~ c3, [g3,c4,e4]",
  Q: "[[ab3,c4] [g3,bb3], eb4]/2", R: "[f3,ab3,db4]", S: "[c3,e3,g3,c4]@7 ~", T: "~ [c3,g3,c4]", U: "[f3,c4]@27 ~@5",
  V: "[c4,f4,ab4]", W: "[[ab3,c4]@31 [g3,bb3]@33, eb4]/2", X: "~@16 e4@15 ~, [e3,g3,c4]@31 ~",
  Y: "[[ab3,c4]@16 [g3,bb3]@16 [f3,ab3,db4]@15 ~, eb4@65 ~@31]/3", // Ab Gm Db
  Z: "[~ [c3,g3,c4]@2 [f3,ab3,c4]@2 [eb3,g3,bb3]@2 [f3,ab3]]/4", // C5 Fm Eb Fm
  AA: "[~@16 g3@43 [f3,ab3]@84 ~@17, ~@15 e3@46 ~@99, ~ c4@8 ~]/5", // Fm
})).s("gm_string_ensemble_2").gain(0.37).pan(0.6)

// bass · electric bass finger
const bass = note(`<
  ~@10 A B C D E F G H I J C K ~ L M N O D P Q O R S T K ~ L P U V W P X Y Z F G H I J C K ~ L M N O D P Q O R AA AB AC
  AD AE AF K ~ AG@2 AH AI AJ AK@4
>`.pickRestart({
  A: "f1@9 ~@3 f1@2 ~@2 f1@14 ~@2", B: "db2@12 ~@4 db2@13 ~@3", C: "eb2@9 ~@3 eb2 ~@3 eb2@14 ~@2",
  D: "c2@10 ~@2 c2 ~@3 c2@13 ~@3", E: "c2@12 ~@4 bb2@9 ~ bb1@5 ~", F: "f1@12 ~@4 f1@13 ~@3",
  G: "eb2@9 ~@3 eb2 ~@3 eb2@12 ~@4", H: "db2@15 ~ db2@14 ~@2", I: "eb2@10 ~@2 eb2 ~@3 eb2@15 ~", J: "f1@7 ~ f1@7 ~",
  K: "db2", L: "c2", M: "f1@13 ~@3 f1@13 ~@3", N: "eb2@9 ~@3 eb2 ~@3 eb2@13 ~@3", O: "db2@7 ~ db2@7 ~",
  P: "f1@13 ~@3 f1@14 ~@2", Q: "eb2@10 ~@2 eb2 ~@3 eb2@14 ~@2", R: "c2@10 ~@2 c2 ~@3 c2@12 bb1@4",
  S: "ab1@9 ~@3 ab1 ~@3 ab1@13 ~@3", T: "eb2@14 ~@2 eb2@15 ~", U: "db2@5 ~ db2 ~ db2@7 ~", V: "eb2@14 ~@2 eb2@13 ~@3",
  W: "c2@10 ~@2 c2 ~@3 c2@15 ~", X: "db2@10 ~@2 db2 ~@3 db2@13 ~@3", Y: "eb2@13 ~@3 eb2@15 ~",
  Z: "c2@9 ~@3 c2 ~@3 c2@16", AA: "ab1@12 ~@4 ab1@15 ~", AB: "eb2@10 ~@2 eb2@2 ~@2 eb2@15 ~", AC: "db2@14 ~@2 db2@15 ~",
  AD: "c2@5 ~ c2 ~ c2@6 bb1@2", AE: "ab1@13 ~@3 ab1@15 ~", AF: "eb2@10 ~@2 eb2 ~@3 eb2@16",
  AG: "[~@16 c2@32 f1@15 ~]/2", AH: "f1@13 ~@3 eb2@9 ~@3 eb2 ~@3", AI: "eb2@15 ~ db2@14 ~@2", AJ: "db2@15 ~ c2@15 ~",
  AK: "[~ c2@23 ~@3 f1@95 ~@6]/4",
})).s("gm_electric_bass_finger").gain(0.4)

// other · pad new age
const pad_new_age = note(`<
  ~@10 A B C D E ~@9 F G H I F G H I ~@13 J K F K L K ~@3 F G H I F G H I ~@9 M N M N O ~@3
>`.pickRestart({
  A: "f5@5 ~@27", B: "ab5@5 ~@27", C: "bb5@5 ~@27", D: "c6@5 ~@27", E: "c5@5 ~@19 g5@5 ~@3", F: "f5 ~@31",
  G: "eb5 ~@31", H: "db5 ~@31", I: "c5 ~@31", J: "[f4,f5] ~@31", K: "g5 ~@31", L: "[f4,f5] ~@23 f5 ~@7",
  M: "~@16 ab5 ~@15", N: "~@16 g5 ~@15", O: "~@27 f5 ~@4",
})).s("gm_pad_new_age").gain(0.44)

// other · string ensemble 2
const string_ensemble_2_2 = note(`<
  ~@15 A B C D E F G ~ H ~ I J K L M N O P Q R@2 S T U V W ~@4 X@3 Y@2 F G ~ H Z AA J K L M N O AB@4 AC@3 ~ AD@2 ~@7
>`.pickRestart({
  A: "f4@3 ab4", B: "~@7 [g4,g5], bb4", C: "f5@2 db5 f4, ab4@25 ~@7, f4@11 ~@5", D: "g4@5 bb4 [ab4,c5] [g4,bb4]",
  E: "c5@3 f5, ab4", F: "g5@2 f5 g5 eb5@11 ~, bb4@31 ~", G: "[db4,f4]", H: "c4 e4 d4 ~@9 c5@4, ~@3 c4@13",
  I: "g4@12 g4@2 f4@2 g4@3 ~ g4@2 f4@2 g4@2 bb4@2 ab4@2 g4@2", J: "f4", K: "~@8 c5 e5 d5 c5 e5 g5 f5 e5",
  L: "f5 g5 ab5 g5 ab5 c6 ab5 g5 f5 c5 ab4 g4 f4 g4 ab4 f4", M: "g4@7 bb4 eb5 f5 g5 f5 g5 bb5 ab5 g5",
  N: "f5@5 eb5 db5 f5", O: "e5@16 c5@4 d5@4 e5@3 ~ g5@4, ~@16 c3@11 bb2@5", P: "ab2@11 bb2@4 c3@8 db3@9, ab5",
  Q: "g5@2 f5 g5 ~@4 g3@2 ab3@2 bb3@2 eb4@2, eb3@9 ~@7, ~ eb5@3",
  R: "[f5@15 ~@8 bb5@8 ~ c4@30 ~@2, [ab3,db4] ~, f3@25 ~@6 [g3,e4]@30 ~@3, ~@15 ab5@9 ~@8 c6@27 ~@5, ~ f4 ~@2]/2", // Db5 C
  S: "c4 ~ e4@2 d4@2 c4@9 ~@9 g5@8, c3, ~@15 c5@17, ~ [g3,c4]", // C5
  T: "f4 ~ g4@2 ab4@2 g4@2 ab4@2 c5@2 ab4@2 g4@2 f4@2 [f4,f5]@2 [c4,c5]@2 [bb3,bb4]@2 [c4,c5]@2 [ab3,ab4]@2 [g3,g4] ~ ab4@2, ~@14 ab3 ~", // F C Bb C Ab G
  U: "f4@2 g4@2 ab4 ~ g4@2 ab4@2 db5@2 ab4 ~ g4@2 f4@2 [f4,f5]@2 [db4,db5] ~ [c4,c5]@2 [db4,db5]@2 [ab3,ab4]@2 [g3,ab3,g4]@2 ab4@2, f3 ~@7", // F Db C Db Ab Abmaj7
  V: "[bb3,eb4]@2 g4@2 bb4 ~ ab4@2 bb4@2 eb5@2 bb4 ~ ab4@2 [g3,g4]@2 bb3@2 eb4@2 [d4,d5]@2 [eb4,eb5]@2 [bb3,bb4]@2 [g3,g4]@2 [bb3,bb4]@2, ~@20 eb5 ~@11", // Eb5 G D Eb Bb G Bb
  W: "c5@2 e5@2 d5 ~ c5@2 c4@2 e4@2 d4@2 c4@2 ~@8 c4@7 ~, c4@3 ~ e5@10 ~@2, ~ e4",
  X: "[f4@24 ab4@7 ~@28 [g4,g5]@4 f5@16 ~ db5@8 f4@8, ~@31 bb4@32 ab4@25 ~@8, ~@63 f4@22 ~@11]/3", // G
  Y: "[g4@19 bb4@4 [ab4,c5]@4 [g4,bb4]@4 c5@24 ~ f5@8, ~@31 ab4@32 ~]/2", // Ab Gm
  Z: "f4@2 g4@2 ~ g4@2 ~@2 c5@2 ab4 ~ g4@2 f4@2 ~ c5@2 ~ g4@2 ~@2 g4@2 ab4@2 f4@2 g4, ~@2 ab4 ~ ab4 ~@5 ab4 ~ f4 ~@3",
  AA: "g4@3 ~@9 g4@2 f4@2 g4@3 ~ g4@2 f4@2 g4@2 bb4@2 ab4@2 g4@2",
  AB: "[ab2@12 bb2@4 c3@3 db3@4 ~ eb3@3 db3@4 g5@12 f5@2 g5@3 g3@4 ab3@4 bb3@4 eb3@3 ~@17 ab5@7 bb5@8 ~ c3@15 ~ c5@4 d5@4 e5@3 [bb2,g5]@5, ab5@31 eb3@16 ~ eb5@15 f5@17 ~@15 c6@16 ~@17, ~@64 db3@33 ~@15 c3@12 ~@4]/4", // Eb
  AC: "[ab2@12 bb2@4 c3@3 db3@4 ~ eb3@4 db3@3 ~@12 f5@2 ~ g5@2 g3@3 ab3@4 ~ bb3@3 eb3@4 ~ db3@32, ab5@31 g5@12 ~@5 eb5@16 ~@32, ~@32 eb3@16 ~@15 f5@30 ~@3]/3",
  AD: "[~ [c4,g4,c5]@2 ~]/2", // C5
})).s("gm_string_ensemble_2").gain(0.34).pan(0.4)

// other · overdriven guitar
const overdriven_guitar = note("<~@36 A B C D E F@2 ~@36>".pickRestart({
  A: "~@25 c5@6 ~", B: "g4@14 ~ g4@5 f4@3 ~ c4@4 ab3@4", C: "f4@2 eb4@2 db4@2 eb4@2 db4@15 ~ db4@3 eb4@2 f4@3",
  D: "f4@8 eb4@15 ab4@3 ~ g4@2 f4@3", E: "e4@3 f4@2 ~ g4@2 c4@15 ~ c5@3 bb4@2 ~ ab4@2", F: "[c5@35 ~@29]/2",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@10 A@11 ~@2 B A@7 C A@2 ~@3 A@7 C A@6 ~@3 A@7 C A@3 C A@2 ~@3 D A@3 E ~@3
>`.pickRestart({
  A: "x!2", B: "x ~@14 x", C: "x", D: "~ x", E: "~ x ~@5 x ~@19 x ~@4",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<~@10 [~ x ~ x]!11 ~@58>").gain(0.64)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A ~@12 B ~@13 C ~@2 B ~@16 D E ~@7>".pickRestart({
  A: "~@3 x!8 ~@5", B: "~@2 x!10 ~@4", C: "~ x ~@2", D: "~@10 x!6", E: "x!4 ~@12",
})).gain(0.16)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@3 B ~@13 B ~@3 C ~@8 B ~@20 B ~@3 B ~@13>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@23 x!2 ~@7",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A ~ A ~@2 B ~ A ~ A ~ A ~@4 A ~ A ~ A ~@3 C ~@6 D ~ A ~ E ~ A ~ F ~ G ~@4 A ~ A ~ A ~@3 A ~ A ~ H ~@7 I ~@3
// … 34 more lines

More by Ruggeri