Strudelify

Eternity

Trance

KeyF♯ majorTempo150 bpm
0:00/0:00
// Eternity — Trance
// 150 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// bass · synth bass 1
const bass = note(`<
  ~@8 A@2 B@4 A@4 B@4 A@2 ~@8 A@2 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@2 ~@8 A@2 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4
  A@2 ~@9
>`.pickRestart({
  A: "f#1 f#2 f#1 f#2 f#1 f#2 f#1 f#2", B: "e1 e2 e1 e2 e1 e2 e1 e2",
})).s("gm_synth_bass_1").gain(0.66)

// chords · pad halo
const pad_halo = note(`<
  A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@2 D@2 E@2 F@2 D@2 A@2 B@2 C@2
  A@4 B@2 C@2 A@4 B@2 C@2 A@2 D@2 E@2 F@2 D@2 A@2 B@2 C@2 A@4 B@2 C@2 A@2 D@2 E@2 F@2 D@2 A@2 B@2 C@2 A@2 ~
>`.pickRestart({
  A: "[a#3,f#4]!3 ~ [a#3,f#4]!3 ~ [a#3,f#4]!3 ~ [a#3,f#4]!3 ~", // D#m
  B: "[c#4,g#4]!3 ~ [c#4,g#4]!3 ~ [c#4,g#4]!3 ~ [c#4,g#4]!3 ~", C: "[e4,b4]!3 ~ [e4,b4]!3 ~ [e4,b4]!3 ~ [e4,b4]!3 ~",
  D: "[a#3,c#4,f#4]!3 ~ [a#3,c#4,f#4]!3 ~ [a#3,c#4,f#4]!3 ~ [a#3,c#4,f#4]!3 ~", // F#
  E: "[c#4,e4,g#4]!3 ~ [c#4,e4,g#4]!3 ~ [c#4,e4,g#4]!3 ~ [c#4,e4,g#4]!3 ~", // C#m
  F: "[e4,g#4,b4]!3 ~ [e4,g#4,b4]!3 ~ [e4,g#4,b4]!3 ~ [e4,g#4,b4]!3 ~", // E
})).s("gm_pad_halo").gain(0.24)

// chords · synth brass 1
const synth_brass_1 = note("<A B C@4 B@4 C@4 B@4 C@4 B@2 D ~@71 A B C@4 B@4 C@4 B@4 C@4 B@4 C@4 B@2 D>".pickRestart({
  A: "a#4 ~ a#4 ~ [f#4,a#4] ~ f#4 ~ [f#4,a#4] ~ a#4 ~ [a#4,b4] ~ b4 ~", // F# Bmaj7
  B: "[a#4,b4] ~ a#4 ~ [f#4,a#4] ~ f#4 ~ [f#4,a#4] ~ a#4 ~ [a#4,b4] ~ b4 ~", // Bmaj7 F# Bmaj7
  C: "[g#4,b4] ~ g#4 ~ [e4,g#4] ~ e4 ~ [e4,g#4] ~ g#4 ~ [g#4,b4] ~ b4 ~", D: "b4 ~@15",
})).s("gm_synth_brass_1").gain(0.36).pan(0.4)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  A B C D E@2 F@2 ~@8 G H I J K@2 L@2 ~@16 G H I J K@2 L@2 G H I J K@2 L@2 G H I J K@2 M@2 ~@16 G H I J K@2 L@2 G H I J
  K@2 M@2 ~@16 G H I J K@2 M@2 G H I J K@2 M@2 ~
>`.pickRestart({
  A: "f#3", B: "c#3 f#3", C: "g#3", D: "c#3 g#3", E: "[b3@3 a#3]/2", F: "f#3/2", G: "[f#3,f#4]",
  H: "[c#3,c#4] [f#3,f#4]", I: "[g#3,g#4]", J: "[c#3,c#4] [g#3,g#4]", K: "[b3,b4]/2", L: "[f#3,f#4]/2",
  M: "[f#3,c#5]/2", // F#5
})).s("gm_string_ensemble_2").gain(0.25).pan(0.6)

// other · epiano1
const epiano1 = note(`<
  ~@15 A B C D E@2 F G ~@28 H@4 A B C D E@2 F G ~@20 H@4 A B C D E@2 F G ~@16 A B C D E@2 F G ~@4 H@4 ~@2
>`.pickRestart({
  A: "~@7 c#4", B: "f#4@4 f#4@2 f#4@7 ~ c#4@2", C: "f#4@3 ~ f#4@2 f#4@6 ~@2 f#4@2", D: "g#4@2 g#4 g#4@3 ~ e4",
  E: "g#4@4 g#4@2 g#4@7 ~ e4@2", F: "g#4!2", G: "f#4 ~",
  H: "[~@12 c#5@2 c#5@6 ~@8 c#5@2 c#5@5 ~ f#4@4 g#4@4 a#4@2 f#4@8 ~@10]/4",
})).s("gm_epiano1").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@26 A@21 B A@7 B A@7 B ~@2 A@5 B A@7 B A@7 B A@4 ~@4 A@7 B A@7 B A@7 B ~@9
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2",
})).gain(0.62)

// drums · snare
const snare = s("sd").struct("<~@40 [~ x ~ x]!24 ~@16 [~ x ~ x]!14 ~@18 [~ x ~ x]!8 ~@9>").gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@40 [~ x ~ x]!24 ~@16 [~ x ~ x]!14 ~@18 [~ x ~ x]!8 ~@9>").gain(0.21)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@40
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!24
  ~@16
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!14
  ~@18
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!8
  ~@9
>`).gain(0.28)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@104 [x!4]!8 ~@17>").gain(0.07)

// drums · open hat
const open_hat = s("oh").struct("<~@40 [~ x ~ x ~ x ~ x]!24 ~@16 [~ x ~ x ~ x ~ x]!14 ~@10 [~ x ~ x ~ x ~ x]!16 ~@9>")
  .gain(0.21)

// drums · tambourine
const tambourine = s("tb").struct("<~@56 [x!16]!8 ~@24 [x!16]!4 ~@20 [x!16]!8 ~@9>").gain(0.21)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@32 [~@3 x ~@3 x]!32 ~@8 [~@3 x ~@3 x]!22 ~@10 [~@3 x ~@3 x]!16 ~@9>").gain(1.4)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@32 [~ x ~@3 x ~@2]!32 ~@8 [~ x ~@3 x ~@2]!22 ~@10 [~ x ~@3 x ~@2]!16 ~@9>")
  .gain(0.7)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@32
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!32
  ~@8
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!22
  ~@10
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!16
  ~@9
>`).gain(0.14)

stack(
  bass, pad_halo, synth_brass_1, string_ensemble_2, epiano1, kick, snare, clap, hihat, hihat_soft, open_hat, tambourine,
  cabasa, cabasa_soft, shaker
)

More by Trance