Strudelify
Kayama cover art

Adiemus - Songs Of Sanctuary

Kayama

Adiemus

KeyA majorTempo144 bpm
0:00/0:00
// Kayama — Adiemus
// 144 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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 · "FRETLESS"
const bass = note(`<
  ~@26 A B C@2 D E F G H I B J K@2 B L F M B L F N I O I P Q@2 B R F O E D S T B R F O E D S T A B C@2 D E F G H I B J
  K@2 B L F M B L F N B L F M B L F N I O I P Q@2 B R F O E D S T B R F O E D S T U S U S U S U S U S U S U S
>`.pickRestart({
  A: "d2", B: "b1", C: "[a1@3 g1]/2", D: "f#1", E: "b1@15 ~", F: "a1", G: "d2@15 ~", H: "c#2", I: "c2", J: "a#1",
  K: "[a1@23 ~ a#1@8]/2", L: "g1", M: "f#1 f#2", N: "a2@6 a1 ~", O: "e1 e2", P: "e1@8 e2@7 ~", Q: "[d2@4 d1@27 ~]/2",
  R: "f#1@15 ~", S: "a1@15 ~", T: "a1@4 a2@3 ~", U: "d2 d1@3",
})).s("gm_fretless_bass").gain(0.41)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@12 A@2 B@2 C@2 D E F@2 G@2 H I A@2 B@2 C@2 D E F@2 G@2 J@2 K@2 L M K@2 N@2 ~@4 O P ~@4 Q L R@2 ~@4 Q L R@2 A@2 B@2
  C@2 D E F@2 G@2 J@2 K@2 L M K@2 N@2 K@2 L M K@2 N@2 ~@4 O P ~@4 Q L R@2 ~@4 Q L R@2 ~@14
>`.pickRestart({
  A: "[d3 [b2,g#3], d4]/2", B: "[e4,a4]/2", C: "[[f#2,d4] [b2,d4], a4]/2", D: "[c4,e4]@7 ~, a2", E: "[d2,f#4]",
  F: "[~ a3, f#4]/2", G: "[b2@16 ~@8 c#4@7 ~, d4@23 ~@9, b3@7 ~ [a#2,a#3]@8]/2", H: "d4", I: "c#4",
  J: "[d4@16 ~@8 a#3@7 ~, a4@3 ~, ~ c#4]/2", K: "[d4,f#4]/2", L: "[c#4,e4]", M: "[g#3,a3,c#4]",
  N: "[e4@24 d4@7 ~, c#4@21 ~@11]/2", O: "d3 a3", P: "[d4,f#4]@4 a4@3 ~", Q: "[d4,f#4]", R: "[a3,e4]/2",
})).s("gm_pad_warm").gain(0.25)

// chords · pad warm · "WARM PAD" · soft notes
const pad_warm_soft = note(`<
  ~@12 A ~@2 B ~@2 C D E ~ F G H@2 A ~@2 B ~@2 C D E ~ F G ~@32 A ~@2 B ~@2 C D E ~ F G ~@54
>`.pickRestart({
  A: "a3", B: "c#4", C: "g4", D: "d4", E: "a#3", F: "g#3", G: "g3", H: "[e4,a4]/2",
})).s("gm_pad_warm").gain(0.15)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<A@4 B@2 C@2 D@4 ~@124>".pickRestart({
  A: "[~@4 [f#4,b4] ~ [f#4,b4] ~ [f#4,b4]@4 f#4 ~ [f#4,a4]@13 ~ f#4@2 [e4,a4]@33 ~]/4", // B5 F#m A5
  B: "[~@4 [f#4,b4] ~ [f#4,b4] ~ [f#4,b4]@4 a4 ~ [c#4,f#4]@16 ~@2]/2", // B5 F#5
  C: "[~@4 [e4,a4] ~ [e4,a4] ~ [e4,a4]@4 g4@2 [g4,b4]@17 ~]/2", // A5 G
  D: "[~@4 [d4,f#4,b4] ~ [d4,f#4,b4] ~ [f#4,b4]@3 ~ [f#4,a4] ~ [c#4,f#4]@9 ~ [c#4,f#4]@3 ~ [e4,a4] ~ [e4,a4]@33 ~, ~@2 d4 ~@13]/4", // Bm B5 F#m F#5 A5
})).s("gm_lead_3_calliope").gain(0.28)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@12 A B C@2 D@4 E@2 ~ F G@2 A B C@2 D@4 E@2 ~ F ~ H ~ I ~ J ~ I K@2 L@4 M@2 ~ N@2 O P Q@3 ~ N@2 O P Q@3 A B C@2 D@4
  E@2 ~ F ~ R S T U@2 V T W@2 V T U@2 V T W@2 X Y Z@2 AA@2 AB AC AD@2 AB AE AF AG AB AC AD@2 AB AE AF AG AH AI AH AI AH
  AI AH AI AH AI AH AI AH AJ
>`.pickRestart({
  A: "d3", B: "g#3", C: "[~@6 f#4 g4, a3, a2@3 g2, ~ c#4]/2", D: "[f#2 ~ [a2,c4] [d4,f#4], a4]/4",
  E: "[c#3@2 ~ d#4, e4@3 ~, ~ [c3,a3]]/2", F: "~ c#4, [a#2,a#3,g4]", G: "a2/2", H: "~ a#2, c#4", I: "g2",
  J: "g#3 ~@2 f#4, f#2@7 ~, ~ a3@3, ~ c#4", K: "[c#4@11 ~ d4@4]/2", L: "[[c3,c4] b3 [c3,c4] [e2,g3,b3], e4]/4",
  M: "[d4 ~@2 a4, d3, ~@4 [a3,d4]@11 ~, ~@8 f#4@7 ~]/2", N: "[f#2 a2, a4, e4@7 ~@9]/2",
  O: "~@4 [d4,b4]@4 [g4,e5]@4 [f#4,d5]@3 ~, [e2,b3]", P: "b4", Q: "[f#2@2 ~@3 a4, a4@18 e4@5 ~, ~ a2@2, ~@2 a3]/3",
  R: "~@11 d4 [e4,f#4,g4] [a4,b4,c#5] [d5,e5,f#5] [g5,a5,b5], c#4@11 ~@5, ~ a#2", S: "[d5,d6]@3 [e5,e6], b2, c#6 ~@15",
  T: "[f#5,f#6] [d5,d6], g2", U: "[a2@2 ~ [f#5,f#6], [a4,a5]@3 ~, ~ f#2]/2", V: "[d5,d6]@3 [e5,e6], b2",
  W: "[a2@2 ~ [a5,a6], [e5,e6]@3 ~, ~ f#2]/2", X: "[g5,g6]@3 f#6, c3", Y: "[e5,e6]@3 [f#5,f#6], [e2,g3]",
  Z: "[[g5,g6]@6 [f#5,f#6]@2 [e5,e6]@6 [d5,d6] [c#5,c#6], e4, [c3,c4] [e2,g3]]/2", // G F# E D C# C Em
  AA: "[[d5,d6]@3 [a4,a5], d2, d4@15 ~]/2", AB: "[d5,d6]@3 [f#4,f#5], b2", AC: "c#6@6 [a4,a5] [b4,b5], f#2",
  AD: "[c6@6 ~@6 [b4,b5] [f#5,f#6] e6@2, a2 e2, ~@6 g5@9 ~, ~@8 e5@6 e5 ~]/2", AE: "[c#5,c#6] [a4,a5]", AF: "[e5,e6]",
  AG: "[d5,d6]@4 [e5,c#6]@3 ~, ~ c#5", AH: "[d5,d6] [a4,a5]!15",
  AI: "[d5,d6]@2 ~@6 [e4,e5] [f#4,f#5] [g4,g5] ~ [c4,c5] [d4,d5] [e4,e5] ~", // D E F# G C D E
  AJ: "[d5,d6]@2 ~@6 [e4,e5] [f#4,f#5] [g4,g5] ~ [c4,c5] [d4,d5] ~@2", // D E F# G C D
})).s("gm_string_ensemble_1").gain(0.35).pan(0.6)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~@12 A@2 B@2 C@2 D E F@2 G@2 H@2 A@2 B@2 C@2 D E F@2 G@2 I@2 J@2 K ~ L@2 M@2 ~ N ~@2 O ~ P ~ Q@2 R S@2 ~ P ~ Q@2 R S@2
  ~ A@2 B@2 C@2 D E F@2 G@2 T@2 ~@16 U@2 ~ V W@2 ~ X Y Z ~@3 AA ~ X Y Z ~@3 AA ~@14
>`.pickRestart({
  A: "[a3 b2, [d4,f#4]]/2", B: "[e4@3 ~]/2", C: "[~ [b2,f#4], d4]/2", D: "[e4,g4]", E: "d3", F: "[f#4, a#3 ~]/2",
  G: "[[b2,g#3,b3,f#4] ~, d4@3 ~]/2", H: "[d4 c#4, [a3,e4]]/2", I: "[[a2,a3]@3 a#3, e4, d4 ~]/2",
  J: "[[a3,f#4]@15 ~, d4, b2 ~]/2", K: "[a2,b3,c#4,e4]", L: "[d4, b2 ~, f#4@3 ~@13, a3 ~@31]/2",
  M: "[[a2,a3], e4@23 ~@9]/2", N: "[e2,g3]", O: "f#4 ~", P: "[b2,d4,f#4,b4]", Q: "[e4, g4@3 ~, c4 ~]/2",
  R: "[b2,d4,f#4]", S: "e4", T: "[[a2,a3]@3 a#3, e4@27 ~@5, d4 ~]/2", U: "[~@3 f#5 b3@4, e4, c4 ~]/2", V: "b3",
  W: "[a3@15 ~]/2", X: "c#5@3 ~", Y: "c5", Z: "g4@3 ~", AA: "f#5 ~",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.6)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@122 A B A B A B A B A B A B A B>".pickRestart({
  A: "[a4,d5,f#5]@15 ~", B: "[g4,c5,e5]@15 ~",
})).s("gm_brass_section").gain(0.42)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@18 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H I B@2 C@2 J@2 K@4 L@4 ~@4 M@2 N O@3 P@4 N O@3 P@4 E@2 F@2 G@2 H I B@2 C@2 J@2 K@4
  L@4 K@4 L@4 ~@4 M@2 N O@3 P@4 N O@3 P@4 Q R Q R ~@10
>`.pickRestart({
  A: "[e3@7 g3]/2", B: "[a#3@2 ~ d#4, e4@3 ~, ~ a3]/2", C: "[g#3@2 ~ c#4, d4@3 ~, ~ g3]/2", D: "[a3,e4]/2",
  E: "[[d3,a3] [b2,g#3], d4]/2", F: "[e4@6 f#4 g4, a2]/2", G: "[f#2@4 ~@3 c#4, a4, d4@7 ~, ~ b2]/2", H: "[b3,c4]",
  I: "~@3 g3", J: "[a3@3 a#3, e4]/2", K: "[f#4@8 ~@7 f#4, a4@13 a3@3, d4@17 ~@7 g#3@8, ~@32 e4@23 ~ c#4@8]/4",
  L: "[d4@4 e4@3 d4, a4@63 ~]/4", M: "[~@3 a4, d3, f#4 [d4,f#4], ~@4 a3@11 ~]/2", N: "[d4,b4]",
  O: "[e4 c4 [b3,g4], a4@2 ~, ~ e4@2]/3", P: "[b4@2 ~@2 e4@2 ~ a4, d4@2 ~ a3, ~@16 a4@36 e4@11 ~]/4", Q: "[f#5,d6]",
  R: "[e5,c6]", // C
})).s("gm_string_ensemble_2").gain(0.22)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note(`<
  ~@28 A@2 ~@14 B@2 ~@6 C ~@5 B@2 ~@6 B@2 ~@4 A@2 ~@14 B@2 ~@6 B@2 ~@6 C ~@5 B@2 ~@6 B@2 ~@16
>`.pickRestart({
  A: "a3/2", B: "f#4/2", C: "d4 ~",
})).s("gm_string_ensemble_2").gain(0.09)

// other · timpani · Fsus2
const timpani = note(`<
  ~@39
  [~@3 f2 g2 [f2,g2] f2 [f2,g2] g2 f2 g2 [f2,g2] f2 [f2,g2] g2 [f2,g2]]
  ~@43
  [~@3 f2 g2 [f2,g2] f2 [f2,g2] g2 f2 g2 [f2,g2] f2 [f2,g2] g2 [f2,g2]]
  ~@37
  [~@3 f2 g2 [f2,g2] f2 [f2,g2] g2 f2 g2 [f2,g2] f2 [f2,g2] g2 [f2,g2]]
  ~@14
>`).s("gm_timpani").gain(0.33).pan(0.2)

// other · timpani · soft notes · Fsus2
const timpani_soft = note("<~@39 [f2 [f2,g2] g2 ~@13] ~@43 [f2 [f2,g2] g2 ~@13] ~@37 [f2 [f2,g2] g2 ~@13] ~@14>")
  .s("gm_timpani").gain(0.17).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@26 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x ~@6 x", B: "~ x ~@2",
})).gain(0.39)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@27 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ B ~ A C D ~ A ~ B ~ A C D ~ A ~ A C D ~ A ~ A ~ E ~ A ~ A ~ A ~ E ~ A ~ A ~ F ~ B ~ G ~ A ~ F ~ B
>`.pickRestart({
  A: "~ x", B: "~@2 x!2", C: "~@3 x", D: "~@4 x!3 ~", E: "~@3 x!2 ~@3", F: "~@3 x!2 ~ x ~", G: "~ x ~@2 x ~@3",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@87 A ~@2 B C ~@3 A ~@2 B C ~@4 B C ~ C ~ D ~ E ~ F ~ C ~ D ~ E ~ F ~ G ~ H ~ I J D ~ G ~ H ~ I
>`.pickRestart({
  A: "x!3 ~ x ~@3", B: "~@3 x ~ x ~@2", C: "~@3 x!2 ~@3", D: "~ x ~@2 x ~@3", E: "~ x ~@2", F: "~ x ~ x ~@12",
  G: "~@3 x ~@2 x ~", H: "x ~@2 x!2 ~@3", I: "~ x ~@2 x ~ x ~", J: "~@5 x ~@2",
})).gain(0.45)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@107 A ~@4 B ~@2 A ~@4 B ~@4 A ~ C ~@5 A ~ C>".pickRestart({
  A: "~ x ~@2", B: "~@7 x", C: "~@3 x ~@4",
})).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@122 [~ x!3] [~ x ~ x]!7 [~ x!3] [~ x ~ x]!5>").gain(0.28)

// drums · high tom
const high_tom = s("ht").struct("<~@90 A ~@7 A ~@5 A ~@8 B ~@7 B ~ C D ~@2 E F ~@2 C D ~@2 E>".pickRestart({
  A: "~@3 x ~@4", B: "x!3 ~@5", C: "~@3 x!2 ~@3", D: "~@3 x", E: "~ x ~@6", F: "~@5 x ~@2",
})).gain(0.45)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@87 A ~@7 A ~@28 B ~@2 C ~@4 B ~@2 C>".pickRestart({
  A: "x", B: "~@5 x ~@2", C: "~@3 x ~@4",
})).gain(0.22)

// drums · crash
const crash = s("cr").struct("<~@40 A ~@43 A ~@7 A ~@29 A ~@3 A ~@3 A ~@3 A ~>".pickRestart({
  A: "x",
})).gain(0.28)

// drums · ride
const ride = s("rd").struct("<~@39 [~ x!15] ~@43 [~@2 x!14] ~@38 [~ x ~ x]!14>").gain(0.22)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@39 [x!2 ~@6] ~@43 [x!3 ~@13] ~@52>").gain(0.11)

// drums · tambourine
const tambourine = s("tb").struct("<~@122 [~ x ~ x]!14>").gain(0.28)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@26 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@3 x ~@3 x", C: "~@3 x ~@4",
})).gain(0.59)

// drums · bongos
const bongos_2 = s("bongo:18").struct(`<
  ~@26 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.59)

// drums · congas
const congas = s("conga:13").struct("<~@26 [~ x ~@2]!110>").gain(1.25)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@26 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
// … 27 more lines