Strudelify

Sadness

Enigma

KeyA minorTempo100 bpm
0:00/0:00
// Sadness — Enigma
// 100 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "MONKS" synth choir (copy of ch 3 "MONKS" choir aahs); ch 11 "Pan Flute" blown bottle (copy of ch 12 "Suspense" shakuhachi); ch 14 "Distortion Guitar" distortion guitar (copy of ch 13 "Overdriven Guitar" overdriven guitar)
// 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(100/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 · synth strings 1 · "Strings"
const synth_strings_1 = note("<~@63 A@8 ~@40>".pickRestart({
  A: "[c3,e3,a3]/8", // Am
})).s("gm_synth_strings_1").gain(0.36)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@14 A@2 B@2 A@2 B@2 A@5 C@2 B@2 A@2 B@2 A@4 D@2 A@6 B@2 A@2 E B A@2 E ~ A@17 ~ F G@3 H I J G@5 K L M G N O M G N P F
  G N O M G N P Q ~@5
>`.pickRestart({
  A: "a1 ~@2 a1 ~@2 a1 ~@3 a1 ~@5", B: "g1 ~@2 g1 ~@2 g1 ~@3 g1 ~@5", C: "d2 ~@2 d2 ~@2 d2 ~@3 d2 ~@5",
  D: "e2 ~@2 e2 ~@2 e2 ~@3 e2 ~@5", E: "f1 ~@2 f1 ~@2 f1 ~@3 f1 ~@5", F: "~@8 a1 ~@2 a1 ~@2 a1 ~",
  G: "~@2 a1 ~@5 a1 ~@2 a1 ~@2 a1 ~", H: "~@2 a1 ~@5 e2 ~@2 e2 ~@2 e2 ~", I: "~@2 e2 ~@5 e2 ~@2 e2 ~@2 e2 ~",
  J: "~@2 e2 ~@5 a1 ~@2 a1 ~@2 a1 ~", K: "~@2 a1 ~@5 g1 ~@2 g1 ~@2 g1 ~", L: "~@2 g1 ~@5 g1 ~@2 g1 ~@2 g1 ~",
  M: "~@2 g1 ~@5 a1 ~@2 a1 ~@2 a1 ~", N: "~@2 a1 ~@5 f1 ~@2 f1 ~@2 f1 ~", O: "~@2 f1 ~@5 g1 ~@2 g1 ~@2 g1 ~",
  P: "~@2 f1 ~@13", Q: "~@8 a1 ~@7",
})).s("gm_fretless_bass").gain(0.4)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note(`<
  ~@14 A@2 B@2 A@2 B@2 C@5 D@2 E@2 A@2 B@2 F@4 G@2 A@2 F@4 B@2 A@2 H I J@3 I A@2 ~@16 K@8 L@8 M@8 N@6 O@6
>`.pickRestart({
  A: "[c3,e3,a3]/2", B: "[b2,d3,g3]/2", C: "[c3,e3,a3]/5", D: "[d3,f3,a3]/2", E: "[d3,g3,b3]/2", F: "[c3,e3,a3]/4",
  G: "[b2,e3,g3]/2", H: "[c3,f3,a3]", I: "[d3,g3,b3]", J: "[e3@2 f3, [c3,a3]]/3",
  K: "[~ [c3,e3,a3]@8 [b2,e3,g3]@4 [c3,e3,a3]@3]/8", L: "[~ [c3,e3,a3]@8 [b2,d3,g3]@4 [c3,e3,a3]@3]/8",
  M: "[~ [c3,f3,a3]@2 [d3,g3,b3]@2 e3@4 f3@2 [d3,g3,b3]@2 [c3,e3,a3]@3, ~@5 [c3,a3]@6 ~@5]/8", // F G Am F
  N: "[~ [c3,f3,a3]@2 [d3,g3,b3]@2 e3@4 f3@2 [d3,g3,b3], ~@5 [c3,a3]@6 ~]/6", O: "[~@8 [c3,e3,a3]@81 ~@7]/6",
})).s("gm_string_ensemble_2").gain(0.22)

// bass · acoustic bass · "Seq Pad"
const bass_2 = note(`<
  ~@14 A@2 B@2 A@2 C@2 ~@29 D E F G H ~ I G ~@9 J K L K M N O ~@16 P@3 Q R@2 ~ S P@3 Q R@2 ~ S Q S Q S
>`.pickRestart({
  A: "[~@5 e2 ~ c3@3 ~@6]/2", B: "[~@5 e2 ~ b2@3 ~@6]/2", C: "[~@10 f2 ~@3 b2@6 ~@8 e2@3 ~]/2", D: "f2@3 ~",
  E: "g2@3 ~", F: "a2@9 ~@3 e2@4", G: "a1 ~@3", H: "f2@11 ~@5", I: "~@12 e2@3 ~", J: "~@13 g1 g#1@2",
  K: "a1@2 ~@4 c2 a1@2 ~@7", L: "c2 ~ c2 ~ a1 ~ g1 a1@2 ~@4 g1 g#1@2", M: "c2 ~ c2 ~ a1 ~ g1 a1 ~@5 g1 g#1@2",
  N: "a1@2 ~@4 c2 a1 ~@4 c2@4", O: "a1 ~@7", P: "[~@2 f2@3 ~ g2@3 ~ a2@2]/3", Q: "~ e2 a1 ~", R: "[~@8 f2@11 ~@13]/2",
  S: "~@4 e2@3 ~ a1@4 ~@4",
})).s("gm_acoustic_bass").gain(0.64)

// other · shakuhachi · "Suspense"
const shakuhachi = note(`<
  ~@35 A@2 B@2 C D@3 E F@2 G H I@3 ~ J@2 ~@2 J@2 ~@17 K@8 L@8 ~@2 M@2 ~@2 M@2 ~@2 M@2 ~@2 M@2 ~@4
>`.pickRestart({
  A: "[g4@14 [g#4,a4] e4@17]/2", B: "[b4@12 a4@2 d5@12 c5@3 b4@3, a4 ~@13 c#5 ~@17]/2",
  C: "[a4,b4] [c5,d5] [b4,c5] a4 [a4,b4] g4 e4@8 d4 g4", D: "[e4@10 d4@2 g4 ~ a4 e4@18 ~@15]/3", E: "d5@7 c5, c5 ~@15",
  F: "[e5@18 g5@8 f5@3 e5@3, d5 ~@31]/2", G: "d5@10 e5@5 a4", H: "c5 d5@14 [a4,b4]",
  I: "[g4@10 a4 ~ c5 ~ g4 a4@23 ~@10]/3", J: "[~@10 a4 ~ c5 ~ d5 a4@17]/2",
  K: "[~@8 g4@14 [g#4,a4] e4@17 b4@12 a4@2 d5@12 c5@3 b4@3 [a4,b4] [c5,d5] [b4,c5] a4 [a4,b4] g4 e4@8 d4 g4 e4@10 d4@2 g4 ~ a4 e4@18 ~@7, ~@40 a4 ~@13 c#5 ~@73]/8", // Amaj7 Asus2 Csus2 Cmaj7 Asus2
  L: "[~@8 d5@14 c5@2 e5@18 g5@8 f5@3 e5@3 d5@10 e5@5 a4 c5 d5@14 [a4,b4] g4@10 a4 ~ c5 ~ g4 a4@23 ~@2, ~@8 c5 ~@15 d5 ~@103]/8", // Asus2
  M: "[~@2 a4 ~ c5 ~ d5 a4@17 ~@8]/2",
})).s("gm_shakuhachi").gain(0.64)

// bass · overdriven guitar
const bass_3 = note("<~@62 A B A B C D C D E D F G H ~@36>".pickRestart({
  A: "~@7 g1", B: "a1@3 ~@13", C: "~@13 g1 g#1@2", D: "a1@2 ~@4 c2 a1@2 ~@7", E: "c2 ~ c2 ~ a1 ~ g1 a1@2 ~@4 g1 g#1@2",
  F: "c2 ~ c2 ~ a1 ~ g1 a1 ~@5 g1 g#1@2", G: "a1@2 ~@4 c2 a1 ~@4 c2@4", H: "a1 ~@15",
})).s("gm_overdriven_guitar").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@6 A@50 ~ A@17 ~ B C@20 D B C@6 D E ~@5>".pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~@5", B: "~@8 x ~@2 x ~@2 x ~", C: "~@2 x ~@5 x ~@2 x ~@2 x ~", D: "~ x ~@6", E: "~ x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@6 A@15 B A@10 C A C A@15 C A@5 ~ A@17 ~ D A@20 E D A@6 E ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@2 x", C: "~@4 x ~@7 x ~@2 x", D: "~@3 x", E: "~ x ~@2",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@13 A ~@3 B ~@32 C ~@3 D ~ E ~@26 F ~@7 F ~@3 F ~ G ~ F ~@3 F ~ G ~@5
>`.pickRestart({
  A: "~@15 x", B: "~@13 x ~ x", C: "~@9 x ~@4 x ~", D: "~@9 x ~@4 x!2", E: "~@10 x ~ x ~ x!2", F: "~ x ~@4 x!2 ~@8",
  G: "~ x ~@2 x ~ x!2 ~@8",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@6 A@50 ~ A@17 ~ B C@20 D B C@6 D ~@6>".pickRestart({
  A: "x!15 ~", B: "~@8 x!8", C: "x!7 ~ x!8", D: "x!7 ~@9",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@6 A@49 ~@2 A@16 ~@3 B@20 ~@2 B@6 ~@7>".pickRestart({
  A: "~@15 x", B: "~@7 x ~@8",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@21 A ~@11 B A ~@28 B ~ B ~ B ~ B@5 ~ C ~@15 C ~@5 C ~ C ~@5 C ~@5>".pickRestart({
  A: "~@3 x", B: "x", C: "~ x",
})).gain(0.64)

stack(
  synth_strings_1, bass, string_ensemble_2, bass_2, shakuhachi, bass_3, kick, snare, snare_soft, hihat, open_hat, crash
)

More by Enigma