Strudelify

Collage

Le Orme

KeyA minorTempo100 bpm
0:00/0:00
// Collage — Le Orme
// 100 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 12, 4/4 at bar 13, 3/4 at bar 44, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 3 "Clavicembalo, Clav.2" named as a piano, played on clavinet (its trombone patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5977908; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 115 bars on a 32-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 · "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 · church organ · "Organo Hammond, organ"
const church_organ = note(`<
  A B C B D E F@2 G H G H I J I J K L K L M N M N O@2 P@2 Q R Q R S T S U V W V X@3 Y ~@9 Z@4 AA@3 ~@17 I J I J K L K L
  M N M N O@2 P@2 Q R Q R S T S U V W V X@3 Y I J I J I J I AB
>`.pickRestart({
  A: "~@14 [d5,f5,a5] [c5,e5,g5]", B: "[d4,d5,f5,a5]@6 [d5,f5,a5] [c5,e5,g5] [d4,d5,f5,a5]@6 [d5,f5,a5] [c5,e5,g5]",
  C: "[d5,f5,a5]@2 [d5,f5,a5] [c5,e5,g5] [d5,f5,a5]@4 [g4,d5,g5,b5]@6 [d5,f5,a5] [c5,e5,g5]", // Dm C Dm G Dm C
  D: "[d5,f5,a5]@2 [d5,f5,a5] [c5,e5,g5] [d5,f5,a5]@4 [g4,d5,g5,b5]@6 [c5,e5,a5]@2", // Dm C Dm G Am
  E: "[b4,e5,g#5]@6 [c5,e5,a5]!2 [b4,e5,g#5]@6 [c5,e5,a5]!2", // E Am E Am
  F: "[[b4,e5,g#5]@2 [c5,e5,a5]!2 [b4,e5,g#5]@2 [c5,e5,a5]@2 [b4,e5,g#5]@4 [d5,g5,b5]@20]/2", G: "[d4,a#4,d5]",
  H: "[c4,a4,c5]", I: "[a4,d5,f5] [g4,c5,e5] [f4,a4,c5]@2",
  J: "[a4,d5,f5]@2 [a4,d5,f5]!2 [g4,c5,e5]@2 [g4,c5,e5]@2 [f4,a4,c5]@8", // Dm C F
  K: "[a4,d5,f5]@2 [g4,c5,e5]@2 [f4,a#4,c5] [f4,a4,c5] [f4,a4,c5]@2", // Dm C Fsus4 F
  L: "[a4,d5,f5]@2 [a4,d5,f5]!2 [g4,c5,e5]@2 [f4,a#4,c5]@2 [f4,a4,c5,f5]@8", M: "[g4,b4,d5] [g4,c5,d5] [g4,b4,d5] ~",
  N: "[g4,b4,d5]@2 [g4,b4,d5]!2 [g4,c5,d5]@2 [g4,c5,d5]@2 [g4,b4,d5]@4 ~@4", // G Gsus4 G
  O: "[g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@6 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]!2", // E Asus2 E Asus2 E Asus2
  P: "[[g#4,b4,e5] [a4,b4,e5] [g#4,b4,e5]@2 [g4,b4,d5]@8 [a4,d5,f5]@2 [g4,c5,e5]@2]/2", // E Asus2 E G Dm C
  Q: "[f4,a4,c5]@8 [a4,d5,f5]@2 [a4,d5,f5]!2 [g4,c5,e5]@2 [g4,c5,e5]@2", R: "[f4,a4,c5]@2 [a4,d5,f5] [g4,c5,e5]",
  S: "[f4,a#4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@4 [a4,d5,f5]@2 [a4,d5,f5]!2 [g4,c5,e5]@2 [f4,a#4,c5]@2", // Fsus4 F Dm C Fsus4
  T: "[f4,a4,c5,f5]@2 [a4,d5,f5] [g4,c5,e5]", U: "[f4,a4,c5,f5]@2 [g4,b4,d5] [g4,c5,d5]",
  V: "[g4,b4,d5]@4 ~@4 [g4,b4,d5]@2 [g4,b4,d5]!2 [g4,c5,d5]@2 [g4,c5,d5]@2", W: "[g4,b4,d5] ~ [g4,b4,d5] [g4,c5,d5]",
  X: "[[g4,b4,d5]@4 ~@4 [g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@6 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@6 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4]/3", // G E Asus2 E Asus2 E Asus2 E …
  Y: "[g4,b4,d5]", Z: "[~@21 [f#4,a4,d5]@27 [g#4,b4,e5]@27 [a4,d5,f#5]@26 [b4,e5,g#5]@27]/4",
  AA: "[[a4,c#5,e5]@27 [a4,d5]@17 [d#4,g#4]@9 [e4,a4]@9 [e4,g#4]@9 ~@25]/3", // A D5 G#5 A5 E
  AB: "[a4,d5,f5]@2 [a4,d5,f5]!2 [c5,e5,g5]@2 [c5,f5,g5]@2 [c5,f5,a5]@8", // Dm C Csus4 F
})).s("gm_church_organ").gain(0.3)

// chords · harpsichord · "Clavicembalo, clavic."
const harpsichord = note("<~@43 A B@2 C@3 D@2 E@5 F@3 G H I@3 J@2 K@4 L M@3 N@2 O ~@38>".pickRestart({
  A: "~@16 a5@3 g5 f#5@4 ~ [e5,g5]@4 c#5@3", // Em
  B: "[~@2 [d5,f#5]@4 a4@4 ~ e5 f#5 e5 f#5 e5@4 ~ e5 f#5 e5 f#5 e5@4 e5 ~ f#5 e5 f#5 e5@4 a5@3 ~ g5 f#5@4 [e5,g5]@4 ~ c#5@4 [d5,f#5]@4 ~ a4@4, ~@11 a4@9 a4@8 a4@9 ~@27]/2", // D Em D
  C: "[e5 f#5 e5 f#5 e5@4 ~ e5 f#5 e5 f#5 e5@4 ~ e5 f#5 e5 f#5 e5@4 ~ a4@3 g4 f#4@4 ~ [e4,g4]@4 c#4@4 [d4,f#4]@4 ~ a3@4 e4 f#4 ~ e4 f#4 e4@4 e4 f#4 e4 ~ f#4 e4@4 e4 f#4 e4 f#4 ~ e4@4 a4@3 g4 f#4@4 ~ [e4,g4]@4 c#4@3, a4@9 a4@9 a4@9 ~@26 a3@9 a3@9 a3@9 ~@16]/3", // Em D Em
  D: "[~@2 [d4,f#4]@4 a3@4 ~ e4 f#4 e4 f#4 e4@4 ~ e4 f#4 e4 f#4 e4@4 e4 ~ f#4 e4 f#4 e4@4 ~@3 e5@2 g5@2 f#5@2 e5@2 d5@2 ~ c#5@2 b4@2 a4@2 g4@2 ~ f#4@2 e4@2, ~@11 a3@9 a3@8 a3@9 a3@27]/2", // D
  E: "[f#4@2 d5@2 f#5@2 ~ e5@2 d5@2 c#5@2 b4@2 ~ a4@2 g4@2 f#4@2 e4@2 d4@2 ~@3 e5@2 g5@2 f#5@2 ~ e5@2 d5@2 c#5@2 b4@2 c#4@3 g4@2 f#4@2 e4@2 f#5@3 ~ e5 ~@18 d5@4 f#5@3 e5 ~@18 d5@4 ~ f#5@3 e5 ~@18 d5@4 f#5@3 ~ e5 ~@18 d5@4, d3@27 c#4@4 ~@5 c#4@4 ~@4 a4@2 ~@7 [d3,f#4]@9 d3@9 d3@9 [e3,g#4]@9 e3@9 e3@9 [f#3,a4]@9 f#3@8 f#3@9 [g#3,b4]@9 g#3@9 g#3@9, ~@58 d5@9 c#5@9 ~@8 d5@9 c#5@9 ~@9 d5@9 c#5@9 ~@9 d5@9 c#5@9 ~@4]/5", // D E F#m G#m
  F: "[e5@3 d5 ~@18 c#5@4 ~ d5@3 c#5 ~@9 a4@4 g#4@4 ~ a4@4 a4 b4 ~ a4 b4 a4 b4 a4 b4 g#4@9 ~@9 [e4,b4]@4 [e4,b4]@2 ~ [e4,b4]@2 [e4,b4]@4 [e4,b4]@3, [a3,a4]@3 a3@3 a3@3 [d3,d4]@3 d3@3 ~@17, ~@4 c#5@9 b4@9 ~@9 b4@9 ~@4 d#3@9 e3@18 ~@9 e3@9 e3@7]/3", // E5 A D
  G: "~@2 [e4,a4,c#5]@4 e5@4 ~ [e3,b3,e4,b4]@4 [e3,b3]@2 [e3,b3]@2 ~ [e3,b3,g#4]@4 [e3,b3]@4 [e3,c#4,a4]@4, ~@2 e3@9 ~@21", // A E5 E E5 A
  H: "~ e4@4 [e4,b4]@4 ~ [e4,b4]@2 [e4,b4]@2 [e4,b4]@4 ~ [e4,b4]@4 [e4,a4,c#5]@4 ~ e5@4, ~@5 e3@9 e3@9 e3@9", // E5 A
  I: "[b4@2 g#4@2 g#4@2 ~ a4@2 a4@2 b4@2 b4@2 ~ c#5@2 c#5@2 d5@2 d5@2 e5@2 ~ e5@2 f#5@2 f#5@2 g#5@2 ~ d4@8 ~@5 a5@2 f#5@2 f#5@2 ~ e5@2 a5@2 f#5@2 e5 f#5 e5 ~ f#5 e5 f#5 e5 f#5 c#4@4 ~ d5@2 c#5@2 c#5@2 b4@2 c#5@2 ~ d5@2 [e4,a4]@7, e3@9 e4@9 e4@9 d4@9 [b4,e5,g#5]@13 ~@47, ~@44 d4@9 c#4@9 c#4@9 ~@9 d4@9 ~@7]/3", // A5 E
  J: "[~@2 g#4 a4 g#4 a4 g#4 a4 g#4 ~ a4 a4@2 b4@2 b4@2 c#5@2 ~ c#5@2 d5@2 d5@2 e5@2 f#5@2 ~ e5@2 f#5@2 a4@2 [e4,b4]@4 ~ [e4,b4]@2 [e4,b4]@2 [e4,b4]@4 ~ [e4,b4]@4 [e4,a4,c#5]@4 ~ e5@4, ~@2 e3@9 f#3@9 f#3@8 d3@9 e3@9 e3@9 e3@9]/2", // E5 A
  K: "[[e3,b3,e4,b4]@4 [e3,b3]@2 ~ [e3,b3]@2 [e3,b3,g#4]@4 [e3,b3]@4 ~ [e3,c#4,a4]@9 [b3,b4]@4 [e4,b4]@2 [e4,b4]@2 ~ [e4,b4]@4 [e4,b4]@4 [e4,a4,c#5]@4 ~ e5@4 b4@2 ~ g#4@2 g#4@2 a4@2 a4@2 b4@2 ~ b4@2 c#5@2 c#5@2 d5@2 ~ d5@2 e5@2 e5@2 f#5@2 f#5@2 ~ g#5@2 d4@9 ~@4 a5@2 f#5@2 ~ f#5@2 e5@2 a5@2 f#5@2 ~ e5 f#5 e5 f#5 e5 f#5 e5 f#5 c#4@4, ~@27 e3@9 e3@8 e3@9 e3@9 e4@9 e4@9 d4@9 [b4,e5,g#5]@13 ~@26, ~@98 d4@9 c#4@9 c#4@8 ~@4]/4", // E5 E E5 A B E5 A E
  L: "~ d5@2 c#5@2 c#5@2 ~ b4@2 c#5@2 d5@2 [e4,a4]@9 g#4 a4 g#4 a4 ~ g#4 a4 g#4 a4, ~@5 d4@9 ~@9 e3@9", // A5
  M: "[a4@4 [a4,c#5]@2 ~ [a4,c#5]@2 [a4,c#5]@4 [c#5,e5]@4 ~ [b4,d5]@4 [e4,b4]@4 ~ a4@4 [a4,c#5]@2 [a4,c#5]@2 ~ [a4,c#5]@4 [c#5,e5]@4 [b4,d5]@4 ~ [e4,b4]@4 [a3,a4,c#5]@4 ~ a5@2 a5@2 a5@2 e5@2 ~ a5@2 a5@2 a5@2 e5@2 ~ a5@2 a5@2 a5@2 f#5@2 e5@2 ~ d5@2 d5@2 c#5@2 b4@2 ~, a3@9 a3@9 e3@9 a3@9 a3@8 e3@9 ~@9 a4@9 c#4@9 d4@9 e4@7]/3", // A C#m Bm E5 A C#m Bm E5 …
  N: "[a4@2 b4 c#5 b4 c#5 b4 c#5 a4 ~ b4 [a3,a4]@4 a5@2 a5@2 ~ a5@2 e5@2 a5@2 a5@2 a5@2 ~ e5@2 a5@2 a5@2 a5@2 ~ f#5@2 e5@2 d5@2 d5@2 c#5@2 ~ b4@2 a4@2 b4 c#5 b4 c#5 ~ b4 c#5 a4 b4, ~@2 e3@9 ~@9 a3@8 c#4@9 d4@9 e4@9 e3@9]/2", // A
  O: "[a3,a4]@3 ~", // A
})).s("gm_harpsichord").gain(0.3)

// chords · clavinet · "Clavicembalo, Clav.2"
const clavinet = note("<~@90 A B C D C E F G F H I J I K@3 L M N M N M N M N>".pickRestart({
  A: "~@8 b3 c4 d4 e4 f4@2 d4 e4", B: "f4 g4 a4@2 f4 g4 a4 b4 [f5,a5]@4 g5@4",
  C: "[f5,c6]@8 [f5,a5]@2 [f5,a5]!2 g5@2 [g5,c6]@2", D: "[f5,c6]@2 [f5,a5] g5", E: "[f5,c6]@2 [f5,a5] [e5,g5]",
  F: "[f5,a#5]@2 [f5,a5]@2 [f5,a5]@4 [a5,d6]@2 [a5,d6]!2 c6@2 [f5,a#5]@2", // A#5 F D5 A#5
  G: "~ f5 e5 f5 g5 a5 g5 a5 [f5,a5]@4 [e5,g5]@4, a5@5 ~@11", // F Em
  H: "~ f5 e5 f5 g5 a5 g5 a5 [g4,b4,d5]@4 [g4,c5,d5]@4, a5@5 ~@11", // G Gsus4
  I: "[g4,b4,d5]@4 ~@4 [g4,b4,d5]@2 [g4,b4,d5]!2 [g4,c5,d5]@2 [g4,c5,d5]@2", J: "[g4,b4,d5] ~ [g4,b4,d5] [g4,c5,d5]",
  K: "[[g4,b4,d5]@4 ~@4 [g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@6 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@6 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]!2 [g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4]/3", // G E Asus2 E Asus2 E Asus2 E …
  L: "g4 a4 b4 c5 d5@2 b4 c5 d5 e5 f5@2 d5 e5 f5 g5", M: "[f5,a5] [g5,b5] [f5,c6]@2",
  N: "~ f5 g5 a5 b5 a5 b5 c6 [f5,c6]@8", // F5
})).s("gm_clavinet").gain(0.3)

// bass · electric bass pick · "Basso elettrico, bass"
const bass = note(`<
  ~@2 A B C D E ~@5 F G F G H I H I J K J K L@2 M N O P O P Q P Q R S T S U@3 V ~@16 W@2 ~@4 X Y@5 Z@3 AA@2 F G F G H I
  H I J K J K L@2 M N O P O P Q P Q R S T S U@3 V F G F G F I F AB
>`.pickRestart({
  A: "~@8 g2@4 ~@2 d2 c2", B: "d2@4 ~@2 d2 c2 d2@4 ~@2 d2 c2", C: "d2@2 d2 c2 d2@4 g2@4 ~@2 a2@2",
  D: "e2@4 ~@2 a2!2 e2@4 ~@2 a2!2", E: "e2@2 a2!2 e2@2 a2@2 e2@4 g2@4", F: "d2@8 c2@8 f1@3 ~@3 f1@2 f1@4 f1@4",
  G: "d2@4 d2@2 d2@2 c2@4 c2@4 f1@3 ~@3 f1@2 f1@4 f1@4", H: "d2@2 c2@2 a#1 f1!2 ~",
  I: "d2@4 d2@2 d2@2 c2@4 a#1@4 f1@3 ~@3 f1@2 f1@4 f1@4", J: "g1@3 g1 g1@4 g1@4 ~@4", K: "g1@2 g1!2 g1@2 ~@2 g1@2 ~@6",
  L: "e1 a1 e1@3 a1 e1 a1", M: "e1 a1 e1@2 g1@4", N: "~@2 d2 c2", O: "f1@3 ~@3 f1@2 f1@4 f1@4 d2@4 d2@2 d2@2 c2@4 c2@4",
  P: "f1@3 ~@3 f1@2 f1@4 f1@4 d2@8 c2@8", Q: "a#1@2 f1@2 f1@2 ~@2 d2@2 d2!2 c2@2 a#1@2",
  R: "f1@3 ~@3 f1@2 f1@4 f1@4 g1@6 g1@2 g1@8", S: "g1@4 ~@4 g1@2 g1!2 g1@2 ~@2", T: "g1@2 ~@6 g1@3 g1 g1@4",
  U: "[g1 ~@3 e1 a1 e1@3 a1 e1 a1 e1 a1 e1@3 a1 e1 a1 e1 a1 e1@2]/3", V: "g1 ~",
  W: "[~@15 b1@2 b1@2 ~ b1@4 b1@4 c#2@18 ~@18]/2", X: "~@5 e1@27",
  Y: "[e1@27 e1@26 e2@27 d2@27 c#2@26 d2@9 e2@9 e1@9]/5",
  Z: "[a1@9 a1@9 e1@9 a1@9 a1@8 e1@9 a1@9 a1@9 e1@9 d2@9 e2@7]/3", AA: "[~@2 e1@9 a1@9 a1@8 c#2@9 d2@9 e2@9 e1@9]/2",
  AB: "d2@2 d2!2 e2@2 f2@2 f2@8",
})).s("gm_electric_bass_pick").gain(0.3)

// chords · piano · "Piano, piano"
const piano = note("<~@27 A B C B D E F G H I J I K@3 L ~@33 M N M N O P O P Q R Q R S@2 T@2 ~@23>".pickRestart({
  A: "~@8 [a4,d5,f5]@2 a4 d5 [g4,c5,e5]@2 [g4,c5,e5]@2", // Dm C
  B: "[f4,a4,c5]@4 ~@4 [a4,d5,f5]@2 d5 a4 [g4,c5,e5]@2 [e4,g4,c5]@2", // F Dm C
  C: "[f4,a4,c5]@8 ~@8 d5@3 ~@3 a4@2 [g4,c5,e5]@8, ~@2 [a4,f5] ~, ~@5 d5 ~@2", D: "[f4,a4,c5] ~ [a4,d5] [g4,c5]",
  E: "[f4,a#4]@2 [f4,a4]@2 [f4,a4]@4 [a4,d5,f5]@2 [a4,d5,f5]!2 [g4,c5,e5]@2 [f4,a#4,c5]@2", // A#5 F Dm C Fsus4
  F: "[f4,a4,c5]@15 ~ [a4,d5]@8 [g4,c5]@8", // F D5 C5
  G: "[f4,a#4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@4 [a4,d5,f5]@2 [a4,d5,f5]!2 [g4,c5,e5]@2 [f4,a#4,c5]@2", // Fsus4 F Dm C Fsus4
  H: "[f4,a4,c5,f5]@15 ~ [g4,b4,d5]@8 [g4,c5,d5]@8", // F G Gsus4
  I: "[g4,b4,d5]@4 ~@4 [g4,b4,d5]@2 [g4,b4,d5]!2 [g4,c5,d5]@2 [g4,c5,d5]@2", J: "[g4,b4,d5] ~ [g4,b4,d5] [g4,c5,d5]",
  K: "[[g4,b4,d5]@8 ~@8 [g#4,b4,e5]@4 [a4,b4,e5]@4 [g#4,b4,e5]@11 ~ [a4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4 [a4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4 [a4,b4,e5]@4 [g#4,b4,e5]@11 ~ [a4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4 [a4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4 [a4,b4,e5]@4 [g#4,b4,e5]@8]/3", // G E Asus2 E Asus2 E Asus2 E …
  L: "[g4,b4,d5]@15 ~", M: "[f4,a4,d5]@4 f4@2 d5@2 [e4,g4,c5]@8 [c4,f4,a4]@15 ~",
  N: "[f4,a4,d5]@2 f4 d5 [e4,g4,c5]@2 [e4,g4,c5]@2 [c4,f4,a4]@4 a4 c4 f4 a4", // Dm C F
  O: "[f4,a4,d5]@2 a4 d5 [e4,g4,c5]@4 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,f4,a4]@4", // Dm C Fsus4 F
  P: "[a4,d5,f5]@4 [a4,d5,f5]@2 [a4,d5,f5]@2 [g4,c5,e5]@4 [f4,a#4,c5]@4 [f4,a4,c5,f5]@15 ~", // Dm C Fsus4 F
  Q: "[g4,b4]@2 b4 d5 [g4,c5,d5]@4 [g4,b4,d5]@4 ~@4", // G Gsus4 G
  R: "[g4,b4,d5]@2 [g4,b4,d5]!2 [g4,c5,d5]@2 [g4,c5,d5]@2 [g4,b4,d5]@4 ~@4", // G Gsus4 G
  S: "[g#4,b4,e5]@4 [a4,b4,e5]@4 [g#4,b4,e5]@11 ~ [a4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4 [a4,b4,e5]@2 [a4,b4,e5]@2", // E Asus2 E Asus2 E Asus2
  T: "[[g#4,b4,e5]@2 [a4,b4,e5]@2 [g#4,b4,e5]@4 [g4,b4,d5]@15 ~@9]/2", // E Asus2 E G
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A ~ A ~ B ~@5 C@7 D E@4 F@2 G A H@8 E@3 I J@2 ~@17 K ~@5 L M N ~@3 M O P Q L C@7 D E R E R S@2 T A H@7 U E U E V W
  X ~ C@7 D
>`.pickRestart({
  A: "~ x", B: "~@3 x", C: "x ~@7 x ~@2 x ~@4", D: "x", E: "x ~@2 x ~@4 x ~@2 x ~@4", F: "x ~@3 x ~@2 x ~@4 x!2 ~@2",
  G: "x ~@3 x ~@2 x ~@8", H: "x ~@2 x ~@4 x ~@7", I: "x ~@2 x ~@4 x ~@3 x ~@2 x", J: "~@4 x ~@2 x ~@4 x ~@2 x",
  K: "~@7 x", L: "~@5 x ~@8 x ~@8 x ~@8", M: "x ~@8 x ~@8 x ~@8 x ~@4", N: "~ x ~ x ~@4",
  O: "~@4 x ~@7 x ~@8 x ~@8 x ~", P: "~@7 x ~@8 x ~@8 x ~@6", Q: "~@2 x ~@8 x ~@8 x ~@7 x ~@3", R: "x ~@2 x ~@12",
  S: "x ~@3 x ~@2 x!2 ~@3 x ~@3", T: "x!2 ~@2", U: "~@8 x ~@2 x ~@4", V: "~@8 x ~@3 x ~@2 x",
  W: "x ~@3 x ~@3 x ~@3 x ~@2 x", X: "x!4",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~@12 A B A B A B A C D A D A E@2 F G B H B H B H@2 I A@3 J K@2 L ~@16 M ~@6 N ~@4 O P Q R S A B A B A B A T U V U V
  W@2 F G B H B H B H B X Y Z Y AA AB@2 L A B A B A B A T
>`.pickRestart({
  A: "~@2 x ~@3 x!2", B: "~@2 x!2 ~@2 x!2", C: "~@4 x ~ x ~ x!4 ~@4", D: "~@8 x ~@15 x!2 ~ x!3 ~ x",
  E: "~ x ~@2 x ~@2 x", F: "~ x ~@2 x ~@3", G: "~@3 x", H: "~@2 x!2 ~@2 x ~", I: "~@8 x!2 ~ x!3 ~ x ~@8 x ~@7",
  J: "~@5 x ~@2", K: "x ~@3 x!2 ~@2", L: "x", M: "~@15 x ~ x ~@2 x ~@3 x ~@3 x ~@3",
  N: "x ~@3 x ~@2 x ~ x ~@3 x ~@4 x ~@3 x ~@9", O: "~@9 x ~@8 x ~@13", P: "~@2 x ~@3 x ~@8 x", Q: "~@7 x ~@17 x ~@6",
  R: "~ x ~@8 x ~@3 x ~", S: "~@14 x ~@8 x ~@8", T: "~@2 x!2 ~@4", U: "~@8 x ~@3 x ~@11 x!8",
  V: "~@8 x ~@3 x ~@3 x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", W: "~ x ~@3 x ~ x", X: "~@6 x!2", Y: "~@8 x!8 ~@8 x ~@3 x ~@3",
  Z: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x ~@8 x ~@3 x ~@3", AA: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x ~@4 x ~@11", AB: "~ x ~ x ~ x ~@2",
})).gain(0.44)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@20 A B A B C@2 A ~@9 D E@2 F C E ~@25 G H I J ~@13 K L K L C@2 M ~@8 N O N O P C@2 ~@9
>`.pickRestart({
  A: "x!5 ~@3", B: "x!5 ~ x ~", C: "x!8", D: "x!6 ~@2", E: "x!7 ~", F: "x!2 ~@2 x ~@2 x", G: "~@21 x ~@8 x ~",
  H: "~@7 x ~@8 x ~@8 x ~@6", I: "~@2 x ~@8 x ~@8 x ~@7 x ~@3", J: "~@5 x ~@8 x ~@8 x ~@8", K: "x ~ x ~ x!2 ~@2",
  L: "x!3 ~@5", M: "x!4 ~@4", N: "~@2 x!2", O: "x!2 ~@2 x!3 ~", P: "~@4 x!4",
})).gain(0.44)

// drums · low tom
const low_tom = s("lt").struct("<~@83 [~@24 x!2 ~ x!3 ~ x] ~@15 [~@8 x!2 ~ x!3 ~ x ~@16] ~@15>").gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A ~ A ~ B ~@12 C ~@19 D ~@43 E ~@15 F ~@15>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~@24 x!2 ~ x!2 ~@3", D: "~@8 x!2 ~ x!3 ~ x ~@16", E: "~@16 x!2 ~ x!3 ~ x ~@8",
  F: "x!2 ~ x!3 ~ x ~@24",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@71
  [x ~@17 x ~@8 x ~@4]
  [~@12 x ~@8 x ~@10]
  [~ x]
  [~@11 x ~@16 x ~@3]
  [~@5 x ~@17 x ~@8]
  ~@39
>`).gain(0.44)

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

// drums · ride
const ride = s("rd").struct("<~@12 A@7 B ~@7 C A@7 D ~@29 E F G ~@8 A@7 B ~@7 C A@7 ~@8 A@7 B>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "~@2 x!2", D: "x ~ x!2", E: "~@5 x ~@8 x ~@8 x ~@8", F: "~@27 x ~@4", G: "~ x ~ x ~@4",
})).gain(0.44)

stack(church_organ, harpsichord, clavinet, bass, piano, kick, snare, hihat, low_tom, mid_tom, open_hat, crash, ride)

More by Le Orme