Strudelify

Jenseits von Eden

Nino De Angelo

KeyD majorTempo88 bpm
0:00/0:00
// Jenseits von Eden — Nino De Angelo
// 88 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@3 A B A B A B A B C D A D E D F D A D C D A D C G F D A D A D E H E H I J K L A D C D A D E D F D A F G A D E H E H
  I J K L C D C D A D E D F D A F D A F D M N
>`.pickRestart({
  A: "d2@6 d2 ~ d2@4 a1@4", B: "g1@6 g1 ~ a1@6 a1 ~", C: "d2@6 d2 ~ d2@8", D: "g1@6 g1 ~ a1@8",
  E: "d2@6 d2 ~ d2@4 d2@4", F: "b1@6 b1 ~ b1@4 a1@4", G: "g1@6 g1 ~ a1@4 a1@4", H: "g1@6 g1 ~ g1@4 g1@4",
  I: "f#1@6 f#1 ~ f#1@4 a1@4", J: "b1@6 b1 ~ b1@4 b1@4", K: "e1@6 e1 ~ g1@6 g1 ~", L: "e1@6 e1 ~ a1@4 a1@4",
  M: "d2@6 d2 ~ d2@6 a1@2", N: "d2@3 ~@5",
})).s("gm_synth_bass_2").gain(0.56)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@3 A B A B A B A B C D E D C D F G E D C D E D H D I D J K L M N O P O Q R S D E D T D E D C D U G E V D E D N O P O
  Q R S D C D W D E D C D X Y E X Y E X Y Z AA
>`.pickRestart({
  A: "[d4,f#4]@11 ~ [c#4,a4]@4", B: "[d4,g4] [c#4,a4]", C: "[a3,d4,f#4]@15 ~", D: "[b3,d4,g4] [a3,c#4,a4]",
  E: "[a3,d4,f#4]@11 ~ [a3,c#4,a4]@4", // D A
  F: "~@2 [b4,d5] ~ [a4,c#5] ~ [f#4,b4,d5]@4 [b4,d5]@2 [a3,a4,c#5]@4, b3@3 ~, d4@9 ~@7, f#4@3 ~@5", // Bm A Bm A
  G: "[b3,g4,b4] [a3,c#4,a4]", H: "[d4,f#4]@3 ~ [d4,f#4] ~ [d4,f#4]@3 ~ [d4,f#4]@5 ~, a3@15 ~",
  I: "[d4,f#4]@3 ~ [d4,f#4] ~ [d4,f#4]@3 ~ [d4,f#4]@3 ~@3, b3@15 ~", // D
  J: "[d4,f#4]@3 ~ [d4,f#4] ~ [d4,f#4]@6 [a3,c#4,a4]@4, a3@11 ~@5", K: "[b3,g4] [a3,c#4,a4]",
  L: "[a3,d4,f#4]@3 [a3,c#4,a4]", M: "[g3,b3,g4] [a3,c#4,a4]", N: "[f#3,d4]@15 ~", O: "[g3,b3,d4]@15 ~",
  P: "[f#3,a3,d4]@15 ~", Q: "[f#3,a3,c#4]@15 ~", R: "[f#3,b3,d4]", S: "[g#3,b3,e4] [b3,d4,g4]", T: "[a3,f#4]@15 ~",
  U: "~ [d5,f#5] [c#5,e5] ~@2 [b4,d5] [a3,a4,c#5]@2, b3@3 ~, [d4,f#4]@2 b2 ~, ~@3 [b4,d5]@2 ~@3", // D C#m Bm A D Bm
  V: "~ [d5,f#5] [c#5,e5] ~@2 [b4,d5] [a3,a4,c#5]@2, b3@3 ~, d4@2 b2 ~, b4@3 [b4,d5]@2 ~@3", // D C#m Bm A Bm
  W: "[a3,d4]@11 ~@5, f#4@15 ~", // D5
  X: "~@2 d5@2 [a4,c#5]@2 [b4,d5]@3 ~ [b4,d5]@2 [c#4,e4,a4,c#5]@4, [b3,d4,f#4]@3 ~, ~@2 b4 ~@13", // A Bm A Bm
  Y: "[b3,g4,b4,d5] [a3,c#4,a4]", Z: "[a3,d4,f#4]@13 ~ [a3,c#4,a4] ~", AA: "[f#3,a3,d4]@3 ~@5",
})).s("gm_piano").gain(0.44).pan(0.7)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note("<~@4 A B C B A B C B ~@18 A B C B ~@8 C B ~@11 A B ~@8 C B ~@13 D B>".pickRestart({
  A: "~@6 g4 ~ a4 ~@5 a4 ~", B: "d5 ~@15", C: "~@6 g4 ~ a4 ~@5 a4!2", D: "d5 ~@13 a4!2",
})).s("gm_orchestra_hit").gain(0.45).pan(0.3)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@3 A B A B A B A B C B A B C B D B A B C B A B C B D B A B A B E F G F G E H I J B C B A B C B D B A D B A B K L M L
  N O P Q R B C B A B C B D S T U S T U S V W
>`.pickRestart({
  A: "[d3,a3]@3 [a2,c#4]", B: "[g2,b3] [a2,c#4]", C: "[d3,a3]", D: "[b2,d4]@3 [a2,c#4]", E: "[d3,f#4,f#5]",
  F: "[b3,g4,g5]", G: "[a3,f#4,f#5]", H: "[g#3,e4,e5] [b3,g4,g5]", I: "[d4,b4,b5] [c#4,a4,a5]",
  J: "[d3,a3,d5]@3 [a2,c#4]", K: "[d3,f#4,a6]", L: "[b3,g4,b6]", M: "[a3,f#4,a6]", N: "[a3,f#4,c#7]", O: "[d3,f#4,d7]",
  P: "[g#3,e4] [b3,g4], b6", Q: "[d4,b4,b6] [c#4,a4,a6]", R: "[d3,a3,a6]", S: "[g2,b3,b6] [a2,c#4,c#7]",
  T: "[d3,a3,d7]@3 [a2,c#4,c#7]", U: "[b2,d4,b6]@3 [a2,c#4,a6]", V: "[d3,a3,d7]@7 [a2,c#4,a6]", W: "[d3,d4,d7]@5 ~@11",
})).s("gm_string_ensemble_2").gain(0.32)

// other · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@3 A B A B A B A B C B A B C B A B A B C B A B C B D B A B A B E@4 F E G H A B C B A B C B A B D I B D B E@4 F E G H
  C B C B A B C B A B A@2 B A@2 B J@2
>`.pickRestart({
  A: "f#4@3 a4", B: "d4 e4", C: "f#4", D: "f#4@3 e4", E: "d4", F: "c#4", G: "d4 g4", H: "e4 a4", I: "d4@3 e4",
  J: "[f#4@7 ~ d4@3 ~@5, ~@14 a4@5 ~@13]/2",
})).s("gm_pad_poly").gain(0.31).pan(0.3)

// chords · pad bowed · "BOWEDGLASS"
const pad_bowed = note(`<
  ~@2 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D C B C E F G H B C B C B C B C B C B I J B C D J B
  C E F G H B C B C B C B C B C B@2 C B@2 C K@2
>`.pickRestart({
  A: "[d4,a4,d5,a5]", B: "d6, a5@7 ~", C: "a5", D: "d6", E: "c#6, f#5@7 ~", F: "b5", G: "e5, b5@7 ~", H: "e5",
  I: "[a5,d6]", J: "a5@7 ~", K: "[d6@8 d6@3 ~@5, a5@9 ~@7]/2",
})).s("gm_pad_bowed").gain(0.32).pan(0.7)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<A@3 ~@79>".pickRestart({
  A: "[~ [d2,d3,f#3,a3,d4]@5]/3", // D
})).s("gm_pad_halo").gain(0.06).pan(0.4)

// other · pad poly · "POLYSYNTH"
const pad_poly_2 = note(`<
  ~
  [e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 f#4]!33
  ~@2
  [e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 f#4]!21
  ~@2
  [e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 f#4]!21
  [e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4]
  [a4 ~@15]
>`).s("gm_pad_poly").gain(0.21).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!79 [x ~@2 x!2 ~@2 x] x>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!80 ~>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~ [~ x!7]!80 [~ x ~@6]>").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~ x!81>").gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!3 ~ x!7 ~ x!4]!80 x>").gain(0.16)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~ [~@3 x ~@7 x ~@4]!80 ~>").gain(0.08)

stack(
  bass, piano, orchestra_hit, string_ensemble_2, pad_poly, pad_bowed, pad_halo, pad_poly_2, kick, snare, hihat,
  open_hat, tambourine, tambourine_soft
)