Strudelify

Rain Dances

Camel

KeyG minorTempo64 bpm
0:00/0:00
// Rain Dances — Camel
// 63.5 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 46 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(63.5/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.

// other · string ensemble 1 · "Violin 2"
const string_ensemble_1 = note("<~@20 A B@7 C D@2 E@2 F@2 G@3 H I J ~@5>".pickRestart({
  A: "~@6 g5@5 a5@5 bb5@5 eb5@10 ~ d6@5 c6@5 bb5@5 ~",
  B: "[a5@5 g5@5 a5@5 bb5@5 eb5@10 ~ d6@5 c6@5 bb5@5 ~ a5@5 g5@5 a5@5 bb5@5 ~ eb5@10 d6@5 ~ c6@5 bb5@5 a5@5 g5@5 ~ a5@5 bb5@5 eb5@11 d6@5 c6@5 ~ bb5@5 a5@5 g5@5 ~ a5@5 bb5@5 eb6@11 d6@5 c6@5 ~ bb5@5 a5@5 g5@5 ~ a5@5 bb5@5 eb6@11 d6@5 ~ c6@5 bb5@5 a5@5 ~ g5@5 a5@5 ~ bb5@5 eb6@11 d6@5 c6@5 ~ bb5@5 a5@5 ~ g5@5 a5@5 ~ bb5@5 eb6@11 d6@5 c6@5 ~ bb5@5]/7",
  C: "a5@5 ~ g5@5 a5@5 ~ bb5@5 eb6@11 d6@5 ~ c6@5 bb5@4",
  D: "[~@2 a5@5 g5@5 ~ a5@5 bb5@5 ~ eb6@11 d6@5 c6@6 bb5@5 a5@6 g5@6 a5@5 bb5@6 eb6@11 d6@5 c6@6]/2",
  E: "[bb5@6 a5@5 g5@6 a5@5 bb5@6 eb6@11 d6@6 c6@5 bb5@6 a5@6 g5@5 a5@6 bb5@6 eb6@11 d6@6]/2",
  F: "[c6@5 bb5@6 a5@6 g5@5 a5@6 bb5@6 eb6@11 d6@6 c6@5 bb5@6 a5@6 g5@6 a5@5 bb5@6 eb6@11]/2",
  G: "[d6@6 c6@6 bb5@6 a5@5 g5@6 a5@6 bb5@6 eb6@11 d6@6 c6@6 bb5@6 a5@5 g5@6 a5@6 bb5@6 eb6@11 d6@6 c6@6 bb5@6 a5@6 g5@6 a5@5 bb5@5]/3",
  H: "~ eb6@12 d6@6 c6@6 bb5@6 a5@6 g5@5 a5@6", I: "bb5 eb6@2 d6 c6 bb5 a5 g5",
  J: "a5@6 bb5@5 eb6@12 d6@6 c6@6 bb5@6 a5@6 ~",
})).s("gm_string_ensemble_1").gain(0.4)

// other · tremolo strings · "Violin 1"
const tremolo_strings = note("<A@2 B@3 C D@5 E F@3 G@3 ~@28>".pickRestart({
  A: "[~@28 d5@5 g5@4 a5@5 bb5@4 d5@5 g5@4 a5@5 bb5@5 d5@4 g5@5 a5@4 bb5@5 d5@5 g5@4 a5@4]/2",
  B: "[~ bb5@4 eb5@5 bb5@5 a5@4 a5@5 g5@4 g5@5 a5@5 a5@4 f5@5 g5@4 a5@5 bb5@5 d5@4 g5@5 a5@5 bb5@4 d5@5 g5@5 a5@4 bb5@5 d5@5 g5@4 a5@5 bb5@5 eb5@4 bb5@5 a5@5 a5@4 g5@5 g5@4]/3",
  C: "~ a5@4 a5@5 f5@5 g5@5 a5@4 bb5@5 d5@5 g5@4 a5@5 bb5@5",
  D: "[d5@4 g5@5 a5@5 bb5@5 d5@4 g5@5 a5@5 bb5@5 eb5@4 bb5@5 a5@5 a5@5 g5@4 g5@5 a5@5 a5@5 f5@4 g5@5 a5@5 bb5@5 d5@5 g5@4 a5@5 bb5@5 d5@5 g5@5 a5@4 bb5@5 d5@5 g5@5 a5@5 bb5@5 eb5@4 bb5@5 a5@5 a5@5 g5@5 g5@5 a5@4 a5@5 f5@5 g5@5 a5@5 bb5@5 d5@4 g5@5 a5@5 bb5@5 d5@5 g5@5]/5",
  E: "a5@5 bb5@5 d5@5 g5@4 a5@5 bb5@5 eb5@5 bb5@5 a5@5 a5@4",
  F: "[~ g5@5 g5@5 a5@5 a5@5 f5@4 g5@5 a5@5 bb5@5 d5@5 g5@5 a5@5 bb5@5 d5@5 g5@5 a5@5 bb5@5 d5@5 g5@5 a5@5 bb5@5 eb5@5 bb5@5 a5@5 a5@5 g5@5 g5@5 a5@5 a5@5 f5@4]/3",
  G: "[~ g2@40 c3@40 ~ a2@39 ~@23]/3",
})).s("gm_tremolo_strings").gain(0.56).pan(0.3)

// chords · string ensemble 1 · "Str Sect"
const string_ensemble_1_2 = note("<A@6 B@4 C@5 D@6 ~@25>".pickRestart({
  A: "[~@33 [g2,g3,g4]@27 [d2,d3,d4]@9 [eb2,eb3,eb4]@37 [f2,f3,f4]@37 [g2,g3,g4]@28 [d2,d3,d4]@9 [eb2,eb3,eb4]@37 [f2,f3,f4]@37 ~ [g2,g3,g4]@28 [d2,d3,d4]@5]/6", // G D Eb F G D Eb F …
  B: "[~@4 [eb2,eb3,eb4]@38 [f2,f3,f4]@38 [g2,g3,g4]@29 [d2,d3,d4]@10 [eb2,eb3,eb4]@38 [f2,f3,f4]@35]/4", // Eb F G D Eb F
  C: "[~@4 g4@5 a4@5 bb4@5 d4@4 g4@5 a4@5 [d4,bb4]@5 d4@5 g4@5 a4@5 bb4@5 eb4@5 g4@4 a4@5 bb4@5 eb4@5 bb4@5 a4@5 a4@5 g4@5 g4@5 a4@5 a4@5 f4@4 g4@5 a4@5 bb4@5 d4@5 g4@5 a4@5 [d4,bb4]@5 d4@5 g4@5 a4@5 bb4@5 eb4@5 g4@5 a4@5 bb4@5 eb4@5 bb4@5 a4@5 a4@5 g4@5 g4@5 a4@5 a4@5 f4@4, ~@4 [g2,g3]@29 [d2,d3]@10 [eb2,eb3]@39 [f2,f3]@39 [g2,g3]@30 [d2,d3]@10 [eb2,eb3]@40 [f2,f3]@39, ~@43 eb4@15 ~@24 f4@34 ~@45 eb4@15 ~@25 f4@35 ~@4]/5", // Gm G D Eb F G D Eb …
  D: "[~ [d4,g4,bb4]@40 [c4,eb4,g4,c5]@40 ~ [d4,f4,a4,d5]@40 d6@31 c6@31 bb5@31 c6@31 ~@42, ~@61 g6@62 ~@21]/6", // Gm Cm Dm
})).s("gm_string_ensemble_1").gain(0.64).pan(0.6)

// other · oboe
const oboe = note("<~@5 A@3 B@7 C@6 ~@25>".pickRestart({
  A: "[~@15 g4@19 a4@9 bb4@9 eb4@28 ~ d5@9 c5@19 bb4@10 a4@9 g4@16]/3",
  B: "[~@4 a4@9 bb4@10 eb4@29 d5@9 c5@19 ~ bb4@9 a4@10 g4@19 a4@10 bb4@10 eb4@29 d5@10 c5@20 bb4@10 a4@9 g4@20 a4@10 bb4@10 eb4@30 d5@10 c5@20 bb4@10 a4@9]/7",
  C: "[~ g4@20 a4@10 bb4@10 d5@20 c5@20 ~ a4@20 bb4@10 c5@9 ~@2 d5@30 c5@31 bb4@31 c5@31 ~@42]/6",
})).s("gm_oboe").gain(0.64).pan(0.9)

// chords · pizzicato strings · "Pizzicato"
const pizzicato_strings = note("<~@17 A@2 B C D@2 E@2 F G@2 H@2 I J K L M N@2 O P Q R@4 S ~>".pickRestart({
  A: "[~@26 f4@3 g4@2 d4@3 f4@3 g4@2 g3@3 f4@2 g4@3 d4@2 f4@3 g4@2 g3@3 eb4@3 g4@2 d4@3 f4@2 g4@3 g3@2 eb4@3 g4@3 d4@2 f4@3 g4@2 g3@3 e4@2 g4@3 d4@3]/2",
  B: "f4@2 g4@3 g3@2 e4@3 g4@2 d4@3 f4@3 g4@2 g3@3 f4@2 g4@3 d4@3 f4@2 g4@3 g3@2 f4@3 g4@2 d4@3 f4@2",
  C: "~ g4@2 g3@3 f4@2 g4@3 d4@3 f4@2 g4@3 g3@2 f4@3 g4@3 d4@2 f4@3 g4@2 g3@3 eb4@3 f4@2 c4@3 eb4@3",
  D: "[f4@2 f3@3 f4@2 g4@3 d4@3 f4@2 g4@3 g3@2 f4@3 g4@3 d4@2 f4@3 g4@3 g3@2 eb4@3 f4@2 c4@3 eb4@3 f4@2 f3@3 f4@3 g4@2 d4@3 f4@2 g4@3 g3@3 f4@2 g4@3 d4@3 f4@2 g4@3 g3@3 eb4@2 f4@3 c4@2 eb4@3 f4@2]/2",
  E: "~ f3@2 f4@3 g4@3 d4@2 f4@3 g4@3 g3@2 f4@3 g4@3 d4@2 f4@3 g4@3 g3@2 eb4@3 f4@3 c4@2 eb4@3 f4@2",
  F: "~ f3@2 f4@3 g4@3 d4@2 f4@3 g4@3 g3@2 f4@3 g4@3 d4@3 f4@2 g4@3 g3@3 eb4@2 f4@3 c4@3 eb4@2 f4@2",
  G: "[~ f3@3 f4@3 g4@2 d4@3 f4@3 g4@2 g3@3 f4@3 g4@2 d4@3 f4@3 g4@3 g3@2 eb4@3 f4@3 c4@2 eb4@3 f4@3 f3@3 f4@2 g4@3 d4@3 f4@3 g4@2 g3@3 f4@3 g4@2 d4@3 f4@3 g4@3 g3@2 eb4@3 f4@3 c4@3 eb4@2]/2",
  H: "[f4@3 f3@3 f4@3 g4@2 d4@3 f4@3 g4@2 g3@3 f4@3 g4@3 d4@2 f4@3 g4@3 g3@3 eb4@2 f4@3 c4@3 eb4@3 f4@2 f3@3 f4@3 g4@3 d4@3 f4@2 g4@3 g3@3 f4@3 g4@2 d4@3 f4@3 g4@3 g3@2 eb4@3 f4@3 c4@2]/2",
  I: "~ eb4@2 f4@3 f3@3 f4@3 g4@3 d4@2 f4@3 g4@3 g3@3 f4@3 g4@2 d4@3 f4@3 g4@3 g3@2 eb4@3 f4@3",
  J: "c4@3 eb4@3 f4@2 f3@3 f4@3 g4@3 d4@3 f4@2 g4@3 g3@3 f4@3 g4@3 d4@2 f4@3 g4@3 g3@3 eb4@3",
  K: "f4@2 c4@3 eb4@3 f4@3 f3@3 f4@3 g4@2 d4@3 f4@3 g4@3 g3@3 f4@2 g4@3 d4@3 f4@3 g4@3 g3@3",
  L: "eb4@2 f4@3 c4@3 eb4@3 f4@3 f3@3 f4@2 g4@3 d4@3 f4@3 g4@3 g3@3 f4@2 g4@3 d4@3 f4@3 g4@3",
  M: "g3@3 eb4@3 f4@2 c4@3 eb4@3 f4@3 f3@3 f4@3 g4@3 d4@2 f4@3 g4@3 g3@3 f4@3 g4@3 d4@3 f4@2",
  N: "[g4@3 g3@3 eb4@3 f4@3 c4@3 eb4@3 f4@3 f3@2 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 f4@3 g4@3 d4@2 f4@3 g4@3 g3@3 eb4@3 f4@3 c4@3 eb4@3 f4@2 f3@3 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 f4@3]/2",
  O: "g4@3 d4@3 f4@2 g4@3 g3@3 eb4@3 f4@3 c4@3 eb4@3 f4@3 f3@3 f4@3 g4@3 d4@3 f4@2 g4@3 g3@2",
  P: "~ f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 eb4@3 f4@3 c4@3 eb4@3 f4@3 f3@3 f4@2 g4@3 d4@3 f4@3",
  Q: "g4 g3 f4 g4 d4 f4 g4 g3 eb4 f4 c4 eb4 f4 f3 f4 g4",
  R: "[d4@3 f4@3 g4@3 g3@2 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 eb4@3 f4@3 c4@3 eb4@3 f4@3 f3@3 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 eb4@3 f4@3 c4@3 eb4@3 f4@3 f3@3 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 eb4@3 f4@3 c4@3 eb4@3 f4@3 f3@3 ~ f4@3 g4@3 d4@3 f4@3 g4@3 g3@3 f4@3 g4@3 d4@3 f4@3 g4@3 g3@3]/4",
  S: "eb4@3 f4@3 c4@3 eb4@3 f4@3 f3@3 f4@3 g4@3 d4@3 f4@3 g4@3 ~ g3@3 f4@3 g4@3 d4@3 f4@2",
})).s("gm_pizzicato_strings").gain(0.56)

// chords · pizzicato strings · "Pizzicato" · soft notes
const pizzicato_strings_soft = note("<~@17 A@2 B C D@2 E@2 F G@2 H@2 I J K L M N@2 O P Q R@4 S ~>".pickRestart({
  A: "[~@26 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 a4@2 bb4@3 g4@2 a4@3 bb4@3 ~@2 a4@3 bb4@2 g4@3 a4@2 bb4@3 ~@2 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@2 a4@2 bb4@3 g4@3]/2",
  B: "a4@2 bb4@3 ~@2 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 a4@2 bb4@3 g4@3 a4@2 bb4@3 ~@2 a4@3 bb4@2 g4@3 a4@2",
  C: "~ bb4@3 ~@2 a4@2 bb4@3 g4@3 a4@2 bb4@3 ~@2 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@2 g4@3 a4@2 f4@3 g4@3",
  D: "[a4@3 ~@2 a4@2 bb4@3 g4@3 a4@2 bb4@3 ~@2 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@2 g4@3 a4@2 f4@3 g4@3 a4@3 ~@2 a4@3 bb4@2 g4@3 a4@2 bb4@3 ~@3 a4@2 bb4@3 g4@3 a4@2 bb4@3 ~@3 g4@2 a4@3 f4@2 g4@3 a4@2]/2",
  E: "~@3 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@2 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@2 g4@3 a4@3 f4@2 g4@3 a4@2",
  F: "~@3 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@2 a4@3 bb4@3 g4@3 a4@2 bb4@3 ~@3 g4@2 a4@3 f4@3 g4@2 a4@2",
  G: "[~@4 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 g4@3 a4@3 f4@2 g4@3 a4@3 ~@3 a4@2 bb4@3 g4@3 a4@3 bb4@3 ~@2 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 g4@3 a4@3 f4@3 g4@2]/2",
  H: "[a4@3 ~@3 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@3 g4@2 a4@3 f4@3 g4@3 a4@3 ~@2 a4@3 bb4@3 g4@3 a4@2 bb4@3 ~@3 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 g4@3 a4@3 f4@2]/2",
  I: "~ g4@2 a4@3 ~@3 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@3 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@2 g4@3 a4@3",
  J: "f4@3 g4@3 a4@3 ~@2 a4@3 bb4@3 g4@3 a4@2 bb4@3 ~@3 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@3 g4@3",
  K: "a4@2 f4@3 g4@3 a4@3 ~@3 a4@3 bb4@2 g4@3 a4@3 bb4@3 ~@3 a4@2 bb4@3 g4@3 a4@3 bb4@3 ~@3",
  L: "g4@2 a4@3 f4@3 g4@3 a4@3 ~@3 a4@2 bb4@3 g4@3 a4@3 bb4@3 ~@3 a4@2 bb4@3 g4@3 a4@3 bb4@3",
  M: "~@3 g4@3 a4@2 f4@3 g4@3 a4@3 ~@3 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@3 a4@3 bb4@3 g4@3 a4@2",
  N: "[bb4@3 ~@3 g4@3 a4@3 f4@3 g4@3 a4@3 ~@2 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 a4@3 bb4@3 g4@2 a4@3 bb4@3 ~@3 g4@3 a4@3 f4@3 g4@3 a4@3 ~@2 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 a4@3]/2",
  O: "bb4@3 g4@3 a4@2 bb4@3 ~@3 g4@3 a4@3 f4@3 g4@3 a4@3 ~@3 a4@3 bb4@3 g4@3 a4@2 bb4@3 ~@2",
  P: "~ a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 g4@3 a4@3 f4@3 g4@3 a4@3 ~@3 a4@2 bb4@3 g4@3 a4@3",
  Q: "bb4 ~ a4 bb4 g4 a4 bb4 ~ g4 a4 f4 g4 a4 ~ a4 bb4",
  R: "[g4@3 a4@3 bb4@3 ~@2 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 g4@3 a4@3 f4@3 g4@3 a4@3 ~@3 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 g4@3 a4@3 f4@3 g4@3 a4@3 ~@3 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 g4@3 a4@3 f4@3 g4@3 a4@3 ~@4 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@3]/4",
  S: "g4@3 a4@3 f4@3 g4@3 a4@3 ~@3 a4@3 bb4@3 g4@3 a4@3 bb4@3 ~@4 a4@3 bb4@3 g4@3 a4@2",
})).s("gm_pizzicato_strings").gain(0.32)

// other · brass section · "Brs Sect"
const brass_section = note("<~@29 A B C D E F G@2 H I J K@2 L@2 M ~>".pickRestart({
  A: "~@23 g4", B: "~ g4@3 ~@2 g4@3 g4@3 ~@3 g4@2 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@2 g4@3 ~@3",
  C: "g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@2 g4@3 ~@3 g4@3 g4@3",
  D: "~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@3",
  E: "g4@3 ~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3",
  F: "g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@2 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@2",
  G: "[~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@2 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@2 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3]/2",
  H: "~@3 g4@3 g4@3 ~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@2",
  I: "~ g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@2 g4@3 g4@3",
  J: "~ g4!2 ~ g4!2 ~ g4!2 ~ g4!2 ~ g4!2 ~",
  K: "[g4@3 g4@3 ~@3 g4@2 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~]/2",
  L: "[~@2 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 ~ g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3]/2",
  M: "g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@3 g4@3 g4@3 ~@4 g4@3 g4@3 ~@3 g4@3 g4@2",
})).s("gm_brass_section").gain(0.25).pan(0.9)

stack(
  string_ensemble_1, tremolo_strings, string_ensemble_1_2, oboe, pizzicato_strings, pizzicato_strings_soft,
  brass_section
)

More by Camel