Strudelify

Auf immer und ewig

Chris Rea

KeyA minorTempo88 bpm
0:00/0:00
// Auf immer und ewig — Chris Rea
// 88 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 4 "Jp.Strings" named as a string part, played on string ensemble 1 (its rock organ patch is not one); ch 6 "Vibraphone" named as a mallet, played on vibraphone (its piano patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 85 bars on a 32-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 · fretless bass · "Bass"
const bass = note(`<
  A@2 B@2 C D A@4 B@2 C D A@4 B@2 C D A@2 E F G H I J K L A@2 B@2 C D A@2 M N O P Q N O P R A B@2 C D A@4 B@2 C D A@2 M
  N O P Q N O P S T O P U T O P U T O P ~
>`.pickRestart({
  A: "d3 ~ d3 ~@9 d3 ~ d3 ~ d3 ~ d3 ~@13", B: "a#2 ~ a#2 ~@9 a#2 ~ a#2 ~ a#2 ~ a#2 ~@13",
  C: "g2 ~ g2 ~@9 g2 ~ g2 ~ g2 ~ g2 ~@13", D: "a2 ~ a2 ~@9 a2 ~ a2 ~ a2 ~ a2 ~@13",
  E: "g2@5 ~ g2@2 ~@4 g2@2 ~@14 g2@2 d3@2", F: "c3@6 c3 ~@5 c3 ~@15 c3@2 b2@2",
  G: "f2@5 ~ f2@2 ~@4 f2@2 ~@14 f3@2 d3@2", H: "a#2@5 ~ a#2@2 ~@4 a#2@2 ~@14 a#2@2 a2 ~",
  I: "e2@5 ~ e2@2 ~@4 e2@2 ~@14 e2@3 ~", J: "a2@5 ~ a2 ~@5 a2@2 ~@14 a3@2 g3@2", K: "d3@5 ~ d3@2 ~@4 d2@3 ~@13 a2@4",
  L: "d3@2 ~ d3 ~@2 d2 ~@9", M: "d2@2 d3 ~ d3@2 ~@2 d3@2 ~@2 d2 ~ d2@13 ~@5",
  N: "f2@2 f3 ~ f3@2 ~@2 f3@2 ~@2 f2@2 f2@13 ~@5", O: "a#2@2 a#3 ~ a#3@2 ~@2 a#3@2 ~@2 a#2 ~ a#2@18",
  P: "a2@2 a3 ~ a3@2 ~@2 a3@3 ~ a2 ~ a2@18", Q: "~@2 d3 ~ d3@2 ~@2 d3@2 ~@2 d2 ~ d2@13 ~@5, d2 ~@7",
  R: "d3 ~ d3 ~@9 d3 ~ d3 ~ d3 ~ d3 ~@13, d2@5 ~@27", S: "~@2 d3 ~ d3@2 ~@2 d3@2 ~@2 d2 ~@2 d2@13 ~@4, d2 ~@7",
  T: "f2@2 f3 ~ f3@2 ~@2 f3@2 ~@2 f2@2 ~ f2@13 ~@4", U: "~@2 d3 ~ d3@2 ~@2 d3@2 ~@2 d2 ~@2 d2@13 ~@4, d2@5 ~@27",
})).s("gm_fretless_bass").gain(0.45)

// other · lead 7 fifths · "Harmonic Lead"
const lead_7_fifths = note("<A@6 B@2 ~@24 A@6 B@2 ~@8 A@6 B@2 ~@29>".pickRestart({
  A: "[~@12 a5@4 e6@58 ~@2 d5@4 a5@57 ~@7 d6@4 e6@2 f6@4 g6@4 e6@26 c6@8]/6", B: "[d6@5 ~@3, c#6 ~@63]/2",
})).s("gm_lead_7_fifths").gain(0.25)

// chords · string ensemble 1 · "Jp.Strings"
const string_ensemble_1 = note(`<
  A@5 B C@2 A@5 B C@2 A@5 D C@2 E@2 F@2 G@3 ~ A@5 B C@2 H@8 A@5 B C@2 A@5 B C@2 I@4 H@8 J@8 ~
>`.pickRestart({
  A: "[[a3,c4,e4]@63 ~ [f3,c4]@63 [a3,a#3,d4,f4]@33, ~@63 [a3,d4]@64 ~@33]/5", B: "[a3,c4,e4]",
  C: "[~ f3@61 ~@2, [a3,d4]@31 ~]/2", D: "[c4,e4]", E: "[[d3,g3,a#3]@31 [c3,e3,a#3]@33]/2",
  F: "[[c3,f3,a3]@31 [a#2,d3,a3]@32 ~]/2", G: "[[a#2,d3,g3]@23 ~@8 [a2,c#3,g3]@27 ~@5 [a2,d3,f3]@15 ~@18]/3",
  H: "[[f3,a3,c4,d4]@31 [a3,c4,e4]@32 [a3,a#3,d4,f4]@32 [g3,c4,e4]@32 [f3,a3,c4,d4]@32 [a3,c4,e4]@32 [a3,a#3,d4,f4]@32 [g3,c4,e4]@33]/8", // Dm7 Am A#maj7 C Dm7 Am A#maj7 C
  I: "[[f3,a3,c4,d4]@31 [a3,c4,e4]@32 [a3,a#3,d4,f4]@32 [g3,c4,e4]@32 [f3,a3,c4,d4]]/4", // Dm7 Am A#maj7 C Dm7
  J: "[~@31 [a3,c4,e4]@32 [a3,a#3,d4,f4]@32 [g3,c4,e4]@64 [a3,c4,e4]@32 [a3,a#3,d4,f4]@32 [g3,c4,e4]@33]/8", // Am A#maj7 C Am A#maj7 C
})).s("gm_string_ensemble_1").gain(0.25)

// chords · vibraphone
const vibraphone = note(`<
  ~ A@2 ~ B@3 ~@2 A@2 ~ B@3 ~@2 A@2 ~ B@3 ~@10 A@2 ~ B@3 ~@10 A@2 ~ B@3 ~@2 A@2 ~ B@3 ~@22
>`.pickRestart({
  A: "[~@8 [c5,d5]@5 ~@3, ~@31 [f4,a4]@21 ~@12]/2", // Csus2 F
  B: "[~ [d5,f5]@30 ~ e5@30 ~@2 d5@30 ~@2, [a4,a#4]@31 [a4,c5]@31 f4@32 ~@2, ~@63 [a4,c5]@31 ~@2]/3", // Dm A#maj7 Am
})).s("gm_vibraphone").gain(0.09)

// chords · piano · "Synth"
const piano = note(`<
  A@2 B@2 C D@3 A@2 B@2 C D@3 A@2 B@2 C E@3 F G H I J K L@2 A@2 B@2 C D@3 ~@8 A@2 B@2 C D@3 A@2 B@2 C D@3 ~@21
>`.pickRestart({
  A: "[a4,c5,e5]/2", B: "[f4,a4,c5,d5]/2", C: "[a4,a#4,d5,f5]", D: "[[g4,a4,c5,e5]@31 [f4,a4,c5,d5]@64 ~]/3",
  E: "[[g4,c5,e5]@31 [f4,a4,c5,d5]@64 ~]/3", F: "[d5,g5,a#5]", G: "[c5,e5,a#5]", H: "[c5,f5,a5]", I: "[a#4,d5,a5]",
  J: "[a#4,d5,g5]", K: "[a4,c#5,g5]", L: "[[a4,d5,f5]@13 ~@3]/2",
})).s("gm_piano").gain(0.35)

// chords · piano · "E.Piano"
const piano_2 = note("<A@7 ~ A@7 ~ A@7 ~ B C@7 ~@8 D@6 E@2 ~@16 F@4 G@6 E@2 H@2 ~@7>".pickRestart({
  A: "~@4 a4 ~@11 a4 ~@15", B: "~ a#4@31, [d4,g4]",
  C: "[~ a#4@30 ~ [f4,a4]@30 ~@2 a4@31 ~ [d4,g4]@31 ~ [c#4,g4]@31 ~@2 f4@63, [c4,e4]@31 c4@31 a#3@33 a#3@34 ~@31 d4@64, ~@63 d4@33 ~@31 a3@32 a3@64 ~]/7", // F G5 C#dim C
  D: "[~@10 d5@6 ~@8 a4@16 ~@2 d5@6 ~@8 a4@16 ~@2 d5@6 ~@8 a4@16 ~@2 d5@6 d5@8 a4@16 ~@16 c6@16 a4@2 ~@14 g5@7 ~, ~ a4@2 ~@2 a4@2 ~@2 a4@2 ~@2 a4@2 ~@2 a4@4 ~@3, ~@16 d5@26 ~@6 d5@26 ~@6 d5@26 ~@32 d5@31 ~ d5@21 ~, ~@144 d6@25 ~@7 a5@15 ~]/6",
  E: "[~@24 e5@16 a4@2 d5@6 d5@8 a4@5 ~@3, ~ a4@4 ~@3, ~@5 d5@16 ~@11, ~@8 f5@13 ~@11]/2",
  F: "[~@8 a4@2 d5@5 ~ d5@8 a4@15 ~ a4@2 d5@5 ~ d5@8 a4@16 ~@2 d5@6 ~@8 a4@16 ~@2 d5@6 d5@8 a4@8, ~@9 a4@2 ~@2 a4@2 ~, ~@40 d5@13 ~@11]/4",
  G: "[~@8 a4@2 d5@5 ~ d5@8 a4@15 ~ a4@2 d5@5 ~ d5@8 a4@16 ~@2 d5@6 ~@8 a4@16 ~@2 d5@6 d5@8 a4@16 ~@16 c6@16 a4@3 ~@13 g5@7 ~, ~@9 a4@2 ~@2 a4@2 ~@2 a4@4 ~@3, ~@80 d5@26 ~@32 d5@31 ~@2 d5@21, ~@144 d6@25 ~@7 a5@15 ~]/6",
  H: "[~@24 c6@16 a4@3 ~@13 g5@7 ~, ~ a4@4 ~@3, ~@10 d5@31 ~@2 d5@21, ~@16 d6@25 ~@7 a5@15 ~]/2",
})).s("gm_piano").gain(0.41)

// chords · piano · "E.Piano" · soft notes
const piano_soft = note("<~@78 A@2 B@2 C@2 ~>".pickRestart({
  A: "[~@24 e5@16 a4@2 d5@6 d5@8 a4@5 ~@3, ~ a4@4 ~@3, ~@5 d5@16 ~@11, ~@8 f5@13 ~@11]/2",
  B: "[~@24 c6@16 a4@3 ~@13 g5@7 ~, ~ a4@4 ~@3, ~@10 d5@31 ~@2 d5@21, ~@16 d6@25 ~@7 a5@15 ~]/2",
  C: "[~@24 e5@16 a4@2 d5@6 d5@9 ~@7, ~ a4@4 ~@3, ~@5 d5@16 ~@11, ~@8 f5@13 ~@11]/2",
})).s("gm_piano").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@24 A@7 B A@8 C@7 D A@16 C@11 D C@3 D C@3 D ~>".pickRestart({
  A: "x!2", B: "x ~@7 x ~@6 x", C: "x", D: "x ~@6 x",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~@24 [~@3 x]!8 ~@8 [~@3 x]!8 ~@16 [~@3 x]!20 ~>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@32 [~@3 x]!8 ~@8 [~@3 x]!16 ~@21>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@7 B ~@7 C ~@15 B ~@11 D ~@3 D ~@3 D ~>".pickRestart({
  A: "~@7 x!2 ~@2 x!2 ~@3", B: "~@7 x ~@2 x ~@5", C: "~@14 x ~@4 x ~@4 x ~ x ~@5", D: "~@7 x ~@2 x ~ x!2 ~@2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@24 [x!7 ~]!60 ~>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 A ~@7 B ~@7 C ~@15 B ~@11 C ~@3 C ~@3 C ~>".pickRestart({
  A: "~@3 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "~ x ~ x ~@4 x ~@3 x ~@3", C: "~@4 x ~@7 x!2 ~@2",
})).gain(0.45)

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

// drums · crash
const crash = s("cr").struct("<~@32 A ~@7 A ~@6 B ~@16 A ~@10 B ~@3 B ~@3 B ~>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@31 A ~@7 B ~@7 C ~@15 B ~@11 D ~@3 D ~@3 D ~>".pickRestart({
  A: "~@3 x!2 ~@11", B: "x", C: "~ x ~@14", D: "~@3 x ~@28",
})).gain(0.5)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!16]!24 ~@7 [~ x!15] [x!16]!7 ~@46>").gain(2.01)

stack(
  bass, lead_7_fifths, string_ensemble_1, vibraphone, piano, piano_2, piano_soft, kick, rim, snare, low_tom, hihat,
  mid_tom, open_hat, crash, high_tom, cabasa
)

More by Chris Rea