Strudelify
Ad est, ad est cover art

1993 · Contro

Ad est, ad est

Nomadi

KeyG majorTempo130 bpm
0:00/0:00
// Ad est, ad est — Nomadi
// 130 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 14 overdriven guitar (copy of ch 12 overdriven guitar)
// note: Full arrangement: all 161 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@32 B C D E B C D E B C D E B C D E ~@8 A@32 B C D E B C D E B C D E B C D E ~@8 B C D E B C D E B C D E B C D E
  ~@32
>`.pickRestart({
  A: "[~ [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]]/8", // Dm Em Dm Em
  B: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // G
  C: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@2 [b3,d4,g4] ~ [b3,d4]", // G Bm
  D: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Am
  E: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@2 [c4,e4,a4] ~ [c4,e4]", // Am C
})).s("gm_acoustic_guitar_steel").gain(0.08).pan(1)

// other · overdriven guitar
const overdriven_guitar = note("<~@49 A B@3 C D E F G ~@103>".pickRestart({
  A: "~ b4@3", B: "[~@2 c5@2 a4 ~ d5@6 c5@2 a4@4 e5 ~@2 e5 ~@2 e5@2 g5@2 e5 ~ g5@6 e5@2 a5@6 e5@2 c6@2]/3", C: "c6!16",
  D: "c6 b5 a5 b5 a5 g5 a5 g5 e5 g5 e5 d5 e5 d5 c5 d5", E: "c5 a4 c5 a4 g4 a4 g4 e4 g4 e4 d4 e4 d4 c4 d4 c4",
  F: "a3 c4 a3 g3 a3 g3 e3 g3 e3 d3 e3 d3 c3 d3 c3 a2", G: "d2 ~",
})).s("gm_overdriven_guitar").gain(0.14).pan(1)

// chords · harpsichord
const harpsichord = note(`<
  ~@49 A@2 B C A@2 B C ~@48 A@2 B C A@2 B C ~@16 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C
>`.pickRestart({
  A: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  B: "[g4,b4,d5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~", // G Am
  C: "[a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~", // Am
})).s("gm_harpsichord").gain(0.19)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D E F C D E F C D E F C D E F C D E F C D E F A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D E F C D E F C D E F C D E F C D E F C D E F C D E F C
  D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F ~@8
>`.pickRestart({
  A: "[a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3", // Dm
  B: "[b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3", // Em
  C: "[b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3", // G
  D: "[b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~ [b3,d4,g4] ~", // G
  E: "[c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3", // Am
  F: "[c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~ [c4,e4,a4] ~", // Am
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0.3)

// other · brass section
const brass_section = note(`<
  ~@33 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@3 ~@39 A@2 B@2 A@2 B@2 A@2 B@2 A@2 D@6 E@6 B@2 A@2 B@2 A@2 B@2 A@2 C@3 ~@31
>`.pickRestart({
  A: "[~@6 [b4,b5] ~ [b4,b5]@2 ~@2 [c5,c6] ~ [d5,d6]@16 ~@2]/2", // B C D
  B: "[~@6 [c5,c6] ~ [c5,c6] ~@3 [d5,d6] ~ [e5,e6]@18]/2", // C D E
  C: "[~@6 [c5,c6] ~ [c5,c6] ~@3 [d5,d6] ~ [e5,e6]@6 [e5,e6] ~ [e5,e6] ~ [e5,e6] ~ [e5,e6] ~ [c5,c6] ~ [e5,e6]@4 ~@14]/3", // C D E C E
  D: "[~@6 [c5,c6] ~ [c5,c6] ~@3 [d5,d6] ~ [e5,e6]@6 [e5,e6] ~ [e5,e6] ~ [e5,e6] ~ [e5,e6] ~ [c5,c6] ~ [e5,e6]@4 ~@12 g5@20 ~@12 a5@18, ~@34 g4@30 ~@2 a4@29 ~, ~@20 d5@13 ~@3 e5@12]/6", // C D E C E
  E: "[~@46 a6@20 ~@4 [b4,b5] ~ [b4,b5]@2 ~@2 [c5,c6] ~ [d5,d6]@16 ~@2, ~ b4@16 c5@16 ~@15, ~@4 g5@13 ~@3 a5@13 ~@15, ~@14 b5@25 ~@57]/6", // B C D
})).s("gm_brass_section").gain(0.06).pan(0)

// other · brass section
const brass_section_2 = note(`<
  ~@33 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D E F G H E I ~@33 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 J@2 K@2 L@4 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 C@2 D E F G H E I ~ D E F G H E I ~ D E F G H E I ~ D E F G H E I ~
>`.pickRestart({
  A: "[~@4 [b4,b5] ~ [b4,b5]@2 ~@2 [c5,c6] ~ [d5,d6]@16 ~@4]/2", // B C D
  B: "[~@4 [c5,c6] ~ [c5,c6] ~@3 [d5,d6] ~ [e5,e6]@18 ~@2]/2", // C D E
  C: "[~@4 [c5,c6] ~ [c5,c6] ~@3 [d5,d6] ~ [e5,e6]@6 [e5,e6] ~ [e5,e6] ~ [e5,e6] ~ [e5,e6] ~ [c5,c6] ~ [e5,e6]@4]/2", // C D E C E
  D: "[d5,d6]", E: "~@10 d5 ~ d5@2 ~@2", F: "d5@2 e5@3 ~@11", G: "~@10 e5 ~ e5@2 ~@2", H: "e5@2 d5@3 ~@11",
  I: "d5 e5 ~@6", J: "[~@3 g5@5, g4@15 ~, ~@3 d5@13]/2", K: "[~@3 a5@5, a4@29 ~@3, ~@3 e5@13]/2",
  L: "[~@11 a6@5, b4 c5, ~@3 g5@13 ~@3 a5@13, ~@12 b5@25 ~@27]/4",
})).s("gm_brass_section").gain(0.17).pan(1)

// other · piccolo
const piccolo = note("<~@2 A@2 B ~ C D E ~@48 F G@5 H I J ~@62 K L M N O@5 P Q@2 R S T@8 U V ~@9>".pickRestart({
  A: "[~@14 g4@8 a4@8 e4 d4]/2", B: "e4", C: "~@14 e4 f4", D: "e4@3 g4 g4@3 a4", E: "e4 d4 e4@13 ~",
  F: "~@8 f4 e4 d4@2 e4@2 g4@2",
  G: "[a4@8 c5 b4 g4@12 ~@2 b4 g4 a4 e4@12 ~ a4 b4 c5 ~ e5 ~ f5@7 ~ e5 f5 e5 d5 a5@3 g5@2 e5@6 ~ g5 ~ a5 g5 e5 c5@4 c#5, ~@69 a5@2 d5@2 ~@7]/5",
  H: "d5@3 e5@5, ~@6 d#5 ~@9", I: "g5@2 e5@2 d#5 d5 c5@4 a4@2 c5 a4 g4@2, f#5 ~@15", J: "d4@3 ~",
  K: "~@13 [d5,g5] b5 c6", L: "b5@9 g5 d5 c5 b4 c5 b4 c5", M: "b4 c5 b4 c5 b4@4 ~@2 g4@2 d4 e4 g4 a4",
  N: "b4 g4 a4@13 ~",
  O: "[~@6 a4@2 c5@2 d5 ~ e5 ~ a5@4 g5@10 ~@2 b5@4 g5@4 e5@6 d5@2 c5@6 a4 c5 a4 ~ c5 d5 d#5 ~ e5@3 g5@2 e5 g5 g#5 a5 b5 ~ d6@2 b5 d6 ~ d6 c6 ~@2]/5",
  P: "~ e6@6 d6 ~ b5 d6@2 b5 a5@3", Q: "[~ g5@5 e5 g5@2 e5 g5 a5@3 g5 e5@3 g5 e5@2 d5 e5 d5 c5 a4 c5 d5@2 e5@2 d5]/2",
  R: "e5 d5 c5 d5@2 a4 c5@2 g4 a4@2 e4 g4@2 e4@2, ~@9 b4 ~@6", S: "~ e4 g4 a4@2 ~@4 b4@2 c5 ~ d5 ~@2",
  T: "[~@2 b4 c5 d5 e5 g5@17 e5@2 g5 e5 d5 e5 d5 c5 a4@2 c5 a4 g4 a4 g4 e4 g4 a4 b4 c5 d5 e5 f5 g5 a5@16 c6@2 a5 c6 d6@4 c6@2 a5 c6 d6 d6@2 c6 a5@3 a6@4 g6 e6 g6 e6@2 d6@3 c6 d6@2 c6 a5@2 c6 a5 d6@4 c6 a5 d6@2 c6 a5@4 g5 ~ a5 ~ a5 ~ g5 a5 a5@2 g5 e5 ~]/8",
  U: "a5@2 g5 e5 g5@2 e5@2 d5@2 c5 ~ d5 c5 a4 g4", V: "a4@11 ~@5",
})).s("gm_piccolo").gain(0.43)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@24 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2
  A@2 B@2 C@2 D@2 E@68 F@4
>`.pickRestart({
  A: "[~ f4@3, [d2,d3], ~ d4@7]/2", B: "[[e2,e3,g4], d2 ~@31]/2", C: "[~ f4@3, d3, d2@15 ~, ~ d4@7]/2",
  D: "[e2,e3,g4]/2", E: "[[g2,g4,d5] [a2,a4,e5], b4]/4", F: "[[g2,g4,d5] [a2,a4,e5], b4@63 ~]/4",
})).s("gm_string_ensemble_2").gain(0.07)

// bass · synth bass 2
const bass = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E F G H E F G H E F G H E F G H E F G H E F G I A@2
  B@2 C@2 D@2 A@2 J@2 C@2 D@2 A@2 J@2 C@2 D@2 A@2 J@2 C@2 D@2 E F G H E F G H E F G H E F G H E F G H E F G I E F G H E
  F G H E F G H E F G H E F G H E F G I E F G H E F G I E F G H E F G I E F G H E F G K
>`.pickRestart({
  A: "[d2@5 ~ d2 ~ d3 ~ d3@2 d2 ~ d2@6 ~@2 d2 ~ d3 ~ d3@2 d2@2 d#2@2]/2",
  B: "[e2@5 ~ e2@2 e3 ~ e3@2 e2 ~ e2@7 ~ e2@2 e3 ~ e3@2 e2@2 d#2@2]/2",
  C: "[d2@5 ~ d2@2 d3 ~ d3@2 d2 ~ d2@7 ~ d2@2 d3 ~ d3@2 d2@2 d#2@2]/2",
  D: "[e2@4 ~@2 e2@2 e3 ~ e3@2 e2 ~ e2@6 ~@2 e2@2 e3 ~ e3@2 e2 ~ d#2@2]/2", E: "g1@5 ~ g1 ~ g1@7 ~",
  F: "g1@5 ~ g1 ~ g1@3 ~ e1@2 g1@2", G: "a1@5 ~ a1 ~ a1@7 ~", H: "a1@5 ~ a1 ~ a1@2 e1@2 a1@2 g#1@2",
  I: "a1@5 ~ a1 ~ a1@2 a1@2 e2@2 d#2@2", J: "[e2@5 ~ e2@2 e3 ~ e3@2 e2 ~ e2@7 ~ e2 ~ e3 ~ e3@2 e2@2 d#2@2]/2",
  K: "a1@5 ~ a1 ~ a1@2 a1@2 ~@4",
})).s("gm_synth_bass_2").gain(0.37)

// bass · piano
const bass_2 = note(`<
  A B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 ~@23 A B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2
  C@2 B@2 C@2 B@2 C@2 ~@72
>`.pickRestart({
  A: "~@6 e2 d#2", B: "[d2@13 ~ d2 d#2]/2", C: "[e2@13 ~ e2 d#2]/2",
})).s("gm_piano").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~ A@55 B A@55 B A@23 B A@7 B A@7 B A@7 B>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~ A@7 B A@23 B A@15 B A@15 B A@23 B A@15 B A@23 B A@32>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x ~ x!2",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~ A@32 B@15 C B@8 A@32 B@15 C B@23 C B@32>".pickRestart({
  A: "x!8", B: "x ~ x!2 ~@2 x!2 ~@2 x!4 ~@2", C: "x ~ x!2 ~@2 x!2 ~@3 x ~ x ~@2",
})).gain(0.32)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@33 [~ x ~@2 x!2 ~@2 x!2 ~@6]!24 ~@32 [~ x ~@2 x!2 ~@2 x!2 ~@6]!72>").gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<~@33 [~@7 x]!24 ~@32 [~@7 x]!72>").gain(0.48)

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

// drums · cowbell
const cowbell = s("cb").struct("<~@49 [x!4]!8 ~@48 [x!4]!8 ~@16 [x!4]!32>").gain(0.48)

stack(
  acoustic_guitar_steel, overdriven_guitar, harpsichord, acoustic_guitar_steel_2, brass_section, brass_section_2,
  piccolo, string_ensemble_2, bass, bass_2, kick, snare, hihat, hihat_soft, open_hat, crash, cowbell
)

More by Nomadi