Strudelify

I Have a Dream

DJ Quicksilver

KeyA minorTempo142 bpm
0:00/0:00
// I Have a Dream — DJ Quicksilver
// 142 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(142/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 · pad poly
const pad_poly = note(`<
  ~@25 A B C D E F G H I J K L M N O P ~ Q R S T Q R S T Q R S T Q R S T ~@34 U V W X Y Z AA AB AC AD AE AF AC AD AE AF
  U V W X U V W X AG AH AI AJ AG AH AI AJ ~
>`.pickRestart({
  A: "~@2 [a4,c5,e5] ~ [a4,c5,e5]@2 ~ [a4,c5,e5] ~@2 [a4,c5,e5] ~ [a4,c5,e5]@2 ~ [a4,c5,e5]", // Am
  B: "~@2 [e4,g4,b4] ~ [e4,g4,b4]@2 ~ [e4,g4,b4] ~@2 [e4,g4,b4] ~ [e4,g4,b4]@2 ~ [e4,g4,b4]", // Em
  C: "~@2 [g4,a#4,d5] ~ [g4,a#4,d5]@2 ~ [g4,a#4,d5] ~@2 [g4,a#4,d5] ~ [g4,a#4,d5]@2 ~ [g4,a#4,d5]", // Gm
  D: "~@2 [d4,f4,a4] ~ [d4,f4,a4]@2 ~ [d4,f4,a4] ~@2 [d4,f4,a4] ~ [d4,f4,a4]@2 ~ [d4,f4,a4]", // Dm
  E: "~@2 [a4,c5,e5,e6] ~ [a4,c5,e5,e6]@2 ~ [a4,c5,e5,e6] ~@2 [a4,c5,e5,e6] ~ [a4,c5,e5,e6]@2 ~ [a4,c5,e5,e6]", // Am
  F: "~@2 [e4,g4,b4,b5] ~ [e4,g4,b4,b5]@2 ~ [e4,g4,b4,b5] ~@2 [e4,g4,b4,b5] ~ [e4,g4,b4,b5]@2 ~ [e4,g4,b4,b5]", // Em
  G: "~@2 [g4,a#4,d5,d6] ~ [g4,a#4,d5,d6]@2 ~ [g4,a#4,d5,d6] ~@2 [g4,a#4,d5,d6] ~ [g4,a#4,d5,d6]@2 ~ [g4,a#4,d5,d6]", // Gm
  H: "~@2 [d4,f4,a4,a5] ~ [d4,f4,a4,a5]@2 ~ [d4,f4,a4,a5] ~@2 [d4,f4,a4,a5] ~ [d4,f4,a4,a5]@2 ~ [d4,f4,a4,a5]", // Dm
  I: "~@2 [a4,c5,e5,c6,e6] ~ [a4,c5,e5,c6,e6]@2 ~ [a4,c5,e5,c6,e6] ~@2 [a4,c5,e5,c6,e6] ~ [a4,c5,e5,c6,e6]@2 ~ [a4,c5,e5,c6,e6]", // Am
  J: "~@2 [e4,g4,b4,g5,b5] ~ [e4,g4,b4,g5,b5]@2 ~ [e4,g4,b4,g5,b5] ~@2 [e4,g4,b4,g5,b5] ~ [e4,g4,b4,g5,b5]@2 ~ [e4,g4,b4,g5,b5]", // Em
  K: "~@2 [g4,a#4,d5,a#5,d6] ~ [g4,a#4,d5,a#5,d6]@2 ~ [g4,a#4,d5,a#5,d6] ~@2 [g4,a#4,d5,a#5,d6] ~ [g4,a#4,d5,a#5,d6]@2 ~ [g4,a#4,d5,a#5,d6]", // Gm
  L: "~@2 [d4,f4,a4,f5,a5] ~ [d4,f4,a4,f5,a5]@2 ~ [d4,f4,a4,f5,a5] ~@2 [d4,f4,a4,f5,a5] ~ [d4,f4,a4,f5,a5]@2 ~ [d4,f4,a4,f5,a5]", // Dm
  M: "~@2 [a4,c5,e5,a5,c6,e6] ~ [a4,c5,e5,a5,c6,e6]@2 ~ [a4,c5,e5,a5,c6,e6] ~@2 [a4,c5,e5,a5,c6,e6] ~ [a4,c5,e5,a5,c6,e6]@2 ~ [a4,c5,e5,a5,c6,e6]", // Am
  N: "~@2 [e4,g4,b4,e5,g5,b5] ~ [e4,g4,b4,e5,g5,b5]@2 ~ [e4,g4,b4,e5,g5,b5] ~@2 [e4,g4,b4,e5,g5,b5] ~ [e4,g4,b4,e5,g5,b5]@2 ~ [e4,g4,b4,e5,g5,b5]", // Em
  O: "~@2 [g4,a#4,d5,g5,a#5,d6] ~ [g4,a#4,d5,g5,a#5,d6]@2 ~ [g4,a#4,d5,g5,a#5,d6] ~@2 [g4,a#4,d5,g5,a#5,d6] ~ [g4,a#4,d5,g5,a#5,d6]@2 ~ [g4,a#4,d5,g5,a#5,d6]", // Gm
  P: "~@2 [d4,f4,a4,d5,f5,a5] ~ [d4,f4,a4,d5,f5,a5]@2 ~ [d4,f4,a4,d5,f5,a5] ~@2 [d4,f4,a4,d5,f5,a5] ~ [d4,f4,a4,d5,f5,a5]@2 ~ [d4,f4,a4,d5,f5,a5]", // Dm
  Q: "~@2 [a4,c5,e5,a5,c6,e6] [a3,a4] [a4,c5,e5,a5,c6,e6]@2 ~ [a4,c5,e5,a5,c6,e6] ~@2 [a4,c5,e5,a5,c6,e6] [a3,a4] [a4,c5,e5,a5,c6,e6]@2 ~ [a4,c5,e5,a5,c6,e6]", // Am A Am A Am
  R: "~@2 [e4,g4,b4,e5,g5,b5] [e3,e4] [e4,g4,b4,e5,g5,b5]@2 ~ [e4,g4,b4,e5,g5,b5] ~@2 [e4,g4,b4,e5,g5,b5] [e3,e4] [e4,g4,b4,e5,g5,b5]@2 ~ [e4,g4,b4,e5,g5,b5]", // Em E Em E Em
  S: "~@2 [g4,a#4,d5,g5,a#5,d6] [g3,g4] [g4,a#4,d5,g5,a#5,d6]@2 ~ [g4,a#4,d5,g5,a#5,d6] ~@2 [g4,a#4,d5,g5,a#5,d6] [g3,g4] [g4,a#4,d5,g5,a#5,d6]@2 ~ [g4,a#4,d5,g5,a#5,d6]", // Gm G Gm G Gm
  T: "~@2 [d4,f4,a4,d5,f5,a5] [d3,d4] [d4,f4,a4,d5,f5,a5]@2 ~ [d4,f4,a4,d5,f5,a5] ~@2 [d4,f4,a4,d5,f5,a5] [d3,d4] [d4,f4,a4,d5,f5,a5]@2 ~ [d4,f4,a4,d5,f5,a5]", // Dm D Dm D Dm
  U: "~@2 [a4,a5,c6,e6]!3 ~ [a4,a5,c6,e6]!2 ~@2 [a4,a5,c6,e6]!3 ~ [a4,a5,c6,e6]!2", // Am
  V: "~@2 [e4,e5,g5,b5]!3 ~ [e4,e5,g5,b5]!2 ~@2 [e4,e5,g5,b5]!3 ~ [e4,e5,g5,b5]!2", // Em
  W: "~@2 [g4,g5,a#5,d6]!3 ~ [g4,g5,a#5,d6]!2 ~@2 [g4,g5,a#5,d6]!3 ~ [g4,g5,a#5,d6]!2", // Gm
  X: "~@2 [d4,d5,f5,a5]!3 ~ [d4,d5,f5,a5]!2 ~@2 [d4,d5,f5,a5]!3 ~ [d4,d5,f5,a5]!2", // Dm
  Y: "~@2 [a4,e5,a5,c6,e6]!3 ~ [a4,e5,a5,c6,e6]!2 ~@2 [a4,e5,a5,c6,e6]!3 ~ [a4,e5,a5,c6,e6]!2", // Am
  Z: "~@2 [e4,b4,e5,g5,b5]!2 [e4,c5,e5,g5,b5] ~ [e4,b4,e5,g5,b5]!2 ~@2 [e4,b4,e5,g5,b5]!3 ~ [e4,b4,e5,g5,b5]!2", // Em Cmaj7 Em
  AA: "~@2 [g4,d5,g5,a#5,d6]!3 ~ [g4,d5,g5,a#5,d6]!2 ~@2 [g4,d5,g5,a#5,d6]!3 ~ [g4,d5,g5,a#5,d6]!2", // Gm
  AB: "~@2 [d4,a4,d5,f5,a5]!3 ~ [d4,a4,d5,f5,a5]!2 ~@2 [d4,a4,d5,f5,a5]!3 ~ [d4,a4,d5,f5,a5]!2", // Dm
  AC: "~@2 [a4,c5,e5,a5,c6,e6]!3 ~ [a4,c5,e5,a5,c6,e6]!2 ~@2 [a4,c5,e5,a5,c6,e6]!3 ~ [a4,c5,e5,a5,c6,e6]!2", // Am
  AD: "~@2 [e4,g4,b4,e5,g5,b5]!2 [e4,g4,c5,e5,g5,b5] ~ [e4,g4,b4,e5,g5,b5]!2 ~@2 [e4,g4,b4,e5,g5,b5]!3 ~ [e4,g4,b4,e5,g5,b5]!2", // Em Cmaj7 Em
  AE: "~@2 [g4,a#4,d5,g5,a#5,d6]!3 ~ [g4,a#4,d5,g5,a#5,d6]!2 ~@2 [g4,a#4,d5,g5,a#5,d6]!3 ~ [g4,a#4,d5,g5,a#5,d6]!2", // Gm
  AF: "~@2 [d4,f4,a4,d5,f5,a5]!3 ~ [d4,f4,a4,d5,f5,a5]!2 ~@2 [d4,f4,a4,d5,f5,a5]!3 ~ [d4,f4,a4,d5,f5,a5]!2", // Dm
  AG: "~@2 [a4,a5]!3 ~ [a4,a5]!2 ~@2 [a4,a5]!3 ~ [a4,a5]!2", AH: "~@2 [e4,e5]!3 ~ [e4,e5]!2 ~@2 [e4,e5]!3 ~ [e4,e5]!2",
  AI: "~@2 [g4,g5]!3 ~ [g4,g5]!2 ~@2 [g4,g5]!3 ~ [g4,g5]!2", AJ: "~@2 [d4,d5]!3 ~ [d4,d5]!2 ~@2 [d4,d5]!3 ~ [d4,d5]!2",
})).s("gm_pad_poly").gain(0.34).pan(0.7)

// bass · electric bass finger
const bass = note(`<
  ~@12 A B@3 ~@26 C D E F C D E F G H I J K L M N ~ O@16 ~@17 C D E F C D E F G H I J G H I J C D E F C D E F G H I J G
  H I J ~
>`.pickRestart({
  A: "~@3 a1!2 ~ a1 ~ a1 ~@2 a1!2 ~ a1 ~", B: "a1 ~@2 a1!2 ~ a1 ~ a1 ~@2 a1!2 ~ a1 ~",
  C: "a1!2 a1@2 a1!2 a1@2 a1!2 a1@2 a1!2 a1@2", D: "e1!2 e1@2 e1!2 e1@2 e1!2 e1@2 e1!2 e1@2",
  E: "g1!2 g1@2 g1!2 g1@2 g1!2 g1@2 g1!2 g1@2", F: "d1!2 d1@2 d1!2 d1@2 d1!2 d1@2 d1!2 d1@2", G: "a1!16", H: "e1!16",
  I: "g1!16", J: "d1!16", K: "a2!16", L: "e2!16", M: "g2!16", N: "d2!16", O: "~@3 a0 b0 ~ c1@2 ~@3 c1 b0 ~ a0@2",
})).s("gm_electric_bass_finger").gain(0.45)

// other · pad bowed
const pad_bowed = note("<~ A@4 ~@120>".pickRestart({
  A: "a1/4",
})).s("gm_pad_bowed").gain(0.46)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@33 A B C D A B C D ~ A B C D A B C D A B C D A B C D ~@34 A B C D E F G H E F G H E F G H A B C D ~@13
>`.pickRestart({
  A: "a2!16", B: "e2!16", C: "g2!16", D: "d2!16", E: "[a2,a3]!16", F: "[e2,b3]!4 [e2,c4] [e2,b3]!7 [e2,c4] [e2,b3]!3",
  G: "[g2,g4]!16", H: "[d2,d4]!16",
})).s("gm_electric_guitar_muted").gain(0.35)

// chords · lead 3 calliope
const lead_3_calliope = note("<~@67 A@2 B C B D E F@2 G B C B D E F@2 G A@6 ~@34>".pickRestart({
  A: "a4!2 a4@2 a4!3 ~ a4!2 a4@2 a4!3 ~", B: "[a4,c5]!2 [a4,c5]@2 [a4,c5]!3 ~ [a4,c5]!2 [a4,c5]@2 [a4,c5]!3 ~",
  C: "[a4,c5]!2 [a4,c5]@2 [a4,c5]!3 ~ [b4,c5]!2 [b4,c5]@2 [b4,c5]!3 ~", // Am Cmaj7
  D: "[a4,c5]!2 [a4,c5]@2 [a4,c5]!3 ~ [a4,b4]!2 [a4,b4]@2 [a4,b4]!3 ~", // Am Asus2
  E: "[a4,c5]!2 [a4,c5]@2 [a4,c5]!3 ~ [a4,d5]!2 [a4,d5]@2 [a4,d5]!3 ~", // Am D5
  F: "[g4,a4,d5]!2 [g4,a4,d5]@2 [g4,a4,d5]!3 ~ [g4,a4,d5]!2 [g4,a4,d5]@2 [g4,a4,d5]!3 ~", // Gsus2
  G: "[g4,a4,d5]!2 [g4,a4,d5]@2 [g4,a4,d5]!3 ~ [a4,c5]!2 [a4,c5]@2 [a4,c5]!3 ~", // Gsus2 Am
})).s("gm_lead_3_calliope").gain(0.38).pan(0.8)

// other · percussive organ
const percussive_organ = note("<~@67 A B C D A B C D A B C D A B C D A@8 ~@34>".pickRestart({
  A: "c6 b5 c6 e6 c6 b5 c6 e6 c6 b5 c6 e6 c6 b5 c6 e6", B: "c6!3 e6 c6!3 e6 c6!3 e6 c6!3 e6",
  C: "c6!3 f6 c6!3 f6 c6!3 f6 c6!3 f6", D: "d6!3 f6 d6!3 f6 d6!3 f6 d6!3 f6",
})).s("gm_percussive_organ").gain(0.27).pan(0.2)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~ A@8 B@7 C@8 ~ D E F G D E F G D E F H@2 I@8 ~@13 J@8 ~@16 J@8 ~ K L M N K L M N K L M N K L M N K L M N K L M N K O
  M N K P M N ~
>`.pickRestart({
  A: "[~@3 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@2]/8",
  B: "[~@3 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@5 a4@3 a4@2]/7",
  C: "[~@3 a4@3 a4@5 a4@3 a4@114]/8", D: "~@2 e5@2 e5@3 e5@3 e5@2 e5@3 e5", E: "~@2 b4@2 b4@3 b4@3 b4@2 b4@3 b4",
  F: "~@2 d5@2 d5@3 d5@3 d5@2 d5@3 d5", G: "~@2 a4@2 a4@3 a4@3 a4@2 a4@3 a4",
  H: "[~@2 a4@2 a4@3 a4@3 a4@2 a4@3 ~@3 e5@2 e5@3 e5@3 e5@2 e5@3 e5, ~@15 a4@17]/2",
  I: "[~@2 b4@2 b4@3 b4@3 b4@2 b4@3 ~@3 d5@2 d5@3 d5@3 d5@2 d5@3 d5 ~@2 a4@2 a4@3 a4@3 a4@2 a4@3 a4@81, ~@15 b4@113]/8",
  J: "~@3 a4 ~@2 a4 ~@4 a4 ~@2 a4 ~", K: "~@3 a4 ~@2 a4!2 ~@3 a4 ~@2 a4!2", L: "~@3 e4 ~@2 e4!2 ~@3 e4 ~@2 e4!2",
  M: "~@3 g4 ~@2 g4!2 ~@3 g4 ~@2 g4!2", N: "~@3 d4 ~@2 d4!2 ~@3 d4 ~@2 d4!2",
  O: "~@3 [e4,b4] ~@2 [e4,c5]!2 ~@3 [e4,c5] ~@2 [e4,b4]!2", // E5 C E5
  P: "~@3 [e4,b4] ~@2 [e4,c5]!2 ~@3 [e4,c5] ~@2 [e4,c5] [e4,b4]", // E5 C E5
})).s("gm_pizzicato_strings").gain(0.42).pan(0.3)

// drums · rim
const rim = s("rim").struct(`<
  ~
  [x!2]!4
  [x ~ x!2 ~@2 x ~ x ~ x!2 ~@2 x ~]!12
  [~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~]!7
  [~@2 x!2 ~@2 x ~@9]
  ~@100
>`).gain(0.42)

// drums · kick
const kick = s("bd").struct("<~@8 A@8 ~@9 B ~@3 B ~@3 B ~@3 B ~@3 B A@16 B A@16 ~@16 B A@20 ~@4 A@8 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct("<~@25 A@8 B@4 C@4 ~@44 C@6 ~@21 D C@3 ~@9>".pickRestart({
  A: "~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x", B: "~ x!2 ~ x ~@2 x ~ x!4 ~@2 x", C: "x!16", D: "~@3 x!13",
})).gain(0.28)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@25
  [x!2 ~ x ~ x!2 ~ x!2 ~ x ~ x!2 ~]!8
  [x ~@2 x ~ x!2 ~ x ~@4 x!2 ~]!4
  ~@75
  [x!3 ~@13]
  ~@12
>`).gain(0.14)

// drums · clap
const clap = s("cp").struct("<~@17 A@7 B ~@4 A@12 ~@18 C@8 A@8 ~@50>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@2 x!2 ~@2 x!2",
})).gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@25 A ~@3 A ~@3 A ~@3 A ~@3 A ~@16 A B@16 ~@16 A ~@32 A>".pickRestart({
  A: "x", B: "~@3 x!2 ~@6 x!2 ~@3",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12
  [~ x ~ x ~ x ~ x]!5
  ~@25
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!16
  ~@34
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!32
  ~
>`).gain(0.28)

// drums · mid tom
const mid_tom = s("mt").struct("<~@25 A ~@3 A ~@3 A ~@3 A ~@3 A ~@16 A B@16 ~@16 A ~@32 A>".pickRestart({
  A: "x", B: "~@3 x ~@3 x",
})).gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@42 [~ x ~ x ~ x ~ x]!16 ~ [~ x ~ x ~ x ~ x]!8 ~@25 [~ x ~ x ~ x ~ x]!32 ~>")
  .gain(0.28)

// drums · high tom
const high_tom = s("ht").struct("<~@59 [~ x] [x!2]!7 [~ x] [x!2]!7 ~@50>").gain(0.37)

// drums · crash
const crash = s("cr").struct(`<
  ~@17 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@16 A@2 ~@31 A@2 ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.33)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@108 [x!8]!16 ~>").gain(1.42)

stack(
  pad_poly, bass, pad_bowed, electric_guitar_muted, lead_3_calliope, percussive_organ, pizzicato_strings, rim, kick,
  snare, snare_soft, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash, cabasa
)

More by DJ Quicksilver