Strudelify

Crying In The Chapel

Elvis Presley

KeyB majorTempo86 bpm
0:00/0:00
// Crying In The Chapel — Elvis Presley
// 86 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 3 "#WARM BELL" Warm Bell -> pad bowed; ch 4 "#WARM BEEL" Warm Bell -> pad bowed
// note: duplicate parts dropped: ch 4 "#WARM BEEL" pad bowed (copy of ch 3 "#WARM BELL" pad bowed); ch 6 "CHOIR AAHS" choir aahs (copy of ch 5 "SYN STRING" synth strings 1)
// note: Full arrangement: all 51 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A B C D A E C F A G C D A E C F A H I E C J C D A E C F K L C D A E C F A G M E C N C D A E C D A O
>`.pickRestart({
  A: "b1@9 ~ b1 ~ e1@6 ~@2 b1 ~ b1 ~", B: "b1@9 ~ b1 ~ b1@3 ~@9", C: "c#2@9 ~ c#2 ~ c#2@6 ~@2 g#1 ~ g#1 ~",
  D: "f#1@9 ~ f#1 ~ f#1@6 ~@2 f#2 ~ c#2 ~", E: "b1@9 ~ b1 ~ g#1@6 ~@2 g#1 ~ d#1 ~",
  F: "e1@9 ~ e1 ~ f#1@6 ~@2 f#2 ~ c#2 ~", G: "b1@9 ~ b1 ~ b1@4 ~@8", H: "b1@9 ~ b1 ~ b1@6 ~@2 b1 ~ f#1 ~",
  I: "e1@9 ~ e1 ~ e1@5 ~@3 b1 ~ b1 ~", J: "f#1 ~", K: "b1@8 ~@2 b1 ~ e1@6 ~@2 b1 ~ b1 ~", L: "b1@9 ~ b1 ~ b1@6 ~@6",
  M: "e1@9 ~ e1 ~ e1@6 ~@2 b1 ~ b1 ~", N: "f#1@9 ~ f#1 f#1@4 ~@9", O: "b1@5 ~@19",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · pad bowed · "#WARM BELL"
const pad_bowed = note(`<
  ~ A B C D E F C G H I C D H J C G H K L F M N O D H F C G P I Q R S T C G H U V F W X C R H F C R H Y
>`.pickRestart({
  A: "~@4 d#4 ~@3 d#4@2 b3 ~ [b3,e4,g#4]@10 ~@2, ~ b3@3 ~@8, ~@3 f#4@2 ~@7", // E
  B: "~@4 f#4@2 b4@2 f#4@2 d#4 ~@13, b3@5 ~@7, ~ d#4@3 ~@8",
  C: "~@4 e4 ~@3 e4@2 c#4 ~ [g#3,c#4,e4]@10 ~@2, g#3@5 ~@7, ~ c#4@3 ~@8, ~@3 g#4@2 ~@7", // C#m
  D: "~@4 c#5@2 f#5@2 c#5@2 a#4 ~ [f#4,a#4,c#5]@10 ~@2, f#4@5 ~@7, ~ a#4@3 ~@8", // F#
  E: "~@4 d#4 ~@3 d#4@2 b3 ~ [f#3,b3,d#4] ~@11, f#3@5 ~@7, ~ b3@3 ~@8, ~@3 f#4@2 ~@7", // B
  F: "~@4 f#4@2 b4@2 f#4@2 d#4 ~ [g#3,b3,d#4]@10 ~@2, b3@5 ~@7, ~ d#4@3 ~@8", // G#m
  G: "~@4 b4@2 e5@2 b4@2 g#4 ~ [f#4,a#4,c#5]@10 ~@2, e4@5 ~@7, ~ g#4@3 ~@8", // F#
  H: "~@4 d#4 ~@3 d#4@2 b3 ~ [b3,e4,g#4]@10 ~@2, f#3@5 ~@7, ~ b3@3 ~@8, ~@3 f#4@2 ~@7", // E
  I: "~@4 f#4@2 b4@2 f#4@2 d#4 ~ [b3,d#4,f#4] ~@11, b3@5 ~@7, ~ d#4@3 ~@8", // B
  J: "f#4 ~@3 f#4@2 b4@2 f#4@2 d#4 ~ [g#3,b3,d#4]@10 ~@2, ~@2 d#4@7 ~@15", // G#m
  K: "~@4 f#4@2 b4@2 f#4@2 d#4 ~@5 a4@2 ~@2 a4@2 f#4 ~, b3@5 ~@2 f#4@3 ~@2, ~ d#4@3 ~@2 d#4@5 ~, ~@18 b4@5 ~",
  L: "f#3 ~@3 g#4 ~@3 g#4@2 e4 ~ [g4,b4] ~@11, ~ e4@3 ~@8, ~@3 b4@2 ~@7", // G
  M: "~@4 f4 ~@3 f4@2 c#4 ~ [g#3,c#4,f4]@10 ~@2, g#3@5 ~@7, ~ c#4@3 ~@8, ~@3 g#4@2 ~@7", // C#
  N: "c#4 ~@3 c#5@2 f#5@2 ~@16, ~ a#4@3 ~@8",
  O: "~@4 e4 ~@3 e4@2 c#4 ~ [g#3,c#4,e4]@10 ~@2, ~ c#4@3 ~@8, ~@3 g#4@2 ~@7", // C#m
  P: "d#3 ~@3 d#4 ~@3 d#4@2 b3 ~ [b3,e4,g#4]@10 ~@2, ~ b3@3 ~@8, ~@3 f#4@2 ~@7", // E
  Q: "~@4 e4@2 ~@2 e4@2 c#4 ~ [g#3,c#4,e4]@10 ~@2, g#3@5 ~@7, ~ c#4@3 ~@8, ~@3 g#4@2 ~@7", // C#m
  R: "~@4 c#5@2 f#5@2 c#5@2 a#4 ~ [f#4,a#4,c#5]@10 ~@2, f#4@5 ~@7, ~@2 a#4@7 ~@15", // F#
  S: "~@4 d#4@2 ~@2 d#4@2 b3 ~ [b3,e4,g#4]@10 ~@2, f#3@5 ~@7, ~ b3@3 ~@8, ~@3 f#4@2 ~@7", // E
  T: "~@4 f#4@2 b4@2 f#4@2 d#4 ~ [g#3,b3,d#4]@10 ~@2, b3@5 ~@7, ~@2 d#4@7 ~@15", // G#m
  U: "~@4 f#4@2 b4@2 f#4@2 d#4 ~ d#4 ~@11, b3@5 ~@7, ~ d#4@3 ~@8",
  V: "~@4 g#4 ~@3 g#4@2 e4 ~ [b3,e4,g4]@10 ~@2, b3@5 ~@7, ~ e4@3 ~@8, ~@3 b4@2 ~@7", // Em
  W: "~@4 f4@2 ~@2 f4@2 c#4 ~ [g#3,c#4,f4]@10 ~@2, ~ c#4@3 ~@8, ~@3 g#4@2 ~@7", // C#
  X: "~@4 c#5@2 f#5@2 c#5@2 a#4 ~@13, f#4@5 ~@7, ~ a#4@3 ~@8", Y: "b3 ~@11",
})).s("gm_pad_bowed").gain(0.4).pan(0.7)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note("<~ A@2 B@2 C@4 D@2 E@6 F@6 G@8 H@6 I@8 J@4 K@2>".pickRestart({
  A: "[[f#3,d#4]@11 ~ e4@12 [f#3,d#4]@17 ~@7, b3@41 ~@7, ~@11 g#3@12 ~@25]/2", B: "[[g#3,e4] [a#3,f#4], c#4]/2",
  C: "[[f#3,d#4]@12 [g#3,e4]@11 ~ f#3@11 f#3@11 ~@2 c#4@23 b3@12 [a#3,c#4,f#4]@12 ~, b3 ~, ~@2 d#4@2 e4@3 ~, ~@35 g#3@48 ~@13]/4", // D#m C#m F#
  D: "[[f#3,d#4]@4 [g#3,e4]@4 [f#3,d#4]@5 ~@3, b3@13 ~@3]/2", // D#m C#m D#m
  E: "[[g#3,e4]@24 [a#3,f#4]@23 ~ [f#3,d#4]@11 ~ e4@12 f#3@11 ~@13 c#4@23 b3@12 [a#3,c#4,f#4]@12 ~, c#4@47 b3@48 ~@49, ~@59 g#3@12 ~ d#4@24 e4@36 ~@12, ~@7 g#3@4 ~]/6", // C#m D#m F#
  F: "[[f#3,d#4]@12 [g#3,e4]@12 ~@12 a3@12 g#3@12 g3@11 ~@25 f4@24 [a#3,f#4]@9 ~@15, b3@32 c#4@11 ~@5, ~@24 [f#3,d#4]@24 e4@23 f#3@12 ~ g#3@36 ~@24, ~@3 d#4 ~@2]/6", // D#m C#m D#m
  G: "[[g#3,e4]@24 [a#3,f#4]@23 ~ f#3@12 [g#3,e4]@12 f#3@12 ~@11 c#4@24 b3@12 ~ [a#3,c#4,f#4]@11 ~ g#3 ~@11 [g#3,e4]@12 [f#3,d#4]@14 ~@10, c#4@47 b3@48 e4@36 ~@61, ~@47 d#4@12 ~@13 d#4@24 ~@47 [f#3,d#4]@12 ~@37, ~@84 g#3@48 ~@11 b3@38 ~@11]/8", // C#m D#m C#m F# C#m D#m
  H: "[[g#3,e4]@24 [a#3,f#4]@23 ~ f#3@12 [g#3,e4]@11 ~@25 c#4@24 b3@11 ~ f#4@11 ~, c#4@47 b3@48 ~@36 [a#3,c#4]@12 ~, ~@47 d#4@12 ~@12 f#3@12 g#3@48 ~@13, ~@6 d#4@2 e4@3 ~]/6", // C#m D#m C#m A#m
  I: "[[f#3,d#4]@12 [g#3,e4]@11 ~@12 a3@12 ~ g#3@12 g3@11 f#3@12 ~@13 f4@24 [a#3,f#4]@4 ~@19 [g#3,e4]@24 ~ [a#3,f#4]@24, b3@96 c#4@28 ~@19 c#4@48 ~, ~@23 [f#3,d#4]@25 e4@23 d#4@24 ~@97, ~@7 g#3@3 ~@6]/8", // D#m C#m D#m C#m D#m
  J: "[[f#3,d#4]@11 ~ e4@12 f#3@11 ~@37 [a#3,f#4]@22 ~@2, b3@47 e4@24 ~@25, ~@11 g#3@12 ~ d#4@24 c#4@46 ~@2, ~@35 g#3@36 ~@25]/4", // D#m
  K: "[[f#3,d#4]@11 [g#3,e4]@12 ~ f#3@9 ~@15, b3@2 ~, ~@24 d#4@7 ~@17]/2", // D#m C#m
})).s("gm_synth_strings_1").gain(0.36).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A B C B@7 C B@11 C B@7 C B@7 C B@3 C B@7 A>".pickRestart({
  A: "x", B: "x ~@4 x!2 ~@5", C: "x ~@4 x!2 ~@3 x ~",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B A C A C A C A B A C A C A C A C A C A B A C A C A C A B A C A C A C A B A C A B A C A C A C A ~
>`.pickRestart({
  A: "~@6 x ~@11 x ~@4 x", B: "~ x ~@2", C: "~ x ~ x",
})).gain(0.7)

// drums · low tom
const low_tom = s("lt").struct("<A ~ B ~@7 B ~@11 B ~@7 B ~@7 B ~@3 B ~@6 C ~>".pickRestart({
  A: "~@8 x!4", B: "~@5 x", C: "~@11 x",
})).gain(0.7)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@2 A ~@7 A ~@11 A ~@7 A ~@7 A ~@3 A ~@8>".pickRestart({
  A: "~@11 x",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<A B C B@7 D B@11 E B@7 D B@7 D B@3 C B@7 ~>".pickRestart({
  A: "~@4 x ~@2 x ~@2 x ~", B: "~ x ~@2 x ~@2 x ~@2 x ~", C: "~ x ~@2 x ~ x ~@5", D: "~ x ~@2 x ~@7",
  E: "~ x ~@2 x!3 ~@5",
})).gain(0.42)

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

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@2 A ~@7 A ~@11 A ~@7 A ~@7 A ~@3 A ~@8>".pickRestart({
  A: "~@3 x",
})).gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<A ~ B ~@19 B ~@19 B ~@6 C ~>".pickRestart({
  A: "~@2 x!3 ~@7", B: "~ x", C: "~@14 x ~@3 x!2 ~@4",
})).gain(0.7)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@2 A ~@7 A ~@11 A ~@7 A ~@7 A ~@3 A ~@8>".pickRestart({
  A: "~@7 x ~@4",
})).gain(0.42)

// drums · crash
const crash = s("cr").struct("<x ~@49 x>").gain(0.7)

// drums · ride
const ride = s("rd").struct(`<
  ~ A B A C A C A C A D A C A C A C A C A C A E A C A C A C A D A C A C A C A D A C A B A C A C A C A F
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3 ~", B: "x ~ x ~ x ~ x ~ x!3 ~@13",
  C: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x!3 ~ x ~ x ~ x ~", D: "x ~ x ~ x ~ x ~ x!3 ~ x ~@11", E: "x!4 ~@8", F: "x",
})).gain(0.56)

stack(
  bass, pad_bowed, synth_strings_1, kick, snare, low_tom, low_tom_soft, hihat, mid_tom, mid_tom_soft, high_tom,
  high_tom_soft, crash, ride
)

More by Elvis Presley