Strudelify

Io e te

Raf

KeyE minorTempo108 bpm
0:00/0:00
// Io e te — Raf
// 108 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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.

// other · string ensemble 2
const string_ensemble_2 = note("<~@35 A@2 B C D E@2 F ~@19 G H@2 I@2 J@4 B C D E@2 F ~@44>".pickRestart({
  A: "[c5@3 g4]/2", B: "a4", C: "g4", D: "c5", E: "[d5 e5@3]/2", F: "d5@15 ~", G: "e2@15 ~", H: "[g2@23 ~ g2@8]/2",
  I: "[e2@23 ~ e2@8]/2", J: "[g2@15 c5@13 g4@4]/4",
})).s("gm_string_ensemble_2").gain(0.4)

// bass · fretless bass
const bass = note("<A@8 B@16 C D E@8 B@8 F G H I@2 J H K@8 L@3 ~@8 M N@8 G H I@2 J H O@3 P@24 Q@8 R@2 ~>".pickRestart({
  A: "[~@8 e1@2 g1@2 a1@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@2]/8",
  B: "[~@4 e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@2]/8",
  C: "~@4 e1@3 ~ e1 ~ e1@2 ~@2 a1@2", D: "~@2 a1 ~ a1@3 ~ a1 ~ a1@3 ~ a1@2",
  E: "[~@2 a1 ~ a1@3 ~ e1@2 g1@2 a1@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@2]/8",
  F: "~@4 e1@3 ~ g1 ~ g1@2 ~@2 a1@2", G: "~@2 a1@2 b1@2 ~@2 c#2@3 ~@3 f#1@2", H: "~ f#1 g#1 ~ a1 f#1 ~ b1",
  I: "[~@2 b1@2 c#2@2 ~@2 d2@2 ~@4 g1@5 ~ g1@3 ~ e1 ~ e1@2 f#1@2 a1@2]/2", J: "~ a1 b1 ~ c#2 a1 ~ f#1",
  K: "[~@2 b1@2 c#2@2 ~@2 d2@3 ~@3 g1@5 ~ g1@2 ~@2 e1@2 g1@2 a1@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@2]/8",
  L: "[~@4 f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ e1 ~ e1@2 ~@2 a1@17 ~]/3", M: "~@4 e1 g1 a1 c2",
  N: "[~@4 c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 a1@2]/8",
  O: "[~@2 b1@2 c#2@2 ~@2 d2@3 ~@3 g1@5 ~ g1@2 ~@2 g1@2 g1@2 ~@2 e1@5 ~ e1@2 ~@2 e1@2 g1@2 a1@2 c2@2]/3",
  P: "[~@4 c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@2]/8",
  Q: "[~@4 c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 c2@5 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 a1@5 ~ a1@2 ~ a1!2 ~ a1@3 ~ f1@5 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 e1@5 ~ e1@3 ~ g1 ~ g1@2 ~@2 g2@2]/8",
  R: "[c2@29 ~@3]/2",
})).s("gm_fretless_bass").gain(0.64)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E B C D E B C D E B C D E B C D E B C D F G H B C D E B C D E B C D E B C D I ~@8 B C D E B C D J ~@10 B C D E
  B C D I ~@9 B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E ~@3
>`.pickRestart({
  A: "~@7 [c3,g3,c4,e4]", B: "~ [c3,g3,c4,e4]!2 ~ [c3,g3,c4,e4]@3 [c3,g3,c4,e4]!2 ~ [c3,g3,c4,e4]@3 ~ [a2,g3,c4,e4]@2",
  C: "~ [a2,g3,c4,e4]!2 ~ [a2,g3,c4,e4]@3 [a2,g3,c4,e4]!2 ~ [a2,g3,c4,e4]@3 ~ [f3,a3,c4,e4]@2", // Am7 Fmaj7
  D: "~ [f3,a3,c4,e4]!2 ~ [f3,a3,c4,e4]@3 [f3,a3,c4,e4]!2 ~ [f3,a3,c4,e4]@3 ~ [e3,g3,b3,d4,e4]@2", // Fmaj7 Em7
  E: "~ [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 ~ [c3,g3,c4,e4]@2", // Em7 C
  F: "~ [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 ~ [a2,g3,d4,e4]@2", // Em7 Asus4
  G: "~ [a2,g3,d4,e4]!2 ~ [a2,g3,d4,e4]@3 [a2,g3,d4,e4]!2 ~ [a2,g3,d4,e4]@3 ~ [a2,g3,c#4,e4]@2", // Asus4 A7
  H: "~ [a2,g3,c#4,e4]!2 ~ [a2,g3,c#4,e4]@3 [a2,g3,c#4,e4]!2 ~ [a2,g3,c#4,e4]@3 ~ [c3,g3,c4,e4]@2", // A7 C
  I: "~ [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 ~ [a2,g#3,c#4,e4]@2", // Em7 Amaj7
  J: "~ [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 [e3,g3,b3,d4,e4]!2 ~ [e3,g3,b3,d4,e4]@3 ~@3", // Em7
})).s("gm_acoustic_guitar_steel").gain(0.19).pan(0.3)

// chords · epiano2
const epiano2 = note(`<
  A@8 B@8 C D@4 E@5 A@8 C D@4 F@3 G@8 H@5 I@6 J@2 K@2 L@2 M@2 D@4 F@3 N@4 O@6 P@8 Q@16 R@8 S@2 ~
>`.pickRestart({
  A: "[~@8 e2@2 g2@2 a2@2 [c3,b3,e4,g4]@15 ~ [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 g2@2 a2@2 ~@2 [c3,b3,e4,g4]@15 ~ [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@2]/8", // Cmaj7 Am7 Fmaj7 Em7 Cmaj7 Am7 Fmaj7 Em7
  B: "[~@8 g2@2 a2@2 ~@2 [c3,b3,e4,g4]@15 ~ [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 g2@2 a2@2 ~@2 [c3,b3,e4,g4]@15 ~ [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@2]/8", // Cmaj7 Am7 Fmaj7 Em7 Cmaj7 Am7 Fmaj7 Em7
  C: "~@4 e2 g2 a2 c3",
  D: "[~@4 [b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 e2@2 g2@2 a2@2 c3@2, ~ c3@2 ~@13]/4", // Em Am7 Fmaj7 Em7
  E: "[~@2 g3@2 [c4,g4,b4,e5]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@14 ~@2 [a2,d4,e4,g4]@15 ~ [a2,c#4,e4,g4]@2]/5", // Cmaj7 Am7 Fmaj7 Em7 Asus4 A7
  F: "[~@4 [b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@2]/3", // Em Am7 Fmaj7 Em7
  G: "[~@8 e2@2 e2@2 ~@2 [a3,e4,g#4,b4,c#5,e5]@15 ~ [f#3,c#4,e4,a4,c#5]@15 ~ [b2,b3,f#4,a4,d5]@16 [g2,g3,d4,f#4,b4]@10 [e3,d4,f#4,g#4,b4]@6 [a3,e4,g#4,b4,c#5,e5]@16 [f#3,c#4,e4,a4,c#5]@15 ~ [b2,b3,f#4,a4,d5]@16 [g2,g3,d4,f#4,b4]@2]/8", // Amaj7 F#m7 Bm7 Gmaj7 E7 Amaj7 F#m7 Bm7 …
  H: "[~@8 e2@2 g2@2 a2@2 [c3,b3,e4,g4]@15 ~ [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 e2@2 g2@2 a2@2 c3@2]/5", // Cmaj7 Am7 Fmaj7 Em7
  I: "[~@4 [c3,b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@11 ~@5 [a2,e3,a3,c#4,e4]@16 [f#2,e3,a3,c#4,e4]@18]/6", // Cmaj7 Am7 Fmaj7 Em7 A F#m7
  J: "[[d2,f#3,a3,b3,e4]@7 [e2,e3,a3,b3,e4]@9]/2", K: "[[g2,g3,a3,b3,d4]@3 [g2,g3,a3,b3,d4]]/2",
  L: "[[e2,g3,b3,e4,a4]@3 [e2,g3,b3,e4,a4]]/2", M: "[g2@12 e2 g2 a2 c3, [g3,a3,b3,d4]@15 ~]/2",
  N: "[~@8 e2@2 e2@2 ~@2 [a3,e4,g#4,b4,c#5,e5]@15 ~ [f#3,c#4,e4,a4,c#5]@15 ~ [b2,b3,f#4,a4,d5]@16 [g2,g3,d4,f#4,b4]@2]/4", // Amaj7 F#m7 Bm7 Gmaj7
  O: "[~@8 [e3,d4,f#4,g#4,b4]@6 [a3,e4,g#4,b4,c#5,e5]@16 [f#3,c#4,e4,a4,c#5]@15 ~ [b2,b3,f#4,a4,d5]@16 [g2,g3,d4,f#4,b4]@16 [e2,g#3,d4,f#4]@15 ~@3]/6", // E7 Amaj7 F#m7 Bm7 Gmaj7 E7
  P: "[~@4 [c3,b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 e2@2 g2@2 a2@2 c3@6 [b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 e2@2 g2@2 a2@2 c3@2, ~@17 c3 ~@14]/8", // Cmaj7 Am7 Fmaj7 Em7 Em Am7 Fmaj7 Em7
  Q: "[~@4 [b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 e2@2 g2@2 a2@2 c3@6 [b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 e2@2 g2@2 a2@2 c3@2, ~ c3 ~@15 c3 ~@14]/8", // Em Am7 Fmaj7 Em7 Em Am7 Fmaj7 Em7
  R: "[~@4 [b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [e3,d4,g4,b4]@10 e2@2 g2@2 a2@2 c3@6 [b3,e4,g4]@10 [a2,c4,e4,g4]@15 ~ [f3,c4,e4,a4]@15 ~ [d4,g4,b4]@10 [e2,e3]@2 [g2,g3]@2 [a2,d3]@2 ~@2, ~@2 c3@2 ~@30 c3@2 ~@19 e3@4 ~@5]/8", // Em Am7 Fmaj7 Em7 Em Am7 Fmaj7 G …
  S: "[[g3,c4,e4,g4], c3@29 ~@3, c5 ~@15]/2", // C
})).s("gm_epiano2").gain(0.35).pan(0.7)

// other · pad new age
const pad_new_age = note("<~ A@3 B@3 C D E ~@18 F@3 G@4 ~@51 H I J K ~@4 H I J K ~@4 H I J K ~@15>".pickRestart({
  A: "[~@2 e4@12 ~ g4@9]/3", B: "[~@2 a4@2 g4@3 ~ f4@2 e4@2 f4@2 e4@8 c5@15 ~ f5@2 ~@2 e5@3 d5@2 ~]/3", C: "c5@3 ~",
  D: "g4@3 ~ f4@3 ~ e4@3 ~ d4@3 ~", E: "e4", F: "[~@6 a4 g4@5 ~@2 c5 b4@4 ~@5]/3",
  G: "[~@8 a4@2 g4@2 e4@2 d4@9 ~@7 e5@5 ~ d5@5 ~ c5@3 ~ b4@8 ~@10]/4", H: "~ e5@3", I: "b4@13 ~@3",
  J: "e5@5 ~ d5@5 ~ c5@3 ~", K: "b4@11 ~@5",
})).s("gm_pad_new_age").gain(0.22)

// other · alto sax
const alto_sax = note("<~@50 A B C D E F ~@53 G H I J K L M N ~@4>".pickRestart({
  A: "~@7 e5", B: "~@2 e5@13 ~", C: "d5@2 c5@4 d5 ~@7 a4 ~", D: "c5 ~ e5@3 ~ g5 ~ e5 ~ d5 ~ c5@2 a4 ~",
  E: "e5@2 d5@4 ~@2 c5 a4 g4 d#4 e4 a4 g4 e4", F: "d4 c4 a3 g3@10 ~@3", G: "~@4 c4 d4 ~ e4 g4 ~ a4 c5 ~ d5 ~ e5",
  H: "~ e5@9 f5 ~ e5@2 d5 ~", I: "c5@2 a4 ~ c5@3 ~ c5@2 a4 ~ c5@2 d5 ~", J: "~@6 g5 ~ e5 ~ d5 ~ c5@2 a4 ~",
  K: "c5 c5@2 d5 a4 g4@2 ~", L: "g4 a4 c5@2 c5@3 ~ d5@2 f5 ~ e5@2 d5 c5", M: "~ a4 c5@4 ~@2 c6@8",
  N: "~ a5 g5@3 g5!2 a5",
})).s("gm_alto_sax").gain(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@43 A@2 B ~ A@2 B ~@27 A@2 B ~ A@2 B ~@37>".pickRestart({
  A: "~@4 [c#4,e4,a4]@2 ~ [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@5", B: "~@4 [d4,f#4,b4]@2 ~ [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@5",
})).s("gm_electric_guitar_clean").gain(0.21)

// other · pad sweep
const pad_sweep = note("<~@64 A@3 B@2 ~@52>".pickRestart({
  A: "[a5@5 g5]/3", B: "[a5@31 ~]/2",
})).s("gm_pad_sweep").gain(0.32)

// other · string ensemble 1
const string_ensemble_1 = note("<~@42 A B@3 C D E F@2 ~@25 A G@2 H I@3 J K@7 L@8 ~@22>".pickRestart({
  A: "~@6 g4 a4 b4 c5 d5 e5 f5 [g5,a5] b5 [c6,d6]", // Gsus2 Csus2
  B: "[[e5,e6]@14 [f#5,f#6]@10 [c#5,c#6]@6 [a4,a5]@14 [c#5,c#6] [b4,b5] [c#5,c#6] ~]/3", // E F# C# A C# B C#
  C: "~@2 [b4,b5] [a4,a5] [b4,b5] ~@3 [e4,e5]@2 [a4,a5] ~ [b4,b5] ~ [c#5,c#6] ~", // B A B E A B C#
  D: "~@2 [b4,b5]@2 ~@6 [a4,a5] ~@3 [g#4,g#5] ~", // B A G#
  E: "~@2 [a4,a5] ~ [f#4,f#5]@6 [a4,a5]@2 [c#5,c#6] [b4,b5] [c#5,c#6] ~", // A F# A C# B C#
  F: "[~@2 [f#4,f#5] ~ [c#5,c#6] ~ [f#4,f#5] ~ [a4,a5] ~ [f#4,f#5] ~ [a4,a5] ~ [b4,b5]@4 [a4,a#4,a5,a#5] [g4,g#4,g5,g#5] [f4,f#4,f5,f#5] [e4,e5] ~@10]/2", // F# C# F# A F# A B A#maj7 …
  G: "[[e5,e6]@7 [f#5,f#6]@5 [c#5,c#6]@3 [d5,d6]]/2", // E F# C# D
  H: "~@2 [f#4,f#5] ~ [a4,a5] ~ [f#4,f#5] ~ [d5,d6] ~ [c#5,c#6] ~@3 [b4,b5] ~", // F# A F# D C# B
  I: "[~@2 [a4,a5] ~@3 [g#4,g#5] ~@3 [a4,a5] ~ [b4,b5] ~ [c#5,c#6]@12 [f#4,f#5]@14 [a4,a5]@8]/3", J: "[b4,b5]",
  K: "[~@4 [f#4,f#5] [a4,a5] [c#5,c#6] [e5,e6]@32 [d5,d6]@8 [c5,c6]@9]/7", // F# A C# E D C
  L: "[~@7 [g4,g5]@16 [c5,c6]@16 [e5,e6]@25]/8", // G C E
})).s("gm_string_ensemble_1").gain(0.32)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@50 A ~@48 B@3 C@5 D E@2 C@5 D E@2 ~@3>".pickRestart({
  A: "~@5 [d#4,d#5] [c#4,d4,c#5,d5] [b3,b4]@5 ~@4, ~@7 [c4,c5] ~@8", B: "[~ [g5,g6]@4 [d5,d6]@3]/3",
  C: "[[g4,g5]@23 [d5,d6]@8 [c5,c6]@9]/5", D: "[b4,b5]@3 [c5,c6]@5", E: "[g4,g5]/2",
})).s("gm_string_ensemble_1").gain(0.24)

// chords · pad warm
const pad_warm = note("<~@58 A@3 B@2 C@2 D@2 E@2 ~@52>".pickRestart({
  A: "[~@7 [a2,e3,a3,c#4,e4]@8 [f#2,e3,a3,c#4,e4]@9]/3", B: "[[d2,f#3,a3,b3,e4]@7 [e2,e3,a3,b3,e4]@9]/2",
  C: "[[g2,g3,a3,b3,d4]@31 ~]/2", D: "[e2,g3,b3,e4,a4]/2", E: "[[g2,g3,a3,b3,d4]@3 ~]/2",
})).s("gm_pad_warm").gain(0.28)

// drums · kick
const kick = s("bd").struct("<A B@25 C B@16 D E@6 F B@4 G H B C ~@9 I B@8 D E@7 F B@15 J B@16 K ~@2>".pickRestart({
  A: "~@7 x", B: "~ x ~@2 x!2 ~ x", C: "~@2 x ~@4 x ~@6 x ~", D: "~ x", E: "x!2", F: "x ~@3 x ~@2 x",
  G: "~@2 x ~@4 x!2 ~@5 x ~", H: "x!2 ~@2 x!2 ~ x", I: "~@6 x!2", J: "~@2 x ~@2 x ~@2 x ~ x ~@3 x ~", K: "x",
})).gain(0.8)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@38 A ~@11 B ~@3 A ~ A ~@11 C ~@3 A ~@12 B ~@3 A ~@7 A ~@3 D ~@3 A ~@7 A ~@7
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@8 x!4 ~@4", C: "~ x", D: "~@10 x!2 ~@4",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@42 A ~@25 B ~@7 A ~@16 A ~@7 A ~@7 A ~@7 C ~@3>".pickRestart({
  A: "~@3 x", B: "~@3 x!2 ~@3", C: "~@6 x!2",
})).gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@26 A ~@11 B ~@3 C ~@11 B@3 ~ C ~@13 B ~@3 C ~@12 B ~@3 C ~@3 B ~@3 C ~@3 B ~@3 C ~@3 B ~@3 C ~@3
>`.pickRestart({
  A: "~ x ~ x ~@4", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@25 B ~@15 B ~@15 B ~@9 C ~@7 B ~@8 D ~@7 B ~@7 B ~@7 B ~@7 B ~@3>".pickRestart({
  A: "~@5 x ~@2", B: "~@4 x!2 ~@2", C: "~ x ~@2 x ~@5 x ~@5", D: "~@5 x ~@2 x ~@7",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@43 [~ x ~ x ~ x ~ x]!8 ~@26 [~ x ~ x ~ x ~ x]!9 ~@35>").gain(0.64)

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

// drums · crash
const crash = s("cr").struct(`<
  A ~@4 B ~@11 B ~@3 B ~@4 A ~@8 B ~@3 B ~@2 A ~@7 A B ~@3 B ~@2 A ~@9 A B ~@3 B ~@2 A ~@8 A B ~@3 B ~@2 A B ~@3 B ~@2 A
  B ~@3 B ~@2 A B ~@3 B ~@3 C ~@2
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!16]!57 [x!15 ~] ~@10 [x!16]!49 ~@3>").gain(0.32)

// drums · congas
const congas = s("conga:18").struct("<~@43 [~@2 x ~@2 x ~@4 x ~@2 x ~@2]!8 ~@26 [~@2 x ~@2 x ~@4 x ~@2 x ~@2]!9 ~@35>")
  .gain(2.05)

// drums · congas
const congas_2 = s("conga:33").struct("<~@43 [~@6 x!2 ~@6 x!2]!8 ~@26 [~@6 x!2 ~@6 x!2]!9 ~@35>").gain(2.05)

stack(
  string_ensemble_2, bass, acoustic_guitar_steel, epiano2, pad_new_age, alto_sax, electric_guitar_clean, pad_sweep,
  string_ensemble_1, string_ensemble_1_soft, pad_warm, kick, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, high_tom, crash, tambourine, congas, congas_2
// … 1 more lines

More by Raf