Strudelify
My Funny Valentine cover art

Songs For Young Lovers

My Funny Valentine

Sinatra

KeyD majorTempo80 bpm
0:00/0:00
// My Funny Valentine — Sinatra
// 80 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 62 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · acoustic bass · "Bass"
const bass = note(`<
  ~@2 A@2 B C D@3 E@3 F G H I@2 J K@2 L M N O P Q R@2 S T U@2 V@2 W X Y Z K@2 L M N O P Q R@2 S T U@2 V@2 W X Y Z AA@4
>`.pickRestart({
  A: "[b1@29 ~ c#3@8 ~@10 a#1@24 a#2@15 a#1@8 ~, ~@39 b2@17 ~@40]/2", B: "b1@22 ~@8 f#2@9 g#2@3 ~ b1@5",
  C: "e1@35 f#2@13", D: "[~ b1@38 f#2@8 g1@23 ~ a2@7 ~ g2@16 e2@25 f#2@24]/3",
  E: "[~ e2@19 ~@4 f#2@6 g#2@4 ~@2 a#2@5 ~@6 b1@30 ~ b2@9 ~ b1@3 a#1@4 f#1@40 ~@4 f#1@4 ~, ~@42 b2@21 ~@15 a2 ~@56 f#2@7 ~@2]/3",
  F: "b1@39 f#2@4 ~ b1@4, a#1 ~@23", G: "~ g#2@20 g#1@18 g#2@4 g#1@5", H: "g1@24 g2@14 ~ a2@5 g2@4",
  I: "[e2@15 ~@5 e2@3 ~ e2@18 ~@5 g1@40 d2@9]/2", J: "a1@21 ~@2 a2@15 ~ a1@7 ~@2",
  K: "[d2@23 a2@16 d3@8 d2@23 ~@3 d2@14 ~@2 d2@3 ~ a2@3]/2", L: "~ d2@22 ~ d2@10 ~ a2@12 ~",
  M: "d2@21 ~@3 d2@14 ~ a2@8 ~", N: "d2@22 ~@2 f#2@14 ~ a#2@4 c#3@4 ~", O: "b2@24 d3@7 f#3@7 ~ d3@8 ~, ~@31 d3 ~@16",
  P: "g2@29 ~ d3@8 ~ g3@3 d3@5 ~", Q: "g2@24 f#2@15 ~ a2@3 b2@4 ~",
  R: "[b1@29 f#2@10 b2@2 f#2@6 a#1@21 ~@4 a#1@14 f#2@9 ~]/2", S: "b1@22 ~@2 b1@14 ~ f#2@4 b2@4 ~",
  T: "g#2@28 a2@6 ~ b2@13, ~@35 a2 ~@12", U: "[g2@22 ~@2 g2@23 c#2@24 f#2@23 ~@2]/2",
  V: "[b2@22 ~ b2@24 d2@24 ~ a2@8 d3@8 a2@8]/2", W: "g2@28 ~@2 d3@5 g2@5 d3@3 f#2@3 ~@2",
  X: "e2@23 ~ f#2@5 ~ g2@5 ~ a2@12", Y: "d2@34 ~ d3@5 c3@3 d3@4 ~", Z: "g2@24 f#2@5 e2@5 d2@7 c#2@6 ~",
  AA: "[~@17 b1@26 c#3@4 d3@5 c#3@12 d3@3 c#3@4 ~@47 b1@46 ~@28, ~@71 b2@86 ~@35, ~@95 f#2@62 ~@35]/4",
})).s("gm_acoustic_bass").gain(0.4)

// chords · piano · "Keyboard"
const piano = note("<A@2 B@7 C@4 D E@2 F@2 G@2 H@2 I@4 J@3 K@6 L@3 G@2 H@2 I@4 J@3 K@6 L@3 M@4>".pickRestart({
  A: "[~@24 a4@23 ~, ~@23 c#4@24 ~, ~@47 [b1,b2,d4,f#4]@47 ~@2]/2", // Bm
  B: "[~@88 a#3@4 d4@2 ~@41 [b3,a5]@4 [d4,d5]@2 ~@44 g5@5 ~@41 b3@7 ~@43 d5@5 ~ c#4@24 ~ [c#4,e4]@23 ~, b3@47 [a#3,a#5] d4 a4@45 ~ b3@36 ~@12 [b3,d4]@21 ~@4 f#6@6 d6@6 b5@10 g3@48 ~ g3@19 d5@3 f#5@14 e5@4 g3@7 ~@25 [f#3,a#3]@24 ~, [d4,f#4]@35 c#6@59 ~@3 a4@35 ~@11 e5@48 ~@31 a3@16 ~@17 a4@31 ~ c#5@48 ~, ~ a4@39 d5@54 ~@2 [d4,f#4]@38 ~@10 g#4@47 [d4,f#5]@47 ~@2 d4@46 ~@50, ~@28 a5@66 ~@2 a5@22 ~@9 c#6@13 ~@23 [g#3,b3]@28 b3@40 ~@8 b3@32 e3@15 [e3,g3]@25 ~@25]/7", // B7 D C#m A# Bm F# D G#m …
  C: "[~@16 c#5@4 d5@4 ~ [f#3,a#3]@5 ~@11 f#4@6 ~@41 a5@6 ~@42 f#5@6 ~@2 a4@24 ~@16 d4@7 ~, [g3,b3,d4]@22 ~@3 [c#4,e5]@22 b5@39 d4@8 a#3@33 f#3@15 b3@33 [b3,b4]@16 ~, ~@30 d4@17 b3@30 ~ b3@17 [c#4,e4]@48 [d4,f#4]@25 [c#4,f#4,a4]@23 ~, ~@30 [f#3,a#3]@6 [f#3,a#3,e4]@12 d4@35 c#6@12 f#5@30 c#6@6 a#5@12 ~ d5@39 d5@8 ~, ~@31 f#5@6 g5@11 a4@47 ~ e6@47 ~@25 d4@16 ~@8]/4", // F# G C#m B C#m D F#m F# …
  D: "b3@10 ~@3 d4@3, g#4, d4@13 ~@3, ~@5 b3@3",
  E: "[~@5 d5, g3@29 [a3,d4] b4@17 e3@21 a5@28, ~ b3@46 [b3,d4]@47 ~@2, ~ d4@17 g4@29 g3@40 ~@9, ~@12 e4@27 d5@40 e3@16 ~]/2", // D5 Bm
  F: "[d4@30 ~@10 d5@4 g5@2 ~@2 e5@21 ~@20 d5@2 ~ d3@4, a#3@45 ~@2 [c#4,e4]@23 ~@26, g3@39 g3@7 ~@50, ~@30 [a3,d4]@15 ~ a3@22 ~@4 [a3,c#4,f#4]@21 ~@3, ~@35 g4@11 ~@25 [a4,f#5]@15 ~@2 g5@6 ~@2]/2", // C#m D5 F#m D
  G: "[~@12 d3@8 ~@20 e4@5 ~@28 d6@3 ~ c#6@4 ~@4 a5@7 d3@4, [d4,f#4,a4]@20 [e3,a3]@26 ~ [f#3,d4,f#4,a4]@25 [c#4,e4,a4]@23 ~, [f#3,a3]@8 d5@37 ~@36 b5@14 ~, ~ a5@22 ~ a4@21 ~@22 e3@28 ~, ~@8 [f#3,a3]@15 c#4 e4@7 c#4@14 ~@2 a3@48 ~]/2", // D A5 D A F#m
  H: "[~ [f#3,a3]@6 ~@17 c#4@4 ~@4 f#5@12 d3@2 ~@38 f#5@7 d3@4 ~, ~ [d4,f#4,a4,a5]@19 [e3,a3]@12 a5@4 ~@12 a5@23 ~@5 f#5@8 ~@12, ~@8 [f#3,a3]@15 ~ e4@4 a5 c#4@17 ~ [f#3,a3,d4,f#4,a4]@24 ~ [c#4,e4,a4]@23 ~, ~@9 d5@14 ~ a4@23 ~@17 d3@7 ~@9 g5@14 ~@2, ~@18 d3@5 ~@5 e5@19 ~@21 [e3,a3]@26 ~@2]/2", // F#m D A5 F#m D A A5
  I: "[~@8 d5@12 [f#3,a#3]@3 ~@20 d5@3 ~ b3 b3@12 ~@28 f#5@7 [g3,b3]@24 [g3,b3,e4]@24 [b3,d4,f#4]@22 ~@3 e4@4 ~@8 [f#3,c#4]@8 d4@4, [f#3,a3,a5]@23 [f#3,a#3,c#4,e4]@24 d4@17 c#5@7 d4@7 b3@2 b4@3 d4 e4@11 ~@73 [f#3,c#4]@12 ~@12, ~ [d4,f#4,a4]@22 ~@16 a5@7 ~@2 [f#4,a4,d5]@19 d4 d5@26 ~@82 d4@12 ~@4, ~@60 b3@13 c#5@22 a4@70 ~@7 e4@19 ~, ~@60 c#4@7 [c#4,f#4,a4]@27 ~ [d4,f#4,a5]@48 ~@25 [a#3,f#4]@23 ~]/4", // F# G Em Bm F#5 F#m F#7 F#5 …
  J: "[~@40 e5@4 f#5@2 ~@2 e5@3 ~ f#5@3 ~@5 e4 ~@31 b5@2 ~ a5 ~@40 g4@7 ~, [f#4,a4]@46 ~ f#4@9 e5@22 [d4,a5]@2 b5@3 c#6@3 d6 f#4 c6 c#6@5 ~@3 b5@30 [d4,f#4]@4 d6 b3@11 ~, d4@29 d4@17 ~ d4@21 e4@75 ~, ~@17 b3@18 [b3,e4]@11 ~ a#3@20 a#3@27 ~ [d4,f#4]@25 b3@4 c#6@19 ~, ~@30 d5@16 ~@2 e4@10 ~ f#4@17 f#5@18 ~@2 a4@47 ~]/3", // F#m D5 D E5 D
  K: "[~@4 d6@2 ~@2 c#6@13 ~@28 g3@14 ~@25 [d5,d6]@7 g4@2 f#6@5 ~@20 f#4@21 ~@44 b3@4 ~@25 d4@7 ~@8 d4@8 ~ e5@6 ~@33 f#5@8 g3, g#4@35 d5@4 g#4 b5@44 d4@10 ~ [c#4,e4]@23 ~ [a#3,c#4,e4]@24 d4@25 d4@7 b3@8 [d4,c#5]@9 [d4,f#4,a4]@12 d6@8 c6@4 [f#4,a4,b5]@7 d4 a5@6 f#5@9 g3@24 g3@13 g3@11 ~, d4@31 [d4,a5]@16 b4@47 ~@3 g4@25 ~@21 [f#4,a4]@48 c5@17 c#6@31 ~ [b3,d4]@23 [b3,d4,f#4]@24 ~, b3@16 ~@7 b3@25 ~ d4@30 [b3,c#5,c#6]@15 ~@3 e6@10 e6@36 b3 d5@31 d5@17 ~@8 e6@39 ~@9 d5@39 ~, c#6 b4@22 ~ c#5@24 ~ b3@22 g3@23 ~@8 f#6@16 ~@26 f#6@47 ~@5 f#6@43 ~@32 e5@16 ~]/6", // D C#m A#dim Dmaj7 D B7 D5 F#m …
  L: "[~ e5@3 ~@21 [c#4,e4]@22 ~@45 f#5@3 ~@20 d4@4 f#3 e5@10 ~@2 [a#3,f#5]@10 ~@2, [e3,b3,d4]@23 f#3@25 d3@71 a#3@7 ~@18, ~@5 f#5@19 a3@22 ~ d4@31 e4@5 f#4@5 [e4,e5]@7 g3@9 g5@15 ~ f#3@22 ~@2, ~@9 e5@38 ~ f#4@30 a4@17 ~ [b3,d4]@12 g3@4 [b3,f#5]@7 [c#4,e4]@23 ~@2, ~@48 a4 d5@45 ~@3 a5@21 ~@26]/3", // C#m D#m E7 E Bm B5 C#m
  M: "[~@46 d5@5 ~@12 d6@9 ~@48 [b1,b2]@52 ~@20, ~@13 d3@7 f#2@12 a3@40 d6@22 a4@78 ~@20, ~@14 [f#3,a3]@10 b2@11 d4@4 f#4@3 a4@9 d5@22 f#6@96 ~@23, ~@15 c#4@11 d3@29 f#5@20 d7@96 ~@21, ~@17 b1@12 f#3@30 a5@33 b3@81 ~@19]/4", // B F#m
})).s("gm_piano").gain(0.56)

// chords · piano · "Keyboard" · soft notes
const piano_soft = note(`<
  ~@3 A@2 B C@2 ~ D E@2 ~@2 F G ~ H ~@2 I@2 ~@2 J@3 K@2 ~@2 L M ~@2 N ~@4 I@2 ~@2 J@3 K@2 ~@2 L M ~@2 N ~@3 O@3
>`.pickRestart({
  A: "[f#4@46 ~ d5@23 ~@18 f#4@4 ~@3 c6, ~@88 d4 ~@7]/2", B: "~@20 d4@27 ~, b5@35 ~@13", C: "[~@46 e3@33 ~@17]/2",
  D: "e3@22 ~@3 d5 ~@16 a5@5 g4", E: "[f#4@46 ~@2 [a#5,c#6] ~@47, ~@46 f#3@33 ~@17]/2", F: "~@30 c4@17 ~",
  G: "~@40 g3@7 ~", H: "~@22 f#5 ~", I: "[~@14 d3@4 ~@23 d5@6 d5@24 ~@25, ~@35 e4@12 ~@49, ~@18 a5@5 ~@25]/2",
  J: "[~@47 g3@22 ~@26 b3@18 ~@31]/3", K: "[~@47 b3@25 ~@24]/2", L: "~@22 f#3@25 ~", M: "~@19 b3@12 ~@17",
  N: "~@24 e3@23 ~", O: "[~@45 f#4@79 ~@20, ~@13 a6@48 ~@11, ~@11 d4@20 ~@5]/3",
})).s("gm_piano").gain(0.32)

// other · muted trumpet · "Trumpet"
const muted_trumpet = note(`<
  ~@9 A B C D E@2 F G H I@2 J K L M N O P Q@3 R S T@2 U V W@2 X@2 J K L M N O P Q@3 R S T@2 U V W@2 ~@4
>`.pickRestart({
  A: "~@25 e4@4 ~ f#4@5 ~ g4@5 a4@5 ~@2", B: "b4@37 ~@11",
  C: "~@16 d5@3 ~ e5@3 ~@2 f#5@3 ~@2 g5@3 ~@2 f5 f#5@3 ~ e5@2 ~@6", D: "~ f5 f#5@2 ~@4 b4@31 ~@9",
  E: "[~@29 f#4@5 ~ g4@5 ~ f#4@5 e4@4 f#4@35 ~@11]/2", F: "~@25 a4@10 ~ b4@9 ~@3", G: "g4@28 ~@3 a#4@9 g4@6 ~@2",
  H: "a4@23 ~ c#5@11 ~ e5@9 ~@3", I: "[[d4,f#4]@6 ~@2 [d4,f#4]@2 ~@25 [e4,a4]@8 ~@4 [d4,f#4]@7 ~@2 [d4,f#4]@2 ~@38]/2",
  J: "~ f#4@6 ~@2 [d4,f#4]@4 ~@22 [e4,a4]@8 ~@5, d4 ~@7", K: "[d4,f#4]@7 ~ [d4,f#4]@2 ~@18 f#4@4 g4@3 ~ f#4@3 ~@9",
  L: "[d4,a4]@6 ~@3 [d4,a4]@2 ~@12 c#4@11 ~@2 d4@11 ~", M: "d4@11 ~ e4@5 ~@2 f#4@4 ~ a4@6 ~@2 b4@7 ~ c#5@5 ~@3",
  N: "d5@47 ~", O: "~@4 c#5@4 d5@3 ~ c#5@3 ~@13 c#5 ~ d5@2 c#5@3 ~ b4@3 ~ a4@2 ~@2 b4@2 ~@2, ~@12 d5 ~@35",
  P: "c#5@7 ~ d5@14 ~@2 c#5@7 ~ d5@13 ~@3",
  Q: "[c#5@3 ~ d5@3 ~ c#5@20 b4@2 ~@6 a4@6 ~ b4@30 ~@10 f4 [e4,a4] f#4@6 ~ e4@37 ~@2 d4@6 ~@2 c#4@4 ~, ~@85 e4 ~@58]/3", // A5
  R: "b3@15 ~", S: "~@27 b3@2 c#4@2 d4@2 ~@2 e4@3 ~ f#4@3 ~ a4@2 ~@3",
  T: "[d5@22 ~@2 a5@5 ~@2 d5@3 ~@5 d5@3 ~ c#5@3 ~ c5@39 ~@10]/2", U: "~@28 e4@10 f#4@5 g4@4 ~",
  V: "f#4@4 g4@3 ~ f#4@14 ~ e4@16 ~ d4@6 ~@2",
  W: "[d4@24 ~@15 a4@3 ~ b4@3 ~ g4@23 ~ f#4@5 ~@2 f#4 ~@4 d4@5 ~ c#4@5 ~@2, ~@77 e4@5 ~@14]/2",
  X: "[~@8 [d4,f#4]@2 ~@25 [e4,a4]@8 ~@4 [d4,f#4]@7 ~@2 [d4,f#4]@2 ~@38]/2", // D A5 D
})).s("gm_muted_trumpet").gain(0.42).pan(0.3)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note("<~@9 A@6 B@3 C@3 D@5 E@5 F@5 G@2 H@3 D@5 E@5 F@5 G@2 I@3 ~>".pickRestart({
  A: "[~@24 c#5@6 d5@6 ~@7 d4@3 ~ c#6@40 ~ d4@6 ~@80 b5@6 ~@14 e5@92 ~ c#5, ~@36 e5@5 f#4@4 ~ c#4@41 ~@7 c#4@48 ~ d4@35 ~@2 e4@5 ~ f#4@5 e4@47 ~@50, ~@39 a4@3 f#5@5 ~@40 d6@8 c#6@80 ~@8 a5@5 f#5@5 ~@95]/6",
  B: "[~@23 d5@11 ~@2 e5@6 ~@29 d5@21 ~@2 c#5 ~@24 d5@11 ~ e5@10 ~@2 f#4, ~@47 g5@48 [a4,c#5]@39 ~@10]/3", // A
  C: "[~@24 e4@10 c#4@6 ~@7 d4@24 ~@48 c#5@12 a4@13, d4@45 ~@26 a4@56 ~@17, ~@23 c#4@8 ~@51 d5@36 ~@26, ~@95 d4@49]/3",
  D: "[d4@23 [d3,f#4]@24 [d4,a4]@23 ~ c#4@23 ~ d4@11 ~ e4@12 ~ c#5@10 ~ d5@11 ~@49 f#5@24 ~ e5@7 d5@5 ~@6 d5@5 b4, ~@70 [f#4,a#4]@25 b4@24 f#4@20 ~@4 a5@47 ~@50, ~@144 d5@70 ~ c#5@13 c#5@12]/5", // D D5 F#
  E: "[~@41 d4@6 c#5@4 d5@3 c#5@40 ~@32 e5@9 ~@8 e5@4 f#5@4 e5@64 f#5@12 a5@11 ~ d6, ~ b3@33 c#4@7 ~@6 c#4@63 ~@10 d4@17 e4@54 ~@49, ~@30 c#5@7 ~ d5@9 ~@48 d5@30 ~@10 f#5@8 ~@97]/5",
  F: "[~@23 d4@12 c#4@11 ~@32 d4@6 ~@3 d6@4 c#6@4 c6@46 ~@2 e4@31 ~ f#4@8 g4@8 f#4@24 e4@25, ~@22 c#6@25 d4@29 ~@10 c#4@5 ~@4 c4@38 ~@107, ~@48 d6@37 ~@155]/5",
  G: "[d4@71 d5@5 ~ c#5@5 ~ b4@5 ~ c#5@5 ~@2, d5@2 ~@69 c#4@24 ~]/2",
  H: "[~@24 e4@10 c#4@6 ~@7 d4@24 ~@48 c#5@12 a4@13, d4@45 ~@26 a4@24 d4@49, ~@23 c#4@8 ~@51 d5@36 ~@26]/3",
  I: "[~@49 a5@74 ~@21, ~@17 a4@77 ~@50, ~@16 f#5@25 ~@7]/3",
})).s("gm_string_ensemble_2").gain(0.29)

// chords · string ensemble 2 · "Strings" · soft notes
const string_ensemble_2_soft = note("<~@16 A B@3 ~@16 C@2 D@2 ~@16 C@2 E@3 ~>".pickRestart({
  A: "~@23 a#5@24 ~", B: "[~@47 d4 ~@46 f#4@27 ~@23, ~@47 a4@72 ~@25]/3", C: "[~@2 d5@65 ~@29]/2",
  D: "[~@46 f#4@27 ~@23]/2", E: "[~@25 c#6@16 ~@7, ~@15 d4@31 d5@77 ~@21, ~@8 f#4@39 ~@25, ~@49 d4@75 ~@20]/3",
})).s("gm_string_ensemble_2").gain(0.17)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B C D E F G H I J K L M N O P Q R S T U V W X Y N Z AA AB AC AD AE AF AG AH AI Q R S T U V W X Y N Z AA AB AC AD
  AE AF AG AH AI ~@4
>`.pickRestart({
  A: "~@40 x ~@2 x ~@3 x", B: "~@35 x ~@12", C: "x ~@34 x ~@4 x ~@3 x ~@2 x", D: "~@36 x ~@6 x ~@3 x",
  E: "~@35 x ~@4 x ~@2 x ~@3 x", F: "x ~@18 x ~@3 x ~@11 x ~@11 x", G: "x ~@38 x ~@3 x ~@4",
  H: "x ~@11 x ~@10 x!2 ~@5 x ~@5 x ~@5 x ~@4 x", I: "x ~@34 x ~@3 x ~@3 x ~@3 x", J: "~@24 x ~@10 x ~@3 x ~@3 x ~@3 x",
  K: "x ~@10 x ~@12 x ~@11 x ~@3 x ~@2 x!2 ~@2 x", L: "x ~@10 x ~@11 x!2 ~@7 x ~@2 x ~@11 x",
  M: "~@12 x ~@7 x ~@3 x!2 ~@9 x ~@4 x ~@3 x ~@3", N: "x ~@10 x ~@4 x ~@3 x ~@2 x!2 ~@11 x ~@3 x ~@3 x ~@3",
  O: "x ~@11 x ~@10 x ~@10 x ~@8 x ~@3 x", P: "~@11 x ~@4 x ~@3 x ~@2 x!2 ~@7 x ~@2 x!2 ~@7 x ~@2 x",
  Q: "x ~@7 x ~@3 x ~@3 x ~@3 x ~@2 x!2 ~@7 x ~@2 x ~@3 x ~@3 x ~@3 x",
  R: "~@7 x ~@3 x ~@4 x ~@3 x ~@2 x!2 ~@7 x ~@2 x ~@4 x ~@3 x ~@3",
  S: "x ~@7 x ~@2 x ~@4 x ~@3 x ~@2 x!2 ~@10 x ~@4 x ~@3 x ~@2 x",
  T: "x ~@7 x ~@2 x ~@5 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x",
  U: "x ~@10 x ~@4 x ~@3 x ~@2 x!2 ~@11 x ~@2 x ~@4 x ~@2 x",
  V: "x ~@7 x ~@2 x!2 ~@7 x ~@2 x!2 ~@7 x ~@3 x ~@6 x ~@3 x", W: "x ~@9 x ~@4 x ~@3 x ~@3 x ~@11 x ~@11 x",
  X: "~@7 x ~@3 x!2 ~@7 x ~@2 x ~@4 x ~@6 x!2 ~@7 x ~@2 x", Y: "x ~@7 x ~@2 x ~@5 x ~@2 x ~@3 x ~@11 x ~@3 x ~@3 x ~@3",
  Z: "x ~@2 x!4 ~@2 x ~ x", AA: "x ~@10 x ~@4 x ~@3 x ~@3 x ~@7 x ~@3 x ~@2 x ~@7 x",
  AB: "~@8 x ~@2 x ~@5 x ~@2 x ~@3 x ~@10 x ~@4 x ~@3 x ~@3", AC: "x ~@10 x ~@4 x ~@3 x ~@3 x ~@2 x ~@7 x ~@7 x ~@3 x",
  AD: "~@11 x ~@4 x ~@3 x ~@2 x!2 ~@10 x ~@4 x ~@3 x ~@2 x",
  AE: "x ~@2 x ~@3 x ~@3 x ~@7 x ~@3 x!2 ~@7 x ~@3 x ~@3 x ~@3 x ~@2 x",
  AF: "x ~@14 x ~@4 x ~@2 x!2 ~@10 x ~@3 x ~@3 x ~@4", AG: "x!2", AH: "~@16 x ~@3 x ~@3 x ~@14 x ~@3 x ~@4",
  AI: "x ~@10 x ~@4 x ~@3 x ~@3 x ~@6 x ~@3 x ~@3 x ~@8",
})).gain(0.39)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~ B C D E F G H I J K L ~ M N O ~@17 P Q ~@18 P Q ~@6>".pickRestart({
  A: "~@47 x", B: "~@11 x ~@11 x ~@11 x ~@11 x", C: "~@11 x ~@11 x ~@12 x ~@10 x", D: "~@11 x ~@7 x ~@3 x!2 ~@22 x",
  E: "~@11 x!2 ~@10 x ~@11 x ~@12", F: "~@11 x ~@11 x!2 ~@21 x ~", G: "~@10 x!2 ~@11 x ~@24",
  H: "~@10 x!2 ~@11 x ~@11 x!2 ~@10 x", I: "~@11 x ~@23 x ~@12", J: "~@11 x!2 ~@10 x!2 ~@23",
  K: "~@10 x!2 ~@11 x ~@22 x ~", L: "~@23 x ~@24", M: "~@23 x ~@12 x ~@10 x", N: "~ x ~@2", O: "~@35 x ~@12",
  P: "~@11 x ~@36", Q: "~@20 x ~@3 x ~@22 x",
})).gain(0.17)

// drums · clap
const clap = s("cp").struct(`<
  ~@17 A B@2 C B ~ D E F ~ B G H ~ I ~ J ~@4 B@2 C B ~ D E F ~ B G H ~ I ~ J ~@8
>`.pickRestart({
  A: "~@7 x ~@2 x ~", B: "~@3 x", C: "~@13 x ~@34", D: "~ x ~@5 x ~@2 x ~", E: "~@2 x", F: "~ x ~@2 x ~ x ~ x ~ x ~",
  G: "~@5 x", H: "~@7 x ~ x ~ x", I: "~@24 x ~@6 x ~@7 x ~@8", J: "~@4 x ~@2 x ~ x ~@2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@10 [x!4]!48 ~@4>").gain(0.39)

// drums · crash
const crash = s("cr").struct("<~@23 A ~@2 B ~@3 B ~@12 A ~@2 B ~@3 B ~@11>".pickRestart({
  A: "~@47 x", B: "x",
})).gain(0.22)

// drums · ride
const ride = s("rd").struct(`<
  ~@2 A B C D E B@2 F G H A I C J K L M N O P@2 Q R S T U T V W X Y Z AA AB AC AD AE N O P@2 Q R S T U T V W X Y Z AA AB
  AC AF ~@4
>`.pickRestart({
  A: "~@10 x!2", B: "x ~@9 x!2", C: "x ~@39 x ~@2 x ~@4", D: "x ~@39 x ~@6 x", E: "~@39 x ~@4 x ~@3", F: "x ~@3 x!4",
  G: "x ~@38 x ~@3 x ~@3 x", H: "~@39 x ~@3 x ~@3 x", I: "x ~@38 x ~@3 x ~@4", J: "x ~@4 x!2 ~@5",
  K: "x ~@18 x ~@3 x ~@15 x ~@3 x ~@4", L: "x ~@4 x!2 ~@2 x ~@2", M: "x ~@15 x ~@7 x ~@22 x", N: "~@4 x!3 ~@4 x",
  O: "x ~ x!2", P: "x ~@2 x ~@2 x ~@2 x ~ x", Q: "x ~@10 x ~@12 x ~@11 x ~@10 x", R: "~@12 x ~@10 x ~@12 x ~@11",
  S: "~@4 x ~@3 x ~@2 x ~@11 x ~@4 x ~@3 x ~@3 x ~@3 x ~@7", T: "x ~@12 x ~@10 x ~@12 x ~@10", U: "x!4",
  V: "~ x ~@11 x ~@10 x ~@11 x ~@3 x ~@3 x ~@3", W: "x ~@12 x ~@10 x ~@11 x ~@3 x ~@3 x ~@3",
  X: "x ~@11 x ~@11 x ~@11 x ~@10 x", Y: "~@5 x!2 ~@3 x!2", Z: "x ~@19 x ~@2 x ~@12 x ~@10 x", AA: "~@3 x",
  AB: "x ~@19 x ~@4 x ~@22", AC: "x ~@39 x ~@2 x ~@3 x", AD: "~@2 x!2", AE: "~@16 x ~@7 x ~@22 x", AF: "~@4 x!4",
})).gain(0.39)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@15 A ~@2 B ~ C D ~@2 B E C ~@8 F ~@2 B ~ C D ~@2 B E C ~@8 F ~@6>".pickRestart({
  A: "~@15 x", B: "~@5 x ~@6", C: "~@4 x!2 ~@6", D: "~@5 x", E: "~@11 x", F: "~ x ~",
})).gain(0.22)

stack(
  bass, piano, piano_soft, muted_trumpet, string_ensemble_2, string_ensemble_2_soft, snare, snare_soft, clap, hihat,
  crash, ride, ride_soft
)

More by Sinatra