Strudelify
Return to Innocence cover art

1994 · The Cross Of Changes

Return to Innocence

Enigma

KeyF majorTempo90 bpm
0:00/0:00
// Return to Innocence — Enigma
// 90 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 89 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · harmonica · "Old Man's Echo 4 G-103"
const harmonica = note("<~@4 A ~@2 B C ~@10 D E F G ~@66>".pickRestart({
  A: "~@8 g4@3 ~@5 d4@8 ~@8", B: "~@24 g4@3 ~@5", C: "d4 ~@3", D: "~@16 d5@2 ~@2 eb5 ~@2 f5 ~@4 bb4 ~@3",
  E: "bb4@4 ~@6 bb4@4 ~@3 bb4@4 ~@3 bb4@4 ~@4", F: "bb4@4 ~@12 bb4@4 bb4 ~@3 c5 ~@3 f5 ~@3, ~@8 a4 ~@7",
  G: "f5@5 ~@3 f5@5 ~@3 f5 f5@5 ~@10",
})).s("gm_harmonica").gain(0.27).pan(0.8)

// other · piano
const piano = note("<A@4 B@5 ~@17 C@3 ~@13 C@3 ~@5 C@3 ~@13 D@2 ~@21>".pickRestart({
  A: "c4/4", B: "c4/5", C: "[c4@11 ~@5]/3", D: "c4/2",
})).s("gm_piano").gain(0.41)

// bass · electric bass finger · "Bass Line G-055"
const bass = note(`<
  ~@8 A B C D E F C G F H I J K L M N O P Q R S T U V N W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AL AP AQ AR
  AS AT AU AV AW AX AY@2 AZ BA AF AG AH AI AJ AK AL AM AN AO AL AP BB ~@10
>`.pickRestart({
  A: "bb1@2 bb1 ~ bb1!2 bb1@2", B: "bb1!2 bb1@6", C: "g1@3 g1 g1@4", D: "g1@3 ~ g1@4", E: "f1@3 f1 f1@3 ~", F: "f1!2",
  G: "g1!2", H: "f1@4 f1@2 f1 ~", I: "bb1@3 bb1 bb1@4", J: "f1@3 f1 f1@3 f1", K: "g1@4 g1@3 g1", L: "a1@3 a1 a1@3 a1",
  M: "bb1@2 ~ bb1 bb1@4", N: "g1@2 ~ g1 g1@4", O: "g1@2 ~ g1 g1@3 ~", P: "a1@2 ~ a1 a1@2 a1!2",
  Q: "bb1@2 bb1!2 bb1@3 bb1", R: "f1@2 f1@2 f1@3 f1", S: "g1@2 ~ g1 g1@3 g1", T: "a1@3 a1 a1@2 a1!2",
  U: "bb1@2 ~ bb1@5", V: "f1@2 ~ f1 f1@3 f1", W: "a1@2 ~ a1 a1@3 a1, f1@5 ~@27",
  X: "bb1@7 ~@2 bb1 ~@2 bb1@11 ~ bb1@7 ~", Y: "f1@9 ~@2 f1 ~@3 f1@11 ~@2 f1@2 ~@2",
  Z: "g1@8 ~@4 g1 ~@3 g1@10 ~@2 g1 ~@3", AA: "a1@9 ~@3 a1 ~@3 a1@11 ~ a1 ~@3", AB: "bb1@8 ~@3 bb1 ~@4 bb1@11 ~ bb1 ~@3",
  AC: "f1@9 ~@2 f1 ~@4 f1@12 f1 ~@3", AD: "g1@9 ~@3 g1 ~@3 g1@11 ~ g1 ~@3", AE: "a1@9 ~@2 a1 ~@4 a1@12 a1 ~@3",
  AF: "bb1@7 ~@5 bb1 ~@3 bb1@11 ~ bb1 ~@3", AG: "f1@8 ~ f1 ~@2 f1 ~@3 f1@11 ~ f1 ~@3",
  AH: "g1@7 ~@2 g1 ~@2 g1@7 ~ g1 ~@3 g1@7 ~", AI: "a1@8 ~@4 a1 ~@3 a1@10 ~@2 a1 ~@3",
  AJ: "bb1@9 ~@3 bb1 ~@3 bb1@10 ~@2 bb1 ~@3", AK: "f1 ~@3 f1 ~@3 f1@8 f1 ~@3 f1@7 ~ f1 ~@3",
  AL: "g1@9 ~@3 g1 ~@3 g1@10 ~@2 g1 ~@3", AM: "a1@7 ~@2 a1 ~@2 a1@6 ~@2 a1 ~@3 a1@7 ~",
  AN: "bb1@9 ~@3 bb1 ~@3 bb1@11 ~ bb1 ~@3", AO: "f1@9 ~@3 f1 ~@3 f1@11 ~ f1 ~@3",
  AP: "f1@9 ~@2 f1 ~@4 f1@10 ~@2 f1 ~@3", AQ: "bb1@3 ~", AR: "a1@15 ~", AS: "g1", AT: "a1",
  AU: "bb1@5 ~@3 bb1@10 ~@2 bb1 ~@3 bb1@8", AV: "~ f1@8 ~@3 f1@6 ~@2 f1@3 ~ f1@7 ~",
  AW: "g1@8 ~@4 g1@7 ~ g1@2 ~@2 g1@2 ~@2 g1@3 ~", AX: "a1@9 ~@3 a1@10 ~@2 a1@7 ~",
  AY: "[bb1@9 ~@3 bb1 ~@3 bb1@7 ~@2 bb1@6 a1@8 ~@3 a1@2 ~@4 a1@11 ~ a1@4]/2", AZ: "g1@8 ~@4 g1@2 ~@2 g1@13 ~@3",
  BA: "f1@11 ~ f1@6 ~@2 f1@2 ~@2 f1@8", BB: "bb1@9 ~@23",
})).s("gm_electric_bass_finger").gain(0.45).pan(0.3)

// chords · string ensemble 2 · "Intro - Strings G-050"
const string_ensemble_2 = note(`<
  ~@2 A@8 B@2 C@2 B@2 C@2 D E D E F D@2 E F G D E F H D E F G D E F G D E F G D E F G D E F G D E I ~@11 F G D E F G D E
  F G D E I ~@10
>`.pickRestart({
  A: "[~ [a2,c3,f3]@4 [bb2,d3,f3]@2 ~@5 [bb3,d4,f4]@4, ~@7 [a2,c3,f3]@6 ~@3]/8", B: "[g3,bb3,d4]/2", C: "[f3,a3,d4]/2",
  D: "[eb3,g3,bb3]", E: "[f3,a3,c4]", F: "[bb3,d4,f4]", G: "[a3,c4,f4]", H: "[a3,f4], e4 ~", I: "[bb3,d4,f4] ~",
})).s("gm_string_ensemble_2").gain(0.19).pan(0.4)

// chords · synth strings 1 · "Pad G-051"
const synth_strings_1 = note(`<
  ~@7 A@4 ~@31 B C D E F C D E F C D E F C ~ G@4 H F C D E F C D E F C D E F C D E I@4 ~@7
>`.pickRestart({
  A: "[~@3 [ab4,c5,eb5]@24 ~@5]/4", B: "[bb3,d4]", C: "[a3,c4,f4]", D: "[eb3,g3,bb3]", E: "[f3,a3,c4]",
  F: "[bb3,d4,f4]", G: "[~@3 [ab4,c5,eb5]@28 ~]/4", H: "[f3,a3,c4,a4]", I: "[bb3,d4,f4]/4",
})).s("gm_synth_strings_1").gain(0.38).pan(0.6)

// chords · shanai · "Shanai (little arpegio) G-112"
const shanai = note("<~@18 A@8 B@2 ~@26 C@7 ~@17 A@8 D@2 ~>".pickRestart({
  A: "[~ f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 c6, a6@2 ~ c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@3, ~@2 a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~]/8",
  B: "[~ f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~ a6@2 ~@10, a6@2 ~ c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@11, ~@2 a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~@7]/2",
  C: "[~ f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~ a6@2 ~@30, a6@2 ~ c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@31, ~@2 a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~@17]/7",
  D: "[~ f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~@2 f6 d6 ~ a6@2 ~@30, a6@2 ~ c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@31, ~@2 a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~@17]/2",
})).s("gm_shanai").gain(0.03).pan(0.3)

// chords · pad warm · "Warm Pad G-090"
const pad_warm = note("<~@54 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B ~>".pickRestart({
  A: "[bb3,d4,f4]", B: "[a3,c4,f4]", C: "[eb3,g3,bb3]", D: "[f3,a3,c4]",
})).s("gm_pad_warm").gain(0.27).pan(0.7)

// other · overdriven guitar · "Lead Gtr (Scotland G-110)"
const overdriven_guitar = note("<~@58 A B C D E F G H@2 ~@22>".pickRestart({
  A: "bb4", B: "f4@6 bb4@4 f4@2 bb4@2 c5 ~", C: "d5@31 ~", D: "f5@11 gb5 g5@12 f5@5 ~@3",
  E: "bb5@2 ab5@3 ~@3 ab5@3 ~ bb5@2 ab5@3 ~ bb5@2 ab5@3 ~ bb5@2 ab5@2 ~@2 bb5@2, ~@7 bb5@2 ~@23",
  F: "ab5@3 ~ bb5@2 ab5@2 ~@3 ab5@3 ~@2 bb5@2 ab5@2 ~@3 ab5@3 ~@2 bb5@2 ~@2, ~@5 bb5 ~@5 bb5 ~@4",
  G: "c6@6 db6@6 c6@2 db6 ~", H: "[eb6@5 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.49)

// drums · kick
const kick = s("bd").struct("<~@8 [x ~@6 x ~@2 x ~@5]!46 x ~@3 [x ~@6 x ~@2 x ~@5]!20 x ~@10>").gain(0.73)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!46 ~@4 [~ x ~ x]!20 ~@11>").gain(0.73)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@8 [x!7 ~]!46 ~@4 [x!7 ~]!20 ~@11>").gain(0.58)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~@7 x]!46 ~@4 [~@7 x]!20 ~@11>").gain(0.73)

// drums · china
const china = s("cr").struct("<~@10 A ~@15 A ~@7 A ~@7 A ~@11 A ~@3 A ~ A ~ A B A ~ A ~@11 A ~@10>".pickRestart({
  A: "x", B: "~ x ~@30",
})).gain(0.58)

stack(
  harmonica, piano, bass, string_ensemble_2, synth_strings_1, shanai, pad_warm, overdriven_guitar, kick, snare,
  pedal_hat, open_hat, china
)

More by Enigma