Strudelify

Another Race

Eiffel 65

KeyE♭ majorTempo129 bpm
0:00/0:00
// Another Race — Eiffel 65
// 129 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 147 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.

// other · piano
const piano = note(`<
  ~@2 A B C D C E C D F@2 ~@35 A B G H G I G H J@2 G H G I G H K@2 ~@23 A B G H G I G H J@2 G H G I G H K@2 ~@15 A B G H
  G I G H J@2 G H G I G H K@2 ~@8
>`.pickRestart({
  A: "g3 bb3 d4 g4 bb3 d4 g4 bb4", B: "d4 g4 bb4 d5 g4 bb4 d5 g5", C: "ab2 ab3 ab2 ab3 bb2 bb3 bb2 bb3, eb5 c5 f5 d5",
  D: "c3 c4 [c3,c5] c4 g2 g3 [g2,c5] [g3,d5], eb5@2 ~ g4@3 ~@2", // C C5 G5
  E: "c3 c4 [c3,f5] c4 g2 g3 [g2,c5] [g3,d5], g5@2 ~ eb5@3 ~@2", // F5 C5 G5
  F: "[ab2 ab3 ab2 ab3 bb2 bb3 [bb2,bb4] bb3 c3 c4 [c3,bb4] c4 c3 [c4,bb4] [c3,c5] [c4,d5], eb5@2 c5@2 d5@2 ~ c5@3 ~ c5@2 ~@3]/2", // Bb C7 C Csus2
  G: "eb5 c5 f5 d5", H: "eb5@2 c5 g4@3 c5 d5", I: "g5@2 f5 eb5@3 c5 d5",
  J: "[eb5@2 c5@2 d5@2 bb4 c5@3 bb4 c5@2 bb4 c5 d5]/2", K: "[eb5@2 c5@2 d5@2 bb4 c5@3 c5 g4@2 ~@3]/2",
})).s("gm_piano").gain(0.64)

// bass · electric bass finger · "Europop"
const bass = note(`<
  ~@12 A B A B A B A C A B A B A B A C@7 D E C@2 D E C@2 D E C@2 D F ~ A B A B A B A C A B A B A B A C A B A B A B A C@3
  D E C@2 D E C@2 D E C@2 D F ~ A B A B A B A C A B A B A B A C A B A B A B A C G C H G I C G F ~ A B A B A B A C A B A
  B A B A C A B A B A B A J
>`.pickRestart({
  A: "ab0 ab1 ab0 ab1 bb0 bb1 bb0 bb1", B: "c1 c2 c1 c2 g0 g1 g0 g1", C: "c1 c2 c1 c2 c1 c2 c1 c2",
  D: "eb1 eb2 eb1 eb2 eb1 eb2 eb1 eb2", E: "f1 f2 f1 f2 f1 f2 f1 f2", F: "g0 g1 g0 g1 g0 g1 g0 g1",
  G: "ab0 ab1 ab0 ab1 ab0 ab1 ab0 ab1", H: "f0 f1 f0 f1 f0 f1 f0 f1", I: "bb0 bb1 bb0 bb1 bb0 bb1 bb0 bb1",
  J: "c1 c2 c1 c2 ~@4",
})).s("gm_electric_bass_finger").gain(0.8).pan(0.4)

// bass · lead 1 square
const bass_2 = note(`<
  ~@12 A B A B A B A C A B A B A B A C ~@19 D ~ A B A B A B A C A B A B A B A C A B A B A B A C ~@15 D ~ A B A B A B A C
  A B A B A B A C A B A B A B A C E C F E G C E H@2 A B A B A B A C A B A B A B A C A B A B A B A I
>`.pickRestart({
  A: "ab1 bb1", B: "c2 g1", C: "c2", D: "bb1 ~", E: "ab1", F: "f1", G: "bb1", H: "g1/2", I: "c2 ~",
})).s("gm_lead_1_square").gain(0.4).pan(0.6)

// other · lead 4 chiff · "Daniel J. Hill"
const lead_4_chiff = note("<~@28 A@19 B C ~@24 A@15 B C ~@31 B C ~@24>".pickRestart({
  A: "c4@2 bb4@2 f5@2 f5@4 ~@2 eb5@2 c5 ~", B: "g3 bb3 d4 g4 bb3 d4 g4 bb4", C: "d4 g4 bb4 d5 g4 bb4 d5 g5",
})).s("gm_lead_4_chiff").gain(0.32).pan(0.4)

// other · string ensemble 1
const string_ensemble_1 = note("<~@57 A B C D A B C D ~@33 A B C D A B C D ~@25 A B C D A B C D ~@8>".pickRestart({
  A: "c6 d6", B: "eb6", C: "eb6 f6", D: "g6",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.6)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@114 A B C D E B A F ~@25>".pickRestart({
  A: "[c5,eb5,ab5]", B: "[c5,eb5,g5]", C: "[ab4,c5,f5]", D: "[ab4,c5,eb5]", E: "[bb4,d5,f5]", F: "[bb4,d5,g5]",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.6)

// other · pad sweep
const pad_sweep = note("<A@2 ~@145>".pickRestart({
  A: "d6/2",
})).s("gm_pad_sweep").gain(0.64)

// drums · rim
const rim = s("rim").struct("<~@12 x ~@134>").gain(0.64).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@12 A@35 ~@2 A@24 ~@4 A@11 ~@2 A@32 ~ A@16 ~@8>".pickRestart({
  A: "x!4",
})).gain(0.64).pan(0.4)

// drums · snare
const snare = s("sd").struct("<~@20 A@8 ~@12 A@7 ~@2 A@24 ~@4 A@11 ~@2 A@24 ~@9 A@16 ~@8>".pickRestart({
  A: "~ x ~ x",
})).gain(0.64).pan(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@20 A@12 ~@8 A@7 ~@2 A@24 ~@2 A@13 ~@2 A@24 ~@9 A@20 ~@4>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.64).pan(0.4)

// drums · splash
const splash = s("cr").struct(`<
  ~@12 A ~@7 A ~@11 A ~@7 A ~@8 A ~@7 A ~@7 A ~@11 A ~@12 A ~@7 A ~@7 A ~@16 A ~@7 A ~@7 A ~@3 A ~@2 B
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.64).pan(0.4)

stack(
  piano, bass, bass_2, lead_4_chiff, string_ensemble_1, string_ensemble_1_soft, pad_sweep, rim, kick, snare, open_hat,
  splash
)

More by Eiffel 65