Strudelify
Julia Says cover art

Julia Says

Wet Wet Wet

KeyB♭ majorTempo75 bpm
0:00/0:00
// Julia Says — Wet Wet Wet
// 75 bpm, 4/4, key A# 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: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/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, A@4 for four bars: edit a riff to change every repeat.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A ~ B C D E F G H@2 I J K L M N H@2 O P Q R O P S T I J K L M N H@2 O P Q R O P Q R O P U V W X W X W Y W B P Z AA O
  P Q W O P Q W Y W Y W Y W Y AB@3
>`.pickRestart({
  A: "bb3 a3", B: "bb1@5 ~ bb1 ~ bb1@8", C: "a1@5 ~ a1 ~ d2@8", D: "c2@5 ~ c2 ~ bb1@6 bb1 g1", E: "a1@3 a1 d1@3 gb1",
  F: "g1@6 g1 ~ gb1@8", G: "f1@6 f1 ~ e1@7 ~", H: "eb1@5 ~ eb1 ~ eb1@5 ~ eb1 ~", I: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1 g1",
  J: "a1@5 ~ a1 ~ d2@5 ~ d2 ~", K: "c2@5 ~ c2 ~ bb1@5 ~ bb1 ~", L: "a1@5 ~ a1 ~ d2@4 d2 d1 d1@2",
  M: "g1@5 ~ g1 ~ gb1@5 ~ gb1 ~", N: "f1@5 ~ f1 ~ e1@5 ~ e1 ~", O: "bb1@5 ~ bb1 ~ bb1@5 f1 bb1 a1",
  P: "ab1@5 ~ ab1 ~ ab1@8", Q: "g1@5 ~ g1 ~ g1@8", R: "gb1@5 ~ gb1 ~ gb1@4 ab1@4", S: "g1@5 ~ g1 d2 g2@8", T: "gb2 f2",
  U: "g1@5 ~ g1 ~ g1@4 g1 bb1 g1 f1", V: "eb1", W: "gb1 ab1", X: "bb1@7 bb1 bb1@4 bb1@2 ab1@2",
  Y: "bb1@7 bb1 bb1@4 bb1 a1 ab1 g1", Z: "g1@6 g1@2 g1@4 bb1 a1 ab1 g1", AA: "gb1@3 ab1",
  AB: "[gb1@9 ab1@10 bb1@21 ~@8]/3",
})).s("gm_fretless_bass").gain(0.4)

// bass · fretless bass · "FRETLESS" · soft notes · Dmaj7 Cmaj7
const bass_soft = note(`<
  ~
  [a3 ~@15]
  [eb3@12 [db3,d3] [a2,bb2,b2,c3] [f2,gb2,g2,ab2] [db2,d2,eb2,e2]]
  [[b1,c2] ~@15]
  ~@72
>`).s("gm_fretless_bass").gain(0.13)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A B ~@5 C D E F G H I J K L M N O P Q N O P R ~ S T U J K L M N O P Q N O P Q N O V W X Y X Y X Z AA AB AC AD AE AF
  AG AH AI AF AG AH AI Z X Z X Z X Z AJ@3
>`.pickRestart({
  A: "bb4 a4", B: "g4@3 ~", C: "~ [e3,bb3,d4]", D: "[eb4,g4] ~ eb3 ~ [eb4,g4] ~ eb3 ~ [f4,a4] ~ eb3 ~ [f4,a4] ~ eb3 ~",
  E: "[g4,bb4] ~ eb3 ~ [g4,bb4] ~ eb3 ~ [f4,a4] ~ eb3 ~ a4 ~ eb3 ~, ~@3 f4", F: "f4@3 d4", G: "d4@3 eb4 d4@4",
  H: "eb4@3 g4@2 f4@3", I: "eb4@3 d4", J: "g3@8 ~@2 [bb4,d5] ~@3 [bb4,d5] ~, ~ gb3",
  K: "~@2 [bb4,d5] ~@3 [bb4,d5] ~@3 [bb4,d5] ~@3 [bb4,d5] ~, f3 e3", // Bb
  L: "[bb3,eb4,g4] ~ eb3 ~ [bb3,eb4,g4] ~ eb3 ~ [c4,f4,a4] ~ eb3 ~ [c4,f4,a4] ~ eb3 ~", // Eb F
  M: "[bb3,g4,bb4] ~ eb3 ~ [bb3,g4,bb4] ~ eb3 ~ [c4,f4,a4] ~ eb3 ~ [c4,f4,a4] ~ eb3 ~", // Eb F
  N: "[f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~, bb2", // Bb
  O: "[f3,ab3,d4] ~ [f3,ab3,d4] ~ [f3,ab3,d4] ~ [f3,ab3,d4] ~ [f3,ab3,d4] ~ [f3,ab3,d4] ~ [f3,ab3,d4] ~ [f3,ab3,d4] ~, ab2", // Ddim
  P: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~, g2", // Gm
  Q: "[gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~, gb2@3 ab2", // Ebm
  R: "gb2 f2, eb4@3 ~@5", S: "~@4 [gb5,a5] [d5,gb5] [a4,d5] [gb4,a4]",
  T: "[c3,g4,c5]@2 ~ [eb5,g5]!2 [d5,f5]!2 [c5,eb5]", U: "[a4,eb5] ~@3",
  V: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ g3 bb3 g3 f3, g2@3 ~", // Gm
  W: "[eb3,g4]", X: "bb4", Y: "bb3@5 ~@2 d4 d4@2 f4 ~ f4 g4 bb4 c5", Z: "bb3@8 d4@4 d4 db4 c4 b3", AA: "[bb3,db5] eb5",
  AB: "~@8 f3 g3 bb3 ~ g3 f3 db3 ~, f5@15 ~", AC: "d3@2 eb3@2 f3@2 g3@2 f3 g3 bb3 g3 bb3 ~ c4@2, ab3",
  AD: "[g3,bb3]@12 bb3 a3 ab3 g3, ~@7 bb4", AE: "db5@6 ~@2 f4 g4 bb4 ~ g4 f4 db4 ~, gb3@3 ab3",
  AF: "~@2 [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~, bb2", // Bb
  AG: "[ab3,d4] ~ [ab3,d4] ~ [ab3,d4] ~ [ab3,d4] ~ [ab3,d4] ~ [ab3,d4] ~ [ab3,d4] ~ [ab3,d4] ~, ab2", // Abdim
  AH: "[bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~, g2", // Bb
  AI: "[bb3,eb4] ~@15, bb4", AJ: "[db5@2 gb4@2 bb4@2 ~ db5@2 eb5@2 ab4@2 ~ c5@5 [bb3,bb4]@21 ~@8, gb3@9 ab3@10 ~@29]/3",
})).s("gm_string_ensemble_1").gain(0.28).pan(0.4)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@12 A B C ~@4 D@2 E@2 D@2 F G ~@2 B C ~@4 D@2 E@2 D@2 E@2 H@3 ~@10 I J K@2 L@2 M@2 L@2 N@7 O@3
>`.pickRestart({
  A: "[a3,c4] [gb3,d4]", B: "c4 bb3, g3", C: "[g3,a3]@3 [gb3,d4]", D: "[~@4 eb5 d5 bb4 f4@9]/2",
  E: "[~@4 eb5 d5 bb4@10]/2", F: "~@4 eb5 d5 bb4@2", G: "c5@3 ~", H: "[~@4 eb5 d5 bb4 f4@3 d4 eb4 f4 bb4@4 ~@7]/3",
  I: "~@12 d4 db4 c4 b3", J: "~@8 f4 g4 bb4 ~ g4 f4 db4 ~, bb3@3 c4", K: "[d4@4 eb5 d5 bb4 f4@9, bb4@3 ~@5]/2",
  L: "[~@4 eb5 d5 bb4@6 c5@4]/2", M: "[~@4 eb5 d5 bb4 f4@9, d5@5 ~@11]/2",
  N: "[d5@3 bb4 d5 f5 ~@2 bb4@4 c5@4 d5@3 bb4 d5 f5 ~@2 bb4@4 c5@4 d5@3 bb4 d5 f5 ~@2 bb4@4 c5@4 d5@3 bb4 d5 f5 bb5@2, ~@12 bb5@25 ~@7 bb5@25 ~@7 bb5@25 ~@11]/7",
  O: "[db5@2 gb4@2 bb4@2 ~ db5@2 eb5@2 ab4@2 ~ c5@5 [f3,f4]@21 ~@8]/3", // F
})).s("gm_string_ensemble_2").gain(0.33).pan(0.7)

// other · oboe
const oboe = note(`<
  ~ A B ~@3 C D ~@6 E F@2 G@2 H ~ H ~ H ~ I J K ~@2 E F@2 G@2 H ~ H ~ H ~ H ~ H ~ L@2 ~@11 H ~ H ~ H ~ H ~@11
>`.pickRestart({
  A: "~ bb4 c5 d5 c5 bb4 c5 d5", B: "f5@13 ~@3", C: "~ d5 a4 bb4", D: "d5 ~",
  E: "~@4 c5 d5 c5 d5 c5@2 bb4@2 a4@2 bb4@2", F: "~@2 bb4 ~@3 bb4@2 ~@2 bb4@2 ~@2 bb4@2", G: "eb5",
  H: "eb6 d6 bb5 f5 eb5 d5 bb4 f4", I: "eb6 d6 bb5 f5 eb5 d5 bb4@2", J: "c5@3 d5 c5 bb4 c5 d5", K: "bb4@3 ~", L: "g5/2",
})).s("gm_oboe").gain(0.28).pan(0.2)

// other · clarinet
const clarinet = note("<~ A B ~@3 C D ~@6 E F@2 ~@9 G H ~@2 E F@2 ~@43>".pickRestart({
  A: "~ g4 a4 bb4 a4 g4 a4 bb4", B: "d5@13 ~@3", C: "~ bb4 gb4 g4", D: "g4@7 ~@9",
  E: "~@4 a4 bb4 a4 bb4 a4@2 g4@2 gb4@2 g4@2", F: "~@2 d5 ~@3 d5@2 ~@2 d5@2 ~@2 d5@2", G: "eb4@3 f4 eb4 d4 eb4 f4",
  H: "g4@11 ~@5",
})).s("gm_clarinet").gain(0.28).pan(0.8)

// other · brass section · "BRASS 1"
const brass_section = note("<~@48 A ~ A B C ~@20 D@3>".pickRestart({
  A: "~@7 f4 bb4 c5 d5 ~ d5 eb5 f5@2", B: "gb6 ab6", C: "bb6", D: "[bb5@9 ab5@10 [bb5,d6]@21 ~@8]/3",
})).s("gm_brass_section").gain(0.42).pan(0.4)

// chords · piano · "A.PIANO 1"
const piano = note("<~@28 A B C D E ~@15 F ~ G ~@17 H ~ I ~ J ~@3>".pickRestart({
  A: "[c5,d5]@3 ~ [c5,d5]@3 ~@7 a4 ~, ~@7 [a4,d5]@3 gb5@4 ~@2, ~@4 a5@3 ~, ~@3 d5", // Csus2 D5
  B: "[g4,c5]@3 ~ [g4,c5]@3 ~ [g4,bb4]@3 ~ [g4,bb4]@3 ~", // C5 Gm
  C: "[g4,a4]@3 ~ [g4,a4]@3 ~@2 gb5@2 ~ a4@2 gb4@2, ~@8 d5@2 ~ d5@2 ~@3", // Gsus2
  D: "[d4,g4]@4 [d4,g4]@4 [d4,gb4]@3 ~ [d4,gb4]@3 ~, g2@3 ~ gb2@3 ~", // G5 D
  E: "[d4,f4]@3 ~ [d4,f4]@2 f2@2 [e4,g4,e5]@3 ~ [e4,g4,e5]@3 ~, f2 ~ e2 ~", // Dm Em
  F: "[bb4,d5] [f4,c5] ~ [d4,bb4] [bb3,f4]@3 ~ [f4,bb4]@4 [bb4,d5]@3 ~", // Bb F5 Gm Bb5 Bb
  G: "~@7 [bb4,d5] [bb4,d5]@3 [d5,f5] [d5,f5]@3 ~", H: "~@7 [bb4,d5] [bb4,d5]@2 ~ [f5,bb5] [f5,bb5]@3 ~",
  I: "~@7 [bb4,d5] [bb4,d5]@2 ~ [d5,f5] [d5,f5]@3 ~", J: "~@7 [bb4,d5] [bb4,d5]@2 ~ bb5 [f5,bb5]@4",
})).s("gm_piano").gain(0.42).pan(0.4)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@46 A B C B C B D E F ~@5 G H I@3 J K L@2 M@3 N O@3>".pickRestart({
  A: "~ bb4!7 bb4@6 ~@2", B: "[gb2,db3,gb3] [ab2,eb3,ab3]",
  C: "[bb2,f3,bb3]@11 [bb2,f3,bb3] [bb2,f3,bb3]@2 [ab2,eb3,ab3]@2", // Bb5 Ab5
  D: "[bb2,f3,bb3]@11 [bb2,f3,bb3] ~ db3 ~ b2, ~@6 [bb2,d3,f3,bb3] [ab2,c3,eb3,ab3]", // Bb5 Bb Ab
  E: "[gb2,bb2,db3,gb3] [ab2,eb3,ab3]", F: "[bb2,f3,bb3]", G: "~@14 db5 [ab4,bb4]",
  H: "bb4 [f4,ab4] ab4 [eb4,f4] f4 [db4,eb4] eb4 [bb3,db4] [ab3,db4] [ab3,bb3] bb3 [f3,ab3] ab3 [eb3,f3] f3 [db3,eb3], [gb2,db3,gb3] ab2, ~@8 eb3@5 ~@3", // Fm Ebsus2 Dbsus2 Bbm Db5 Absus2 Fm Ebsus2 …
  I: "[bb2@4 ~@6 c4 ~ d4 bb3@7 ~@2 c4@2 d4 bb3@2 f4@3 f4 f4@2 f4 f4@2 f4@3 f4@3 f4 d4@2 f4@2 d4, f3 ~@2]/3",
  J: "bb4@3 a4 bb4@2 bb4@2 ~ eb4 f4 [db4,eb4] eb4 bb3 db4 eb4, [gb2,db3,gb3] [ab2,eb3,ab3], a4 ~@5 a4 ~@9", // Dbsus2 Gb5 Ab5
  K: "[bb2,f3,bb3]@11 [bb2,f3,bb3,f4] ~ [db3,a4] ~ [b2,g4], bb4@9 ~@3 [bb2,d3,f3,bb3,bb4]@2 [ab2,c3,eb3,ab3,ab4]@2", // Bb5 Gbm Em Bb Ab
  L: "[gb4@2 db4@2 bb3@2 bb3 db4 eb4 f4 ab4 bb4 db5@2 ~@4 [c5,db5]@2 bb4@4 [c5,db5,f5] ~@2 [bb2,f3,bb3] ~ [db3,db5] ~ b2, [gb2,db3,gb3]@8 [ab2,eb3,ab3]@8 [bb2,f3,bb3]@11 ~ [bb2,d3,f3,bb3]@2 [ab2,c3,eb3,ab3,eb5]@2, ~@14 bb4@4 ~@8 bb4@3 ~@3]/2", // Dbmaj7 Bb5 Db Gb5 Ab5 Bb5 Bb Ab
  M: "[f5@2 eb5 f5 ab5 ~ f5 ~@2 bb5@2 bb5!2 a5 bb5 ~@2 a5 bb5@2 ab5 [ab5,bb5] f5 [eb5,f5] [db5,eb5] db5 [db5,eb5] [bb2,f3,bb3,bb4,db5] ~ [db3,ab4,bb4] ~@3 eb4 db4 eb4@2 eb4 db4 eb4 f4 ab4 [a4,bb4]@2 bb4 db5 bb4@2, [gb2,db3,gb3]@7 ab5@2 ~@6 [a5,bb5]@2 ~@14 [b2,f4]@2 ~@15, ~@8 [ab2,eb3,ab3]@8 [bb2,f3,bb3]@11 ~ [bb2,d3,f3,bb3,db5,eb5]@2 [ab2,c3,eb3,ab3,ab4,bb4]@2 [gb2,db3,gb3]@8 [ab2,eb3,ab3]@8]/3", // Absus2 Ebsus2 Dbsus2 Bbm Bbm7 Bbmaj7 Gb5 Bbmaj7 …
  N: "db5@2 bb4@3 [a4,bb4]@2 bb4@3 a4 [bb2,f3,bb3] ~ db3 ~ b2, [bb2,f3,bb3]@11 ~ [bb2,d3,f3,bb3]@2 [ab2,c3,eb3,ab3]@2, ~@7 a4 ~@2 bb4@3 bb4@3", // Bbmaj7 Bb5 Bb Ab
  O: "[[gb2,db3,gb3]@9 [ab2,eb3,ab3]@10 [bb2,f3,bb3]@21 ~@8]/3", // Gb5 Ab5 Bb5
})).s("gm_overdriven_guitar").gain(0.33).pan(0.7)

// chords · pad poly · "POLYSYNTH"
const pad_poly = note("<~@46 A B C D E F G B C ~@6 D ~@3 D E ~@9>".pickRestart({
  A: "[eb4,g4,bb4]", B: "[db4,gb4] [eb4,ab4]", C: "[f4,bb4]", D: "[gb4,bb4] [ab4,c5]", E: "[bb4,d5]",
  F: "[db5,gb5] [eb5,ab5]", G: "[f5,bb5]",
})).s("gm_pad_poly").gain(0.37).pan(0.4)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@19 A B@3 A C@2 D ~@8 A B@3 A B@3 A E@2 F ~@7 G H I J A K@4 L@4 M@6 ~@3
>`.pickRestart({
  A: "~@7 bb3, bb2@3 bb3@2 f3@3, ~@2 f3@5 ~ bb2@7 ~, ~ d4@2 d4",
  B: "[~@23 bb3, ab2@6 bb3@4 f3@6 ~@2 g3@6 ~@2 g3@6 ~@2 gb3@6 ~@2 gb3@5 ~, ~@2 f3@6 ab2@8 g2@7 ~ g2@7 ~ gb2@7 ~ gb2@7 ~, ~@4 d4@7 ~ d4@6 ~@2 d4@6 ~@2 d4@5 ~@3 eb4@7 ~ eb4@4, ~@14 bb3@4 ~@4 bb3@5 ~@3 bb3@6 ~@2 bb3@5 ~@5]/3",
  C: "[~@15 bb3, ab2@3 bb3@2 f3@3 ~ g3@3 ~ g3@3, ~@2 f3@6 ab2@8 g2@7 ~ g2@6 ~@2, ~@4 d4@7 ~ d4@6 ~@2 d4@6 ~@2 d4@4, ~@14 bb3@4 ~@4 bb3@5 ~@5]/2",
  D: "[db3,gb3,bb3,eb4] [c3,f3,a3,eb4]", // Ebm7 F7
  E: "[~@15 bb3, ab2@3 bb3@2 f3@3 ~ g3@3 ~ g3@3, ~@2 f3@6 ab2@8 g2@7 ~ g2@7 ~, ~@4 d4@7 ~ d4@6 ~@2 d4@6 ~@2 d4@4, ~@14 bb3@4 ~@4 bb3@5 ~@5]/2",
  F: "~@7 eb4, bb2@6 eb4@4 bb3@5 ~, ~@2 bb3@6 bb2@7 ~, ~@4 g4@7 ~ g4@4", G: "~@8 f4 g4 bb4@2 g4 f4 db4@2",
  H: "bb3@2 c4@2 bb3@4 c4@2 bb3@4 c4 bb3", I: "db4!4 c4@2 bb3 g3 bb3@5 ~ eb4 db4", J: "e4!4 eb4@2 db4@4 ~@6",
  K: "[~@31 bb3, ab2@6 bb3@4 f3@6 ~@2 g3@6 ~@2 g3@6 ~@2 gb3@6 ~@2 ab3@6 ~@2 f3@5 ~@3 f3@6, ~@2 f3@6 ab2@8 g2@7 ~ g2@7 ~ gb2@7 ~ ab2@7 ~ bb2@7 ~ bb2@7 ~, ~@4 d4@7 ~ d4@6 ~@2 d4@6 ~@2 d4@5 ~@3 db4@5 ~@3 eb4@5 ~@3 d4@8 d4@4, ~@14 bb3@4 ~@4 bb3@5 ~@3 bb3@6 ~@2 bb3@6 ~@2 c4@5 ~@3 bb3@5 ~@5]/4",
  L: "[~@54 bb3@2 bb2@2 ~@2 bb2 a2 ab2 g2, ab2@6 bb3@4 f3@6 ~@2 g3@6 ~@2 g3@6 ~@2 gb3@6 ~@2 ab3@6 ~@2 f3@5 ~@3 f3@4 ~@2, ~@2 f3@6 ab2@8 g2@7 ~ g2@7 ~ gb2@7 ~ ab2@7 ~ bb2@6 ~@10, ~@4 d4@7 ~ d4@6 ~@2 d4@6 ~@2 d4@5 ~@3 db4@5 ~@3 eb4@5 ~@3 d4@5 ~@7, ~@14 bb3@4 ~@4 bb3@5 ~@3 bb3@6 ~@2 bb3@6 ~@2 c4@5 ~@13]/4",
  M: "[~@22 bb3@2 bb2@2 ~@2 bb2 a2 ab2 g2, gb2@6 bb3@6 eb4@5 ~ f3@5 ~@3 f3@4 ~@2, ~@2 gb3@6 ab2@6 c4@5 ~ d4@5 ~@7, ~@4 db4@5 ~ ab3@6 bb2@6 ~@10]/2",
})).s("gm_electric_guitar_clean").gain(0.21).pan(0.7)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G@2 H@2 I D E F G@2 H@2 J K L M J K L N I D E F G@2 H@2 J K L M J K L M J K L O ~@7 P Q R S T U V W T U
  V W X W X W X W X ~@3
>`.pickRestart({
  A: "~@3 bb3 a3 g3 a3 bb3, g2 [f2,f3], ~ d3@3 ~@4, ~ g3 ~@2", // F
  B: "~ [g3,bb3]@3, eb2@9 ~@7, ~ bb2@12 ~@3, ~ eb3@7, ~@3 d3@13", // Gm
  C: "~@6 f4 d4, bb2@3 d4@3 ~@2, ~ bb3@3 bb2@4, ~@2 g4@3 bb3@3",
  D: "~@2 d4 c4 ~@2 d4 c4, a2@7 ~ d3@7 ~, ~ g3@3 ~ gb3@3", E: "~@3 c3 ~@3 c4, c3@2 eb4@3 g3@3, ~ g3@3 bb2@4, ~@3 eb4",
  F: "~@2 d4 ~@3 d4 c4, a2@7 ~ d3@8, ~ g3@2 c4@2 gb3@3",
  G: "[~@3 bb3 ~@7 bb3 ~@2 d4 bb3, g2@7 ~ gb2@6 bb3@4 f3@6 ~@2 e3@6, ~@2 g3@6 ~@2 gb3@5 ~ f2@7 ~ e2@8, ~@4 d4@5 ~@3 d4@5 ~@3 d4@5 ~@7]/2",
  H: "[bb3,eb4,g4]!2 [c4,f4,a4]!2", I: "~@6 f4 d4, bb2@3 bb3@3 ~@2, ~ f3@3 bb2@4, ~@2 d4@3 f3@3",
  J: "bb2 [f2,bb2] [f2,bb2,d3]@2 [f2,bb2]!2 [f2,bb2,d3,bb3,d4,f4]@2, [d3,bb3] [bb3,d4,f4]@2 ~, ~@2 d3 ~", // Bb5 Bb Bb5 Bb Gm Bb
  K: "bb2 [f2,bb2] [f2,bb2,d3]@2 [f2,bb2]!2 [f2,bb2,d3,ab3,d4,f4]@2, [d3,ab3] [ab3,d4,f4]@2 ~, ~@2 d3 ~", // Bb5 Bb Bb5 Bb7 Ddim
  L: "bb2 [g2,bb2] [g2,bb2,d3]@2 [g2,bb2]!2 [g2,bb2,d3,bb3,d4,g4]@2, [d3,bb3] [bb3,d4,g4]@2 ~, ~@2 d3 ~", // Gm
  M: "[bb2,eb3] [bb2,eb3,bb3] bb2@2 bb2 [bb2,eb3] [bb2,eb3,bb3,eb4,gb4]@2, ~ [bb3,eb4,gb4]@2 ~, ~@2 eb3@3 ~@3", // Eb5 Ebm
  N: "[gb3,bb3,eb4,gb4] [f3,a3,eb4,f4]", O: "[bb2,eb3,g3,eb4]@7 ~",
  P: "~@3 bb3 ~@2 d4 bb3, bb2@6 ~@2 bb2@7 ~, ~@2 f3@4 ~@4 f3@5 ~, ~ d4 ~@2",
  Q: "~@7 bb3, ab2@3 ~ ab2@3 ~, ~ f3@2 bb3@2 f3@2 ~, ~ d4 ~ d4",
  R: "~@2 d4 ~@3 d4 bb3, g2@3 bb3@2 f3@3, ~@2 f3@6 g2@7 ~", S: "[db3,gb3,bb3,gb4]@3 [ab2,eb3,ab3,c4]",
  T: "[d3,bb3] d3!2 [d3,bb3,d4,f4], ~ [bb3,d4,f4]@2 ~", U: "[d3,ab3] d3!2 [d3,ab3,d4,f4], ~ [ab3,d4,f4]@2 ~",
  V: "[d3,bb3] d3!2 [d3,bb3,d4,g4], ~ [bb3,d4,g4]@2 ~", W: "[db3,bb3]!2 eb3 [eb3,c4,eb4,ab4], ~ [db4,gb4]@2 ~",
  X: "[bb2,bb3]!2 bb2 [bb2,bb3,d4,f4], ~ [d4,f4]@2 ~", // Bb Dm
})).s("gm_acoustic_guitar_steel").gain(0.33).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_2 = note("<~@11 A B C D ~@12 A B C D ~@45>".pickRestart({
  A: "[f3,bb3]!2 [f3,bb3]@2 [f3,bb3]!2 [f3,bb3,d4,f4]@2, ~ [d4,f4]@2 ~", // Bb5 Bb Dm
  B: "g3!2 [g3,g4]@2 a3!2 [a3,c4,gb4]@2, ~ eb3@3 d3@4, ~ c4@2 ~", // G Gbdim
  C: "~ g3 [g3,eb4]@3 [eb3,bb3] [eb3,bb3,c4,g4]@2, ~ g4@2 ~", // Cm Eb5 Cm7
  D: "g3 c4 c4@2 [d3,a3]!2 [d3,a3,c4,gb4]@2, eb3 ~, ~ g3@3 ~@4, ~@2 g4 ~@5", // D5 D7
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.8)

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

// drums · rim
const rim = s("rim").struct("<~@3 [~@3 x]!6 [~ x ~ x] ~@66>").gain(0.44)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A@3 B A@2 C D E C@4 F G ~ H I@2 B I B ~@2 E C@2 J C F G ~ H I@2 K H I@2 D H I L ~ M N M O M L ~@23
>`.pickRestart({
  A: "x!6 ~ x", B: "x!6 ~@2", C: "x!2 ~ x!3 ~ x", D: "x!2 ~@6", E: "~ x ~ x!3 ~ x", F: "x!2 ~ x!3 ~@2", G: "~ x ~@6",
// … 42 more lines

More by Wet Wet Wet