Strudelify

Deja Vu

Blue System

KeyE♭ majorTempo120 bpm
0:00/0:00
// Deja Vu — Blue System
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · timpani
const timpani = note("<~@8 A B@4 ~@16 C D ~@15 A E F B@4 G B ~@16 C D ~@31 A E F B@4 G H I>".pickRestart({
  A: "~@13 g2!3", B: "g2 ~@12 g2!3", C: "~@14 g2 ~", D: "g2 ~@5 g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", E: "g2 ~@13 g2!2",
  F: "g2 ~@12 g2 [f2,g2] g2", G: "g2 ~@12 g2 [g2,e3] g2", H: "g2 ~@11 g2!4", I: "g2 ~@15",
})).s("gm_timpani").gain(0.4).pan(0.8)

// bass · electric bass finger
const bass = note(`<
  ~@13 A B C@2 A B C@2 D E F A D E G E@3 F D H I F J G E F D H I F J G E K L J H M A N H A B C O A B C@2 D E F A D E G
  E@3 F D H I F J G E F D H I F J G E F D H I F J G E F D H I F J G P A Q H R A@2 H S T
>`.pickRestart({
  A: "c1 ~ c2 ~ c1 ~ c2 ~ c1 ~ c2 ~ c1 ~ c2 ~", B: "c1 ~ c2 ~ c1 ~ c2 ~ c1 ~ c2 ~ c1@2 c2 ~",
  C: "bb0 ~ bb1 ~ bb0 ~ bb1 ~ bb0 ~ bb1 ~ bb0 ~ bb1 ~", D: "f1 ~ f2 ~ f1 ~ f2 ~ f1 ~ f2 ~ f1 ~ f2 ~",
  E: "bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~", F: "eb1 ~ eb2 ~ eb1 ~ eb2 ~ eb1 ~ eb2 ~ eb1 ~ eb2 ~",
  G: "f1 ~ f2 ~ f1 ~ f2 ~ f1 ~ f2 ~ f1@2 f2 ~", H: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~",
  I: "ab1 ~ ab2 ~ ab1 ~ ab2 ~ ab1 ~ ab2 ~ ab1 ~ ab2 ~", J: "g1@2 g2 ~ g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~",
  K: "c1@2 c2@2 c1@2 c2 ~ c1 ~ c2 ~ c1@2 c2 ~", L: "c1 ~ c2 ~@2 c1 c2 ~ c1 ~ c2 ~ c1@2 c2@2",
  M: "[c1,d1] ~ c2 ~ c1 ~ c2 ~ c1 ~ c2 ~ c1 ~ c2 ~", N: "g1 ~ g2 ~@2 g1 g2 ~ g1 ~ g2 ~ g1 ~ g2 ~",
  O: "bb0 ~ bb1 ~ bb0 ~ bb1 ~ bb0 ~ bb1 ~ bb0 ~@3", P: "bb2 ~ bb3 ~ bb2 ~ bb3 ~ bb2 ~ bb3 ~ bb2 ~ bb3 ~",
  Q: "c1 ~ c2 ~ c1 ~@2 c2 c1 ~ c2 ~ c1 ~ c2 ~", R: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~@2 g1 g2 ~",
  S: "g1 ~ g2 ~ g1 ~ g2 ~ g1@2 ~ g2 c2!2 bb1 ~", T: "[c2,c3] ~@7",
})).s("gm_electric_bass_finger").gain(0.45)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D@2 E F G H I@2 J@2 ~@21 K@5 ~@3 L@5 M N O P Q R S T ~@21 K@5 ~@3 K@5 ~@3 K@5 ~@3 L@5 M N O P Q R S U V
>`.pickRestart({
  A: "~@12 [c5,c6] [b4,g5,a5,b5] [e4,f4,g4,a4,b4,c5,d5,e5,f5] [f3,g3,a3,b3,c4,d4,e4,f4,g4,a4]", // C Em Em7 Fmaj7
  B: "[c3,d3,e3,g3,a3,b3,c4,d4,gb4] ~ c4 [eb4,g4] [c4,g4] c4 g4 c4 [eb4,g4] [c4,g4] [c4,eb4] [eb4,g4] [c4,g4] [c4,eb4] [eb4,g4] [c4,g4], [eb4,g4]@2 ~@3 eb4@2 ~@9", // Cmaj7 Eb C5 Eb C5 Cm Eb C5 …
  C: "[c4,eb4] g4 c4!2 eb4 c4 [c4,eb4] g4 [c4,g4] c4 eb4 c4 [c4,eb4] g4 [c4,eb4,g4] [ab2,eb4,gb4], ~ eb4@2 ~@13, ~ g4@2 ~@2 g4 ~@2", // Cm C5 Cm Ab7
  D: "[[c4,eb4,f4,g4] b3 [c4,g4] [c4,eb4] [eb4,g4] [c4,g4] [c4,eb4] [eb4,g4] c4 [eb4,g4] [c4,g4] [c4,eb4] g4 [c4,eb4] [eb4,g4] [c4,g4] eb4 [c4,g4] [c4,eb4] [eb4,g4] [c4,g4] [c4,eb4] [eb4,g4] [c4,g4] [c4,eb4] [eb4,g4] c4 [eb4,g4] [c4,g4] [c4,eb4] eb4@2, ab2@31 ~, ab3@21 ~ ab3@8 g4 ~]/2", // Cm C5 Cm Eb C5 Cm Eb C5 …
  E: "[bb3,g4]@2 [bb3,eb4] [eb4,g4] bb3 g4 bb2 [b2,c3,gb4] ~ [bb3,f4] d4 [bb3,f4] bb3 f4 bb3 [b2,d3,db4,d4,f4], [eb2,eb3]@3 bb3 ~@4, eb4 ~@4 eb4@2 [f2,f3]@8 ~, ~@7 d4@2 ~@2 d4@2 ~@3", // Eb Eb5 Eb B Bb5 Bdim Eb F
  F: "c4!2 eb4 c4 eb4 c4 eb4 [c4,eb4] [ab3,bb3] ~ bb3!2 ~ bb3 bb3@2, [g2,g3]@8 bb2@7 ~, [eb4,g4]@2 g4@5 ~ d4@4 ~@2 d4 ~, ~@8 f4@2 f4@2 ~ f4@3", // Cm Absus2 G Eb
  G: "a3 ~@2 g3 eb4 [g3,eb4] g3 [c4,eb4] [g3,eb4] [g3,c4] [c4,eb4] g3 eb4 [g3,eb4] [g3,c4] ~, ab2, c4@7 ~@9, [g3,eb4]@3 ~@13, ~ ab3@14 ~", // Cm C5 Cm C5 Cm
  H: "f3@2 d4 f3 d4 [f3,d4] ~ d4@2 ~@4 [c3,c4,c5] [d3,d4,d5] [eb3,eb4,eb5], [bb2,bb3]@9 ~@7, d4 ~@5 f3@3 ~@7", // Dm C D Eb Bb
  I: "[[f3,f4,f5] ~ [f3,f4,f5] ~ [eb3,eb4,eb5] ~ [eb3,eb4,eb5] ~ [d3,d4,d5] ~ [d3,d4,d5] ~ [c3,c4,c5]!2 [d3,d4,d5] [eb3,eb4,eb5] [f3,f4,f5] ~ [f3,f4,f5] ~ [eb3,eb4,eb5] ~ [eb3,eb4,eb5] ~ [d3,d4,d5] ~ [d3,d4,d5]@2 [c3,c4,c5] [d3,d4,d5] [eb3,eb4,eb5] [f3,f4,f5], c2@31 ~]/2", // F Eb D C D Eb F Eb …
  J: "[[g3,g4,g5] ~ [g3,g4,g5] ~ [f3,f4,f5] ~ [f3,f4,f5] ~ [eb3,eb4,eb5] ~ [eb3,eb4,eb5] ~ [d3,d4,d5]!2 [eb3,eb4,eb5] [f3,f4,f5] [g3,g4,g5] ~ [g3,g4,g5] ~ [f3,f4,f5] ~ [f3,f4,f5] ~ [eb3,eb4,eb5] ~@7, g1]/2", // G F Eb D Eb F G F …
  K: "[~@10 bb6 ~ bb6 ~ bb6@4 ab6 ~ g6 ~ g6@4 bb6 ~ bb6 ~ bb6@4 ab6@2 g6 ~ g6@3 ~ bb6 ~ bb6@2 c7@4 bb6 ~ ab6@2 c7@4 bb6 ~ ab6 ~ bb6@7 ~@11]/5",
  L: "[~@10 bb6 ~ bb6 ~ bb6@4 ab6 ~ g6 ~ g6@4 bb6 ~ bb6 ~ bb6@4 ab6@2 g6 ~ g6@3 ~ bb6 ~ bb6@2 c7@4 bb6 ~ ab6@2 c7@4 bb6 ~ ab6 ~ bb6@7 ~@8 [c3,c4] [d3,d4] [eb3,eb4]]/5", // C D Eb
  M: "[f3,f4] ~ [f3,f4,f5] ~ [eb3,eb4,eb5] ~ [eb3,eb4,eb5] ~ [d3,d4,d5] ~ [d3,d4,d5]@2 [c3,c4,c5]!2 [d3,d4,d5] [eb3,eb4,eb5]", // F Eb D C D Eb
  N: "[f3,f4,f5] ~ [f3,f4,f5] ~ [eb3,eb4,eb5] ~ [eb3,eb4,eb5] ~ [d3,d4,d5] ~ [d3,d4,d5]@2 [c3,c4,c5] [d3,d4,d5] [eb3,eb4,eb5] [f3,f4,f5]", // F Eb D C D Eb F
  O: "[g3,g4,g5] ~ [g3,g4,g5] ~ [f3,f4,f5] ~ [f3,f4,f5]@2 [eb3,eb4,eb5] ~ [eb3,eb4,eb5]@2 [d3,d4,d5]!2 [eb3,eb4,eb5] [f3,f4,f5]", // G F Eb D Eb F
  P: "[g3,g4,g5] ~ [g3,g4,g5]@2 [f3,f4,g4,f5,g5] ~ [f3,f4,f5] ~ [eb3,eb4,eb5] ~ [eb4,eb5]@2 [d3,d4,d5] [c3,d3,c4,d4,c5] [d3,d4,d5] [eb3,eb4,eb5], ~@10 eb3 ~@5", // G Fsus2 F Eb D Csus2 D Eb
  Q: "[f3,f4,f5] ~ [f3,f4,f5]@2 [eb3,eb4,eb5] ~ [eb4,eb5]@2 [d3,d4,d5] ~ [d3,d4,d5]@2 [c3,c4,c5]!2 [d3,d4,d5] [eb3,eb4,eb5], ~@6 eb3 ~@9", // F Eb D C D Eb
  R: "[f3,f4,f5] ~ [f3,f4,f5]@2 [eb3,eb4,eb5] ~ [eb4,eb5]@2 [d3,d4,d5] ~ [d3,d4,d5]@2 [c3,c4,c5] [d3,d4,d5] [eb3,eb4,eb5] [f3,f4,f5], ~@6 eb3 ~@9", // F Eb D C D Eb F
  S: "[g3,g4,g5] ~ [g3,g4,g5]@2 [f3,f4,f5] ~ [f3,f4,f5]@2 [eb3,eb4,eb5] ~ [eb3,eb4,eb5]@2 [d3,d4,d5]!2 [eb3,eb4,eb5] [f3,f4,f5]", // G F Eb D Eb F
  T: "[g3,g4,g5] ~ [g3,g4,g5]@2 [f3,f4,f5] ~ [f3,f4,f5]@2 [eb3,eb4,eb5] ~ [eb3,eb4,eb5]@2 [d3,d4,d5] ~@3", // G F Eb D
  U: "[g3,g4,g5] ~ [g3,g4,g5]@2 [f3,f4,f5] ~ [f3,f4,f5]@2 [eb3,eb4,eb5] ~ [eb3,eb4,eb5]@2 [c3,d3,c4,d4,c5,d5] ~ [bb2,bb3,bb4] ~", // G F Eb Csus2 Bb
  V: "[c3,c4] ~@7, c5 ~@15", // C
})).s("gm_string_ensemble_1").gain(0.5).pan(0.3)

// other · piccolo
const piccolo = note("<~@46 A B ~@57 C D E F G H I J ~>".pickRestart({
  A: "~@13 c6 d6 eb6", B: "f6 ~ f6 ~ eb6 ~ eb6 ~ d6 c6 [f5,g5,a5,b5] [b4,c5,d5,e5] [f4,g4,a4] ~@3",
  C: "~@7 [g4,a4,d5] g5 ab5 [g5,ab5]!2 g5 [g5,ab5] ~@2", D: "~@6 g4 d5 g5 ab5 [g5,ab5] g5 [g5,ab5] ~@3",
  E: "~@6 g4 d5 [g5,ab5] g5 ab5 [g5,ab5] g5 ~@3", F: "~@6 g4 d5 g5 [g5,ab5] ab5 [g5,ab5] g5 ab5 ~@2",
  G: "~@6 g4 c5 ab5 [g5,ab5] g5 [g5,ab5] ab5 g5 ~@2", H: "~@6 g4 c5 [g5,ab5] g5 ab5 [g5,ab5] g5 ab5 ~@2",
  I: "~@6 g4 d5 [g5,ab5] g5 ab5 [g5,ab5] ~ ab5 ~@2, ~@6 g5 ~", J: "~@6 [g4,a4] d5 [g5,ab5] ab5 g5 ab5 c6 ~ bb5 ~",
})).s("gm_piccolo").gain(0.4).pan(0.8)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@13 A@2 ~@2 A@2 ~@2 B C D@5 E@2 F G H@3 I@2 J K L H@3 I@2 J K ~@8 A@2 ~@2 A@2 ~@2 B C D@5 E@2 F G H@3 I@2 J K L H@3
  I@2 J K L H@3 I@2 J K L H@3 I@2 J K ~@9
>`.pickRestart({
  A: "[eb4@31 ~]/2", B: "[f3,ab3], c4@7 ~", C: "[f3,bb3,d4]@15 ~",
  D: "[bb3 ~@2 [bb3,d4] [ab3,c4], eb4@27 ~@5 f3@48, ~@16 c4@31 ~@33]/5", E: "[f3,bb3]/2", F: "[f3,bb3]",
  G: "~ eb5 d5 eb5, [eb3,g3]", // Eb
  H: "[bb4@3 ~ eb5@3 ~ d5@3 ~ eb5 ~@7 eb5@3 ~ d5@3 ~ eb5@2 ~@6 eb5@3 ~ d5@3 ~ eb5@3 ~, [f3,ab3,c4] [g3,bb3,d4] [ab3,c4,eb4], ~@14 bb4@5 ~@11 c5@5 ~@13]/3", // Fm Gm Ab
  I: "[[eb3,g3]@7 ~ [bb3,d4]@8, ~@15 g3@16 ~]/2", J: "[f3,ab3,c4]", K: "[f3,bb3,d4]", L: "~ eb5 d5 eb5, [eb3,g3,bb3]",
})).s("gm_synth_strings_1").gain(0.35).pan(0.4)

// chords · synth strings 1 · soft notes
const synth_strings_1_soft = note(`<
  ~@13 A@2 B@2 A@2 C@2 ~@2 D@3 ~@9 E ~@7 E ~@11 A@2 F@2 A@2 C@2 ~@2 D@3 ~@9 E ~@7 E ~@7 E ~@7 E ~@12
>`.pickRestart({
  A: "[c4, g4@15 ~]/2", B: "[~@16 [c6,eb6,g6]@13 ~@3, [bb3,d4,f4]@31 ~]/2", C: "[[bb3,d4,f4]@31 ~]/2",
  D: "[~@27 eb4@4 ab3@17, g3@31 ~@17]/3", E: "~ bb3@14 ~", F: "[~@16 [c6,g6]@13 ~@3, [bb3,d4,f4]@31 ~]/2",
})).s("gm_synth_strings_1").gain(0.15).pan(0.4)

// other · orchestra hit · F Bb Eb F Bb Eb
const orchestra_hit = note(`<
  ~@29
  [~@14 [f3,f4,f5,f6] ~]
  [[bb3,bb4,bb5,bb6] ~@5 [bb3,bb4,bb5,bb6] ~ [bb3,bb4,bb5,bb6] ~ [bb3,bb4,bb5,bb6] ~ [bb3,bb4,bb5,bb6] ~ [eb5,eb6,eb7] ~, ~@7 eb4]
  ~@40
  [~@14 [f3,f4,f5,f6] ~]
  [[bb3,bb4,bb5,bb6] ~@5 [bb3,bb4,bb5,bb6] ~ [bb3,bb4,bb5,bb6] ~ [bb3,bb4,bb5,bb6] ~ [bb3,bb4,bb5,bb6] ~ [eb5,eb6,eb7] ~, ~@7 eb4]
  ~@41
>`).s("gm_orchestra_hit").gain(0.4).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@9 [x!4]!103 [x ~ x ~ x ~ x!2] x>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@30 A B@3 C B@3 D B@3 C B@3 D ~@26 B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D ~@9
>`.pickRestart({
  A: "~@10 x!3 ~ x!2", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~ x ~@2 x ~@2 x!2 ~ x ~@3 x!2",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@54 [~@3 x] ~@57 [~@3 x] ~>").gain(0.4)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@13 A@11 ~ B ~ A ~@3 C@7 D C@7 D E C@7 A@11 ~ B ~ A ~@3 C@7 D C@7 D C@7 D C@7 D E C@7 ~
>`.pickRestart({
  A: "~@7 x", B: "x ~@6 x", C: "~ x ~ x ~ x ~ x", D: "~@2 x ~@3 x!2 ~@2 x ~@3 x ~", E: "~ x ~@3 x ~ x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A B@4 ~@16 C D ~@15 A E@2 B@3 E B E ~@16 C D ~@15 A F ~@14 A E@2 B@3 E B G F
>`.pickRestart({
  A: "~@13 x!3", B: "x ~@12 x!3", C: "~@7 x", D: "x ~@2 x!5", E: "x ~@13 x!2", F: "x", G: "x ~@11 x ~ x!2",
})).gain(0.4)

stack(
  timpani, bass, string_ensemble_1, piccolo, synth_strings_1, synth_strings_1_soft, orchestra_hit, kick, snare, low_tom,
  hihat, open_hat, crash
)

More by Blue System