Strudelify
KeyB♭ majorTempo130 bpm
0:00/0:00
// The Desert — Dancing Linearr. Chiknluvr
// 130 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4856345; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 53 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · violin · "Violin II"
const violin = note(`<
  A B A C A D E F A B E F G H I J K L M N O P Q R O P Q S G H I J K L M N T B A C T B A C A U E F K L M V W
>`.pickRestart({
  A: "g4 ~ d4 ~ g4@2 ~@2 g4@2 ~@2 g4 ~ gb4 ~", B: "g4 ~ d4 ~ g4@2 ~@10", C: "g4@2 ~@2 g4 ~ d4 ~ g4 ~ d4 ~ bb3 ~ d4 ~",
  D: "g4 ~ d4 ~@13", E: "c4 ~ g3 ~ c4@2 ~@2 c4@2 ~@2 c4 ~ bb3 ~", F: "gb4 ~ d4 ~ gb4@2 ~@10",
  G: "~@2 eb5 ~ d5 ~ eb5 ~ c5 ~ eb5 ~ bb4 ~ eb5 ~", H: "a4@2 ~@4 f4 ~ a4 ~ bb4 ~ c5@2 ~@2",
  I: "~@2 d5 ~ c5 ~ d5 ~ bb4 ~ d5 ~ a4 ~ d5 ~", J: "g4@2 ~@4 d4@2 eb4 [eb4,f4] d4@2 ~@2 d5@2",
  K: "~@2 bb4 ~ a4 ~ bb4 ~ g4 ~ bb4 ~ f4 ~ bb4 ~", L: "a4@2 ~@4 f4 ~ a4 ~ bb4 ~ c5 ~ d5 ~", M: "g5 ~ d5 ~ bb4@8 ~@4",
  N: "~@12 d5 ~ d5 ~", O: "bb4 ~ d4 ~ bb4@2 ~@2 bb4@2 ~@2 bb4 ~ a4 ~", P: "bb4 ~ d4 ~ bb4@2 ~@2 g4 ~ d4 ~ bb3 ~ d4 ~",
  Q: "g4 ~ c4 ~ g4@2 ~@2 g4@2 ~@2 g4 ~ g4 ~", R: "gb4 ~ d4 ~@13", S: "gb4@4 gb4 ~ d4 ~ gb4@4 ~@4",
  T: "bb4 ~ d4 ~ g4@2 ~@2 g4@2 ~@2 g4 ~ gb4 ~", U: "g4 ~ d4 ~ g4@4 ~@8", V: "~@4 eb4 ~ d4 ~ g4 ~ gb4 ~ a4 ~ bb4 ~",
  W: "g4@3 ~@13",
})).s("gm_violin").gain(0.25)

// other · viola
const viola = note(`<
  A B A B A B C D A B C E F G H I J G H K L M N O L M N O P Q H I J Q H K L B A B L B A B R B S D J G T U V
>`.pickRestart({
  A: "g4 ~ d4 ~ g4@2 ~@8 a4 ~", B: "g4@2 ~@2 g4 ~ gb4 ~ g4 ~ d4 ~ bb3 ~ d4 ~", C: "c4 ~ g3 ~ c4@2 ~@8 d4 ~",
  D: "gb4 ~ c4 ~ gb4 ~ eb4 ~ d4@2 ~@6", E: "c4 ~ c4 ~ gb4 ~ eb4 ~ d4@2 ~@6",
  F: "bb4 ~ d4 ~ bb4@2 ~@2 bb4@2 ~@2 bb4 ~ d5 ~", G: "c5 ~ f4 ~ a4@2 ~@10", H: "g4 ~ d4 ~ g4@2 ~@2 g4@2 ~@2 a4 ~ gb4 ~",
  I: "d4@2 ~@2 bb3 ~ d4 ~ d4@2 ~@2 g4 ~ d4 ~", J: "bb4@2 ~@2 bb4 ~ d4 ~ bb4@2 ~@2 bb4 ~ d5 ~",
  K: "bb3 ~ d4 ~ d4@2 ~@2 d4@2 ~@2 eb4 ~ gb4 ~", L: "g4 ~ d4 ~ g4@2 ~@2 g4@2 ~@2 g4 ~ gb4 ~", M: "g4 ~ d4 ~ g4@2 ~@10",
  N: "eb4 ~ c4 ~ eb4@2 ~@2 eb4@2 ~@2 eb4 ~ d4 ~", O: "gb4 ~ d4 ~ gb4@2 ~@10",
  P: "bb4 ~ d4 ~ bb4@2 ~@2 bb4@2 ~@2 bb4@2 d5 ~", Q: "c5 ~ f4 ~ a4@4 ~@8", R: "~ g4@3", S: "c4 ~ g3 ~ eb4@12",
  T: "g4 ~ d4 ~ g4@2 ~@6 a4@2 gb4 ~", U: "bb3 ~ d4 ~ d4@2 ~@2 d4@2 ~@2 eb4@2 gb4@2", V: "g4@3 ~@13",
})).s("gm_viola").gain(0.25)

// other · cello · "Violoncello"
const cello = note(`<
  A B A B A B C D A B C D E F G H I F J K A B L M A B L N E F G H I F J K A B A B A B A B O B P D E F J K Q
>`.pickRestart({
  A: "g3 ~ d3 ~ g3@2 ~@8 a3 ~", B: "g3@2 ~@2 g3 ~ gb3 ~ g3 ~ d3 ~ bb2 ~ d3 ~", C: "c3 ~ g2 ~ c3@2 ~@8 d3 ~",
  D: "gb3 ~ c3 ~ gb3 ~ eb3 ~ d3@2 ~@6", E: "c3@3 ~@3 c3 ~@3 c3@2 ~@2 c3 ~", F: "f3@3 ~@3 f3 ~@3 f3@2 ~@2 f3 ~",
  G: "g3@3 ~@3 g3 ~@5 g3@2 ~@2", H: "g3@3 ~@3 g3 ~@5 g3 ~ g3 ~", I: "eb3@3 ~@3 eb3 ~@3 eb3@2 ~@2 eb3 ~",
  J: "eb3@3 ~@3 eb3 ~@3 eb3@2 ~@2 bb2 ~", K: "d3@2 ~@2 d3 ~ a2 ~ d3 ~ a2 ~ d3 ~ a2 ~", L: "c4 ~ eb3 ~ c4@2 ~@8 a3 ~",
  M: "gb3 ~@7", N: "d3 ~@7", O: "~ bb3@3", P: "c3 ~ g2 ~ g3@12", Q: "g2@3 ~@13",
})).s("gm_cello").gain(0.25)

// bass · contrabass
const bass = note(`<
  ~@4 A B C D A B C E F G H I J G K L M N O P M N Q R F G H I J G K S T U@6 V A B C D F G K W X
>`.pickRestart({
  A: "g1@3 ~@3 g1@2 ~@6 gb1 ~", B: "g1@3 ~@3 g1@2 ~@6 bb1 ~", C: "c2@3 ~@3 c2@2 ~@6 bb1 ~",
  D: "a1@3 ~@3 a1@2 ~@6 gb1 ~", E: "a1@3 ~@3 a1@2 ~@8", F: "c2@3 ~@3 c2 ~@3 c2@2 ~@2 c2 ~",
  G: "f2@3 ~@3 f2 ~@3 f2@2 ~@2 f2 ~", H: "g2@3 ~@3 g2 ~@5 g2@2 ~@2", I: "g2@3 ~@3 g2 ~@5 g2 ~ g2 ~",
  J: "eb2@3 ~@3 eb2 ~@3 eb2@2 ~@2 eb2 ~", K: "eb2@3 ~@3 eb2 ~@3 eb2@2 ~@2 bb1 ~", L: "d2 ~ d2 ~ d2 ~ d2 ~",
  M: "g2@3 ~@3 g2 ~@3 g2@2 ~@2 f2 ~", N: "g2@3 ~@3 g2 ~@3 g2@2 ~@2 g2 ~", O: "a1@3 ~@3 a1 ~@3 a1@2 ~@2 a1 ~",
  P: "d2@3 ~@3 d2 ~@3 d2@2 ~@2 c2 ~", Q: "c2@3 ~@3 c2 ~@3 c2@2 ~@2 eb2 ~", R: "d2@3 ~@3 d2 ~@3 d2@2 ~@2 d2 ~", S: "d2",
  T: "g2 ~@7", U: "g1 ~@3", V: "g1 ~@7", W: "d2 ~@7", X: "g1@3 ~@13",
})).s("gm_contrabass").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A@2 B A@2 B A B A@2 B A@2 B A@2 B A@6 B A@2 B A@2 D E F E F G F E H A B A@2 B A@2 B ~
>`.pickRestart({
  A: "x ~@2 x ~ x ~ x", B: "x!2 ~ x ~ x ~ x", C: "x!2 ~@6", D: "~@5 x ~ x", E: "x ~@2 x ~@4", F: "x ~@2 x ~ x ~@10",
  G: "x", H: "x ~@2 x ~@12",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!3 ~ [~ x ~ x]!31 ~ [~ x]!7 ~ [~ x ~ x]!8 ~>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@3 [~@7 x] ~@31 [~@3 x] ~@7 [~@7 x] ~@8 x>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<[x!8]!3 ~ [x!8]!31 [x!2 ~@6] [x!8]!7 ~ [x!8]!8 ~>").gain(0.3)

stack(violin, viola, cello, bass, kick, snare, crash, ride)