Strudelify

Going Back To My Roots

Odyssey

KeyD minorTempo108 bpm
0:00/0:00
// Going Back To My Roots — Odyssey
// 108 bpm, 4/4, key D 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: Full arrangement: all 98 bars on a 24-step grid, each part at one level. 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.

// chords · piano
const piano = note("<~@6 A@4 B@14 C@2 D E@2 F G H I F G J K L M B@58 ~>".pickRestart({
  A: "[~@3 [c4,g4]@4 ~ [d4,f4]@2 ~ c4 [g3,c4]@3 ~@3 [g3,c4]@3 ~@2 [g2,f3,bb3,d4]@12 g2 [g2,f3,bb3,d4] ~@2 [g2,f3,bb3,d4] ~@2 [a2,g3,a3,c4] ~ [a2,g3,a3,c4]!2 ~@2, d2@7 ~@9]/2", // C5 Dm C5 Gm7 Am7
  B: "[~@3 [a3,d4]@2 [a3,d4] ~@2 [c4,f4] ~@2 c4 [a3,d4]@2 ~@4 a2@3 [c4,f4]@2 [bb3,d4]@5 ~ [f3,bb3] ~@2 [f3,bb3]@2 ~ d2 [g2,f3,bb3]@2 ~ [g2,f3,bb3]@2 ~ [a2,g3,c4]@2 ~ [a2,g3,c4]@2 [d2,a3,d4], d2@5 ~ d2@5 ~ d2@5 ~@6 [d2,g2]@11 ~@14]/2", // D5 F5 D5 F5 Bb Bb5 Gm7 Am7 …
  C: "[~@3 [a3,c4]@3 ~@2 [c4,f4]@2 ~ c4 [d2,a3,d4]@5 ~ [a2,g3,c4]@4 ~ [d2,g2]@7 g2@3 g2@2 ~ g2@2 [f3,bb3,d4] ~@2 g2!2 ~ [f3,bb3,d4] ~@2 d2, d2@5 ~ d2@5 ~@12 [f3,bb3,d4]@14 ~@11]/2", // Am F5 D5 Am7 G5 Bb
  D: "[g2,f5]@6 g5@3 f5@3 [f2,e5]@5 ~ [f2,e5]@5 ~, [g4,bb4,d5]@5 ~ [f4,a4,c5]@5 ~, ~@6 g2@5 ~@13", // G7 Fmaj7 Gm F
  E: "[[eb2,g4,bb4,d5,f5]@6 f4@3 g4@2 ~ bb1@31 ~@5, ~@6 eb2@5 [bb3,d4,f4,a4]@34 ~@3]/2", // Ebmaj7 Bbmaj7
  F: "[d2,a3,c4,e4]@3 [a3,c4,e4]@2 ~@3 [a3,c4,e4]@2 ~ [a3,c4,e4] [a3,c4,e4]@3 ~@3 [g2,bb3,d4,f4]@3 [a3,c4,e4] ~@2, ~@3 d2@14 ~@4 d2@3", // Am Gm7 Am
  G: "[a3,c4,e4]@3 [a3,c4,e4]@3 ~@2 [a3,c4,e4]@2 ~ [a3,c4,e4] [a3,d4,f4] ~@2 [bb2,a3,d4,f4]@4 ~ [c3,g3,c4,e4]@3 ~, d2@11 ~ bb2@2 ~@10", // Am Dm Bbmaj7 C
  H: "[g2,g3,bb3,d4,f4]@3 [g3,bb3,d4,f4]@2 ~@3 [g3,bb3,d4,f4] ~@2 [g3,bb3,d4,f4] ~@3 g2@3 [g3,bb3,d4,f4]@2 [g3,bb3,d4,f4] ~@3, ~@3 g2@11 ~@6 g2@3 ~, ~@12 [g3,bb3,d4,f4]@5 ~@7", // Gm7
  I: "[g2,g3,bb3,d4,f4]@3 [g3,bb3,d4,f4] ~@4 [g3,bb3,d4,f4] ~@2 [g3,bb3,d4,f4] [g3,bb3,d4,f4]@3 [g3,bb3,d4,f4] ~@4 [g2,g3,bb3,d4,f4]@3 [g3,bb3,d4,f4], ~@3 g2@11 ~ g2@4 ~@5", // Gm7
  J: "[g2,g3,d4,f4]@3 [bb3,d4,f4]@2 ~@3 [g3,bb3,f4] ~@2 [bb3,d4,f4] ~@3 g2@3 [g3,bb3,f4]@2 [g3,bb3,d4,f4] ~@3, ~@3 g2@11 ~@6 g2@3 ~, ~@12 [g3,d4,f4]@5 ~@7", // G7 Bb Gm7 Bb Gm7 G7
  K: "[g2,bb3,d4,f4]@3 [g3,d4,f4] ~@4 [bb3,d4,f4] ~@2 [g3,bb3,f4] [bb3,d4,f4]@3 [bb3,d4,f4] ~@4 [g2,bb3,d4,f4]@3 [g3,d4,f4], ~@3 g2@11 ~ g2@4 ~@5", // Gm7 G7 Bb Gm7 Bb Gm7 G7
  L: "[bb3,f4,a4]@19 ~ [a3,bb3,f4]@3 ~, bb2@23 ~", // Bbmaj7
  M: "[bb3,d4,a4] ~@2 [bb3,f4,a4]@4 ~ [d4,f4,a4]@2 ~ [bb3,d4,a4] [bb3,f4,a4]@5 ~ [f2,c4,d4,f4]@5 ~, c3@17 ~@7", // Bbmaj7 Dm Bbmaj7 Dm7
})).s("gm_piano").gain(0.35)

// bass · electric bass finger
const bass = note(`<
  ~@3 A B C D E F E G H G H G H G H I J I J I J K L M N@2 O P Q R S T U V W X G H G H G H G H G H G H G H G H G H G H G
  H G H Y Z Y Z Y Z Y Z AA AB AA AB AA AB AA AB AA AB AA AB AA AB AA AB AA AB AA AB AA AB AA AB AC@2 AD
>`.pickRestart({
  A: "~@23 c2", B: "d2@2 d2 f2@2 f2 ~@5 c2 d2@2 d2 f2@2 e2 ~@5 c2",
  C: "d2@2 d2 f2@2 f2 ~@5 c2 d2@2 d2 a2@2 a2 d2@2 d2 g2@2 g2", D: "d2@10 ~ c2 d2@2 d2 ~@3 d2@2 c2 a1@2 ~",
  E: "g1@4 ~@7 f1 g1@2 ~ g1@2 ~ a1@2 a1 c2@2 c2", F: "d2@2 d2 d2@6 ~@2 c2 d2@3 ~@3 d2@2 c2 a1@3",
  G: "d2@2 ~@4 d2@3 ~@2 d2 d2@5 ~ a1@3 g1@3", H: "g1@3 ~@3 g1@3 ~@2 f1 g1@3 g1@3 a1@3 c2@3",
  I: "d2 ~@2 d2@7 ~ c2 d2@3 ~@3 d2@3 a1@3", J: "g1@4 ~@7 f1 g1@2 ~ g1@2 ~ a1 ~ a1 c2 ~ c2",
  K: "d2@6 ~@5 d2 d2@7 ~@2 a1@3", L: "g1@7 ~@4 g1 g2@2 ~ g2@2 ~ a2@2 ~ a2@2 d2", M: "g2 f2",
  N: "[eb2@5 ~ eb2@6 bb1@30 ~@6]/2", O: "d2@5 ~ d2@5 ~ d2@6 c2@3 db2@2 d2",
  P: "d2@5 ~ d2@4 ~ d2 d2@2 ~ bb1@3 ~@2 c2@3 ~", Q: "g2@6 g2@4 ~ g2 g2@4 ~ g2 f2@3 gb2@3",
  R: "g2@6 g2@4 ~ f2 g2@2 ~ g2@2 ~ a1@3 c2@2 db2", S: "d2@5 ~ d2@5 ~ d2@5 ~ c2@3 db2@2 d2",
  T: "d2@5 ~ d2@4 ~ d2!2 ~@2 bb1@2 ~@3 c2@4", U: "g2@6 g2@4 ~ f2!2 ~@2 f2 ~@2 f2 ~ f2 gb2@2 ~",
  V: "g2@5 ~ g2@5 f2 g2 ~@2 g2 ~@2 g2@2 ~ g1@2 a1", W: "bb1@5 ~ bb2@5 ~ bb2@6 bb1@6",
  X: "c3@3 c2@3 c3@2 c2 ~@2 c3 c2@2 c2 ~@2 c2 f1@4 ~@2", Y: "d2 ~@3 d2 ~@2 a1", Z: "g1@4 ~@7 f1 g1@4 ~@2 a1@3 c2@2 ~",
  AA: "d2@3 ~@8 c2 d2@3 ~@6 a1@3", AB: "g1@3 ~@8 f1 g1 ~@2 g1 ~@2 a1 ~@2 c2 ~@2",
  AC: "[d2@2 ~@9 d2 d2@2 ~ d2 ~@2 a1@3 g1@11 ~@3 g1 a1@2 ~ a1@2 ~ c2@2 ~ c2@2 ~]/2", AD: "d2 ~@11",
})).s("gm_electric_bass_finger").gain(0.4).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A B C B C B C B C B D B D B D B D B D B D B D B D ~@13 B D B D B D B D B D B D B D B D B D B D B D B D ~@7 A B D B D
  B D B D B D B D B D B D B D B D B D B D B E F
>`.pickRestart({
  A: "~@23 c3", B: "d3@2 d3 f3@2 f3 ~@5 c3 d3@2 d3 f3@2 e3 ~@5 c3",
  C: "d3@2 d3 f3@2 f3 ~@5 c3 d3@2 d3 a3@2 a3 d3@2 d3 g3@2 g3",
  D: "d3@2 d3 f3@2 f3 ~@5 c3 d3@2 d3 a3@2 a3 g3@2 g3 c3@2 c3",
  E: "d3@2 d3 f3@2 f3 ~@7 g3 ~@2 d3 ~@2 f3 ~@2 c3 ~, ~@12 a3@2 ~ f3@2 ~ g3@2 ~ e3@2 ~", F: "d3 ~@11",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.7)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@26 A@3 B@2 C@2 D@2 E@2 F G ~@59>".pickRestart({
  A: "[bb3@5 ~ bb3@4 ~@3 e4@10 ~@2 f4@10 ~@2 a4@34 ~, ~@11 f3@10 ~@2 [g3,bb3]@10 ~@2 bb3@35 ~@2, ~@12 [a3,c4]@10 ~@2 d4@10 ~@2 [d4,f4]@35 ~]/3", // Gm Am Dm
  B: "[[e4,g4]@17 ~ [d4,f4]@3 [e4,g4]@14 ~ [d4,a4]@2 ~ [d4,a4]@3 ~ [c4,g4]@4 ~]/2", // Em Dm Em D5 C5
  C: "[[bb3,a4]@5 ~ [bb3,a4]@6 c5@4 ~ g4@26 ~@5]/2", D: "[[e4,g4]@15 g4@3 e4@18 ~@8 [c4,e4,g4]@4]/2",
  E: "[[bb3,f4,a4]@7 ~]/2", F: "[bb3,d4,a4]@23 ~",
  G: "[bb3,d4,a4]@2 ~ [bb3,d4,a4]@4 ~ [bb3,d4,a4]@2 ~ [bb3,d4,a4] [bb3,d4,a4]@5 ~ [c4,d4,f4]@6", // Bbmaj7 Dm7
})).s("gm_acoustic_guitar_nylon").gain(0.35)

// other · overdriven guitar
const overdriven_guitar = note("<~@63 A B C D E F@2 G ~@27>".pickRestart({
  A: "c4 ~@2 d4 ~@2 c4 ~@2 d4 ~@2 f4@4 ~ d4@7", B: "~@9 a4 ~@2 d5 ~ f5 g5@3 f5@2 d5 c5@2 a4",
  C: "ab4 g4 f4 d4@2 g4 d4@2 f4 d4@2 c4 a3@2 ab3 g3@2 f3 g3@2 f3 g3@2 f3", D: "c4 ~ d4 ~@2 f4@4 ~@9 a4@6",
  E: "a4@3 f4@2 a4@3 f4 a4@3 f4@2 a4@2 f4 ~ a4 ~ f4 g4 [g4,ab4] f4", // Abmaj7
  F: "[bb3@13 ~@2 d4!2 f4 g4@2 f4 d4@17 ~ c4@2 a3 g3@2 f3 d3@2 c3]/2", G: "d3@2 d3 c3@2 f3@2 ~ d3@5 ~@11",
})).s("gm_overdriven_guitar").gain(0.45)

// other · lead 3 calliope
const lead_3_calliope = note(`<
  ~@9 A ~@7 B ~@24 C ~@3 D ~@3 D ~@3 D ~@3 D ~@3 D ~@3 D ~@3 E ~@3 C ~@3 C ~@3 C ~@3 C ~@3 F ~@3 F ~ G H
>`.pickRestart({
  A: "~@11 d5 a5@2 g5 a5@2 a5 g5@2 f5 e5@2 c5", B: "~@11 d5 a5@2 g5 f5@2 a5 g5@2 f5 e5@2 c5",
  C: "~@11 d5 a5@2 g5 f5@2 d5 g5@2 f5 e5@2 c5", D: "~@10 d5 ~ a5 g5 ~ f5 d5 ~ g5 f5 ~ e5 c5 ~",
  E: "~@10 a5 ~@2 f5 ~ g5 a5 ~ g5 f5 ~ e5 c5 ~", F: "~@11 d5 a5 g5 ~ f5 d5 ~ g5 f5 ~ e5 c5 ~",
  G: "~@12 a5 g5 ~ f5 d5 ~ g5 f5 ~ e5 c5 ~", H: "d5 ~@23",
})).s("gm_lead_3_calliope").gain(0.3)

// other · pad poly
const pad_poly = note("<~@29 A@2 B@2 C@2 D@2 ~@61>".pickRestart({
  A: "[~@3 c6 ~@2 g5 ~@2 a5 ~@2 e5@2 ~@4 f5 ~@2 d5@24 ~@3]/2",
  B: "[~@3 d6 ~@2 a5 ~@2 c6 ~@2 g5@2 ~@4 a5@3 d5@21 ~@6]/2",
  C: "[~@3 c6 ~@2 g5 ~@2 a5@2 ~ e5@2 ~@4 f5@2 ~ d5@22 ~@5]/2", D: "[~@3 d6 ~@2 a5@2 ~ c6 ~@2 g5@2 ~@4 a5@3 d5@27]/2",
})).s("gm_pad_poly").gain(0.52)

// other · brass section
const brass_section = note(`<
  ~@8 A B ~@20 C D ~@2 C D ~ E F ~@7 G ~@7 G ~@7 G ~@8 H I ~ J@2 K L ~ H I ~ J@2 K L ~ M ~ N O M ~ N O P@2 Q
>`.pickRestart({
  A: "~@3 c5 ~ a4 c5 ~ d5 f5 ~ d5 g5 ~ f5 d5 ~ c5 g5 ~ f5 d5 ~ c5", B: "g5 ~ f5 d5 ~ c5@2 ~ c5 d5 ~@14",
  C: "~@12 [d4,f4,a4] ~@2 [d4,f4,a4] ~@4 [c4,e4,g4] ~@3", D: "[bb3,d4,f4]@11 ~", E: "[f4,a4]@23 ~",
  F: "[a4,c5]@2 ~ [a4,c5]@2 ~@3 [a4,c5]@2 ~ [a4,c5] a4@6 g4@6, ~ c5", G: "~@10 d5 ~ a5 g5 ~ f5 d5 ~ g5 f5 ~ e5 c5 ~",
  H: "~@21 c5!2 ~", I: "c5@3 d5 ~@18 d5 ~, ~@21 c5@2 ~",
  J: "[d5!2 ~ c5!2 ~ d5!2 ~ c5!2 ~ d5!2 ~ c5!2 ~ g5 f5 ~ c5 g5@4 ~ f5 ~@20]/2",
  K: "~@3 c5!2 ~ d5!2 ~@2 d5 ~@13, ~@9 c5@2 ~@13", L: "~@3 [a4,c5,d5] ~@20",
  M: "~@11 [f4,a4,d5] [bb4,d5,g5]@5 [a4,c5,f5] ~@6", N: "~@23 [f4,a4,d5]",
  O: "[bb4,d5,f5]@3 [g4,bb4,d5] ~@7 d5 a5 g5 ~ f5 d5 ~ g5 f5 ~ d5 c5 ~", // Bb Gm
  P: "[d5@2 ~ d5@2 f5 ~@2 f5 d5 ~@5 [d5,f5,a5]@3 [bb4,d5,g5]@15 ~@3 a5 g5 ~ f5 d5 ~ g5 f5 ~ e5 c6@2]/2", Q: "d6 ~@7",
})).s("gm_brass_section").gain(0.64)

// chords · trumpet
const trumpet = note(`<
  ~@8 A B ~@20 C D ~@2 C D ~ E F ~@7 G ~@7 G ~@7 G ~@8 H I ~ J@2 K L ~ H I ~ J@2 K L ~ M ~ N O M ~ N O P@2 Q
>`.pickRestart({
  A: "~@3 [c4,c5] ~ [a3,a4] [c4,c5] ~ [d4,d5] [f4,f5] ~ [d4,d5] [g4,g5] ~ [f4,f5] [d4,d5] ~ [c4,c5] [g4,g5] ~ [f4,f5] [d4,d5] ~ [c4,c5]", // C A C D F D G F …
  B: "[g4,g5] ~ [f4,f5] [d4,d5] ~ [c4,c5]@2 ~ [c4,c5] [d4,d5] ~@14", C: "~@12 a4 ~@2 a4 ~@4 g4 ~@3", D: "f4@11 ~",
  E: "a4@23 ~", F: "[f4,c5]@2 ~ [f4,c5]@2 ~@3 [f4,c5]@2 ~ [f4,c5] [f4,c5]@12",
  G: "~@10 [d4,d5] ~ [a4,a5] [g4,g5] ~ [f4,f5] [d4,d5] ~ [g4,g5] [f4,f5] ~ [e4,e5] [c4,c5] ~", H: "~@21 [e4,g4,c5]!2 ~",
  I: "[e4,g4,c5]@3 [f4,a4,c5] ~@18 [d4,d5] ~, ~@21 [c4,c5]@2 ~", // C F D C
  J: "[[f4,a4,d5]!2 ~ [e4,g4,c5]!2 ~ [f4,a4,d5]!2 ~ [e4,g4,c5]!2 ~ [f4,a4,d5]!2 ~ [e4,g4,c5]!2 ~ [bb4,d5,g5] [a4,c5,f5] ~ [e4,g4,c5] [bb4,d5,g5]@4 ~ [a4,c5,f5] ~@20]/2", // Dm C Dm C Dm C Gm F …
  K: "~@3 c5!2 ~ d5!2 ~@2 d5 ~@13, ~@9 c5@2 ~@13", L: "~@3 [a4,c5,d5] ~@20",
  M: "~@11 [f4,a4,d5] [bb4,d5,g5]@5 [a4,c5,f5] ~@6", N: "~@23 [f4,a4,d5]",
  O: "[bb4,d5,f5]@3 [g4,bb4,d5] ~@7 d5 a5 g5 ~ f5 d5 ~ g5 f5 ~ d5 c5 ~", // Bb Gm
  P: "[d5@2 ~ d5@2 f5 ~@2 f5 d5 ~@5 [d5,f5,a5]@3 [bb4,d5,g5]@15 ~@3 a5 g5 ~ f5 d5 ~ g5 f5 ~ e5 c5 ~]/2", Q: "d5 ~@7",
})).s("gm_trumpet").gain(0.35).pan(0.2)

// other · alto sax
const alto_sax = note(`<
  ~@8 A B ~@20 C D ~@2 E F ~ G H ~@7 I ~@7 I ~@7 I ~@8 J K ~ L@2 M N ~ J K ~ O ~@4 P ~ Q R S ~ T R U@2 V
>`.pickRestart({
  A: "~@3 c4 ~ a3 c4 ~ d4 f4 ~ d4 g4 ~ f4 d4 ~ c4 g4 ~ f4 d4 ~ c4", B: "g4 ~ f4 d4 ~ c4@2 ~ c4 d4 ~@14",
  C: "~@12 d4 ~@2 d4 ~@4 [c4,e4] ~@3", D: "[bb3,d4]@11 ~", E: "~@12 d4 ~@2 d4 ~@4 [c4,e4,g4] ~@3",
  F: "[bb3,d4,f4]@11 ~", G: "f4@23 ~", H: "a4@2 ~ a4@2 ~@3 a4@2 ~ a4 a4@6 g4@6",
  I: "~@10 d4 ~ a4 g4 ~ f4 d4 ~ g4 f4 ~ e4 c4 ~", J: "~@21 c4!2 ~", K: "c4@3 d4 ~@18 d4 ~, ~@21 c4@2 ~",
  L: "[d4!2 ~ c4!2 ~ d4!2 ~ c4!2 ~ d4!2 ~ c4!2 ~ g4 f4 ~ c4 g4@4 ~ f4 ~@20]/2",
  M: "~@3 c4!2 ~ d4!2 ~@2 d4 ~@13, ~@9 c4@2 ~@13", N: "~@3 d4 ~@20",
  O: "d4!2 ~ c4!2 ~ d4!2 ~ c4!2 ~ d4!2 ~ c4!2 ~ g4 ~@5", P: "~@17 c4 ~@6", Q: "~@23 a3",
  R: "d4@3 bb3 ~@7 d4 a4 g4 ~ f4 d4 ~ g4 f4 ~ d4 c4 ~", S: "~@11 a3 d4@5 c4 ~@6", T: "~@23 d4",
  U: "[d4@2 ~ d4@2 f4 ~@2 f4 d4 ~@5 f4@3 d4@15 ~@3 a4 g4 ~ f4 d4 ~ g4 f4 ~ e4 c4@2]/2", V: "d4 ~@7",
})).s("gm_alto_sax").gain(0.35).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@3 A B@2 C@4 B@16 D@2 E B F G@2 B F G@2 B D B@58 H>".pickRestart({
  A: "~@21 x ~ x", B: "x!4", C: "x ~@5 x ~@4 x!2 ~@5 x ~@2 x ~@2", D: "x!3 ~", E: "~@6 x ~@8 x ~ x!2 ~@5",
  F: "x ~@5 x ~@5 x ~@2 x ~@2 x ~ x ~@3", G: "x ~ x ~ x!4", H: "x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@4 [~@8 x!2 ~@5 x ~@4 x!2 ~@2] [~@3 x ~@4] ~@92>").gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~ B ~@3 B ~@15 C D E F ~@7 B ~ G ~@31 H ~@23 I ~ J ~>".pickRestart({
  A: "~@5 x", B: "~@7 x", C: "~@14 x!2 ~@4 x!2 ~@2", D: "~@3 x ~@4", E: "~ x ~@2", F: "~@4 x!2 ~@8 x ~@6 x ~@2",
  G: "~@22 x!2", H: "~@23 x", I: "~@21 x ~ x", J: "~@21 x!2 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A ~@2 B@20 ~@3 C D C B C D C B E F C B@7 C B@7 C B@7 C B@7 C B@3 C B@3 C B@3 C B@3 C B@7 C B G
>`.pickRestart({
  A: "~@21 x!2 ~", B: "x!8", C: "~ x!7", D: "x!5 ~@3", E: "~ x!3", F: "x!3 ~", G: "x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~@9 B ~@55 C ~ D ~>".pickRestart({
  A: "~ x ~@6", B: "~@20 x!2 ~@2", C: "~@5 x", D: "~@19 x ~@4",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@37 [~ x ~ x ~ x ~ x] [~ x ~ x ~@4] ~@59>").gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@3 A ~@7 A ~@3 A ~@3 B@2 ~ A C A ~ A C A ~ A ~ A ~@7 A ~@7 A ~@7 A ~@6 D A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@2
>`.pickRestart({
  A: "x", B: "x!2", C: "~@15 x ~@4 x ~@3", D: "~@17 x ~@6",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@38 [~@18 x!2 ~@4] ~@55 [~@3 x] ~ [~@3 x] ~>").gain(0.5)

stack(
  piano, bass, electric_guitar_muted, acoustic_guitar_nylon, overdriven_guitar, lead_3_calliope, pad_poly,
  brass_section, trumpet, alto_sax, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, crash, high_tom
)

More by Odyssey