Strudelify

Blue

Eiffel 65

KeyG minorTempo129 bpm
0:00/0:00
// Blue — Eiffel 65
// 129 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 synth strings 2 (copy of ch 16 "04EIFF~1" piano)
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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 · "04EIFF~1"
const piano = note(`<
  ~@10 A B A C A B D E ~@9 A B A C A B D C A B A C A B D F@2 ~@17 A B A C A B D C A B A C A B D C A B A C A B D C A B A
  C A B D C A B A C A B D C A B A C A B D G@3
>`.pickRestart({
  A: "[d4,g4,bb4] [f4,a4,c5]", B: "[g4,bb4,d5] [g4,c5,eb5]", C: "[eb4,g4,bb4]", D: "[d4,g4,bb4] [c4,f4,a4]",
  E: "[eb4,g4,bb4] ~@7", F: "[[eb4,g4,bb4]@3 ~, d6 ~]/2", G: "[[eb4,g4,bb4]@3 ~]/3",
})).s("gm_piano").gain(0.05)

// bass · electric bass finger
const bass = note(`<
  ~@19 A@8 B C B C B C D E B C B C B C D E@3 F G H G H G H G H G H G H G H ~ B C B C B C D E B C B C B C D E B C B C B C
  D E B C B C B C D E B C B C B C D E B C B C B C D E I ~
>`.pickRestart({
  A: "g0 ~ g1@2 g0 ~ g1@2 g0 ~ g1@2 g0 ~ g1@2", B: "g0 ~ g1@2 g0 ~ g1@2 f0 ~ f1@2 f0 ~ f1@2",
  C: "eb0 ~ eb1@2 eb0 ~ eb1@2 c1 ~ c2@2 c1 ~ c2@2", D: "g0 ~ g1@2 g0 ~ g1@2 a0 ~ a1@2 a0 ~ a1@2",
  E: "eb0 ~ eb1@2 eb0 ~ eb1@2 eb0 ~ eb1@2 eb0 ~ eb1@2", F: "eb0 ~ eb1@2 eb0 ~ eb1@2 f0 ~ f1@2 f0 ~ f1@2",
  G: "a0 ~ a1@2 a0 ~ a1@2 bb0 ~ bb1@2 bb2@2 bb1@2", H: "d0 ~ d1@2 d0 ~ d1@2 f0 ~ f1@2 f0 ~ f1@2", I: "eb0 ~@15",
})).s("gm_electric_bass_finger").gain(0.63).pan(0.4)

// chords · piano
const piano_2 = note("<~@2 A@8 B@6 C@3 ~@8 D@16 ~@10 E@6 F@2 G@8 D@16 G@8 D@16 ~@2>".pickRestart({
  A: "[bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 a4 c4 f4 g4@2 eb4 f4 g4@2 f4 g4 a4, [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 [c2,c3]@5 ~@11 [c2,c3]@5 ~@11 [c2,c3]@5 ~@15, ~@16 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@9]/8", // G F Eb C G F Eb G …
  B: "[bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5, [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 [c2,c3]@5 ~@11 [c2,c3]@5 ~@11 [c2,c3]@4, ~@16 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4]/6", // G F Eb C G F Eb G …
  C: "[bb4@2 d4@2 g4@2 bb4@2 a4@2 c4@2 f4@2 [eb2,eb3,g4]@33 ~, [g2,g3]@4 [f2,f3]@3 ~@17]/3", // Eb G F
  D: "[bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 a4 c4 f4 [eb2,eb3,g4]@9, [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 [c2,c3]@5 ~@11 [c2,c3]@5 ~@11 [c2,c3]@5 ~@15, ~@16 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4 [g2,g3]@4 [f2,f3]@3 ~@9]/8", // Eb G F Eb C G F Eb …
  E: "[[d4,f4,a4]@27 ~ [d4,f4,bb4]@4]/2", F: "[[d4,f4,a4]@27 ~@5]/2",
  G: "[bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 c5 f4 a4 bb4@2 g4 bb4 d5 eb5 g4 d5 c5 bb4 d4 g4 bb4 a4 c4 f4 g4@7 a4@2, [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 [c2,c3]@5 ~@11 [c2,c3]@5 ~@11 [c2,c3]@5 ~@15, ~@16 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@5 ~@4 [g2,g3]@4 [f2,f3]@3 [eb2,eb3]@9]/8", // G F Eb C G F Eb G …
})).s("gm_piano").gain(0.55).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note("<~@69 A@2 B C A@2 B D ~@16 A@2 B C A@2 B D A@2 B C A@2 B D ~@2>".pickRestart({
  A: "[[d6,d7]@3 [eb6,eb7]]/2", B: "[d6,d7] [c6,c7]", C: "[bb5,bb6]", D: "[d6,d7]",
})).s("gm_string_ensemble_1").gain(0.21).pan(0.8)

// bass · lead 1 square
const bass_2 = note(`<
  ~ A B C B C B C B D B C B C B C B D ~@9 B C B C B C B D B C B C B C B D ~@18 B C B C B C B D B C B C B C B D ~@8 B C B
  C B C B D B C B C B C B D B C B C B C B D ~@2
>`.pickRestart({
  A: "g0", B: "g2 f2", C: "eb2 c2", D: "eb2",
})).s("gm_lead_1_square").gain(0.37).pan(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@35 A B A B A B C ~@59 A B A B A B C D E ~>".pickRestart({
  A: "bb3 d3 g3 bb3 c4 f3 a3 bb3", B: "~ g3 bb3 d4 eb4 g3 d4 c4", C: "bb3 d3 g3 bb3 a3 c3 f3 g3",
  D: "~ g3 ~ g3 ~ g3 ~ g3", E: "~ g3 ~ g3 ~@4",
})).s("gm_lead_2_sawtooth").gain(0.29).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@2 A ~@16 B@7 C B@17 D B@6 C B@8 A B@16 A ~@7 B@16 A ~@7 A ~>".pickRestart({
  A: "x", B: "x!4", C: "x!2 ~@2", D: "x ~@3 x ~@3 x ~ x ~ x!2 ~ x",
})).gain(0.74)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@10 [x!4]!7 x ~@93>").gain(0.37)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@110>").gain(0.22)

// drums · snare
const snare = s("sd").struct("<~@26 A B@17 C B@15 A B@16 ~@8 B@16 ~@10>".pickRestart({
  A: "~@11 x!2 ~ x ~", B: "~ x ~ x", C: "~@4 x ~@5 x ~ x!2 ~ x",
})).gain(0.59)

// drums · clap
const clap = s("cp").struct("<~@43 [~ x ~ x] [~@4 x ~@5 x ~ x!2 ~ x] ~@66>").gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<~@27 A@16 ~@2 A@6 B A@8 C A@16 C ~@7 A@16 C ~@9>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x",
})).gain(0.59)

// drums · open hat
const open_hat = s("oh").struct("<~@27 A@16 ~@2 A@6 B A@8 ~ A@16 ~@8 A@16 ~@10>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.59)

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

// drums · shaker
const shaker = s("sh").struct("<~@10 A@7 ~@10 B@16 ~@2 B@6 C B@8 D B@16 ~@8 B@16 ~@10>".pickRestart({
  A: "~@2 x ~@3 x ~@3 x ~@2 x!2 ~", B: "x!16", C: "x!9 ~@7", D: "x",
})).gain(0.37)

// drums · lt
const lt = s("lt").struct("<~@2 x ~@14 x ~@91 x ~>").gain(0.74)

stack(
  piano, bass, piano_2, string_ensemble_1, bass_2, lead_2_sawtooth, kick, kick_soft, rim, snare, clap, hihat, open_hat,
  crash, shaker, lt
)

More by Eiffel 65