Strudelify

Hole in My Soul

Aerosmith

KeyC majorTempo75 bpm
0:00/0:00
// Hole in My Soul — Aerosmith
// 75 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 flute (copy of ch 7 pad new age)
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(75/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
const bass = note(`<
  A@2 B C D E F G H I J K L@2 M N O P Q R O P S T U V W X U V W Y Z@2 AA AB AC AD AE AF AG AH L@2 M N O P Q R O P S T U
  V W X U V W Y Z AI AJ AK AL AM AN AO AP AQ@2 AR N O AS Q R O P S T U V W AT U V W Y Z A@2 B C D AU D AV AW ~@2
>`.pickRestart({
  A: "[f3@3 f3 ~ d2 ~ f3 f3@3 f3 f3@3 [f2,f3], ~@4 f3@3 ~@9, ~@3 f2@4 ~]/2", B: "f2@4 ~ c3 e3 f3",
  C: "g3@2 f3 e3 f3@2 e3@4 ~@4 f2@2, ~@5 c3@3", D: "f2@6 ~ f2", E: "f2@6 ~ b1", F: "e2@6 ~ e2",
  G: "e2@8 e2@3 b2@2 e2@3", H: "f2!2", I: "f2 a#2@2 c2 ~@3 b1, ~ f2", J: "e1@6 ~ b1", K: "e2@8 e2@4 e3 b2 e2@2",
  L: "d2@6 ~ d2", M: "c2@6 ~ c2", N: "c2 d2", O: "g1@3 g1 g1@2 g1@2", P: "d2@4 d2@4 d3@4 ~ a2 d2@2, ~@3 d3",
  Q: "a1@2 ~ a1 a2@2 ~ a1", R: "c2@2 ~ c2!2 ~@2 c2", S: "a1@2 ~ a1 a1@2 ~ a1", T: "c2@4 ~@2 c2@2 c2@2 c3@2 c3 g2 c2@2",
  U: "d#2@2 ~ d#2 c2@2 ~ c2", V: "g1@2 ~ g1 g#1@2 ~ g#1", W: "f1@2 ~ f2 c#2@2 ~ c#2",
  X: "d#2@2 d#2@2 a#2@2 a#2@2 d#3!2 d#3@4 ~@2", Y: "d#2!2 d3 d2", Z: "g2!8", AA: "f2@2 ~ f2!3 ~ f2",
  AB: "f2@3 ~@2 e3@2 ~", AC: "e3@5 a#2 b2 e3@2 g3 e3 b2 e3@2 d3@2", AD: "e2@2 ~ e2!3 ~ e2",
  AE: "f2@2 ~ f2 ~ c2 c3 c2, ~@2 c3 ~", AF: "f2!2 ~ f2@3 ~ b1", AG: "e1@3 e1 e1@2 ~ b1", AH: "e2!8",
  AI: "f2@2 ~ f2!2 c3 e3 f3", AJ: "g3@2 f3 e3 f3@2 e3@4 c3@4 f2@2", AK: "e2@2 ~ e2 e2@2 b1@2",
  AL: "e1@2 ~ e1 b1 e2 b1 e1", AM: "f2@2 ~ f2 ~ c3 ~ c2, ~@2 f2 ~", AN: "f2@4 ~@2 f2@2 f3 c3 f2@4 f2@2",
  AO: "e2@2 ~ e2 e2@2 ~ e2", AP: "e2 b2@2 b1 e1!2 b1 e2", AQ: "~@3 a1 d2@2 ~ a1, d2 ~", AR: "~@3 g1 c2@3 b1, c2 ~",
  AS: "d2!2 d3@2", AT: "d#2@2 d#2@2 a#2@2 a#2@2 d#3 a#2 d#3@2 ~ a#2 d#3 a#2", AU: "f2@2 ~ c2 f1@2 ~ c2",
  AV: "f1@6 ~ f2", AW: "f2",
})).s("gm_fretless_bass").gain(0.71)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@50
  [~@2 g5 g4 g5 g4 g5 g4]
  [g5 g4 g5 g4 f#5 f#4 f#5 f#4]
  ~@27
  [~@2 g5 g4 g5 g4 g5 g4]
  [g5 g4 g5 g4 f#5 f#4 f#5 f#4]
  ~@22
>`).s("gm_string_ensemble_1").gain(0.8)

// chords · distortion guitar
const distortion_guitar = note(`<
  A@2 B@2 ~@5 C D E F G H I J K L M J K L M N O P Q N O P R S T ~@4 U@2 D E F G H I J K L M J K L M N O P Q N O P R S
  ~@8 F G H I J K L M J K L M N O P V N O P R S ~@2 A@2 B@2 ~@5
>`.pickRestart({
  A: "[~@6 [c5,c6]@2 [b4,b5]@4 [b4,b5]@2 [c5,c6] ~ [a4,a5]@4 [a4,a5]@2 [b4,b5] [a4,a5] [g4,g5]@6 ~@2, ~ [f4,f5]@3 ~@12, ~@4 [a4,a5]@4 ~@7 [b4,b5]@5 ~@12]/2", // C B C A B A G F …
  B: "[~@3 [c5,c6] [c5,c6]@6 ~@6, ~ [f4,f5]@7 ~@8, ~ [a4,a5]@3 ~@4]/2", C: "~@14 [b3,e4,a4]!2",
  D: "[b3,e4,a4]@8 ~@6 [b3,e4,g4]!2", E: "[b3,e4,g4] ~", F: "g4 d4 a3 g4 d4 a3 a4 a3 g4 d4 a3 g4 d4 a4 d4 a3",
  G: "f#4 d4 a3 a4 f#4 d4 a3 d4 f#4 d4 a4 a3 f#4 d4 a3 d4", H: "f#4 c4 g3 f#4 c4 g3 f#4 c4 e4 c4 g3 c4 e4 c4 g3 e4",
  I: "f#4 c4 g3 e4 c4 g3 f#4 c4 g4@3 ~ f#4@3 ~", J: "[g3,b3,d4] [g3,b3,d4]@2 [g3,b3,d4]@3 [g3,b3] ~, ~@3 d4",
  K: "[d4,g4]!2 [d4,f#4]!2", L: "[a3,c4,a4] [e4,a4] [c4,e4,a4] [e4,a4]",
  M: "[c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@3 [c4,e4] ~, ~@3 g4", N: "[d#4,g4,a#4]!2 [c4,d#4,g4]!2",
  O: "[g3,a#3,d4]!2 [g#3,c4,d#4]!2", P: "[f3,c4,f4]!2 [c#4,f4,g#4]!2", Q: "[a#3,d#4,g4]!2 [a#3,d#4,g4]@2",
  R: "[a#3,d#4,g4]!2 [a#3,d4,f#4] [a3,c4,f#4]", S: "[g3,c4,d4,g4,c5]", T: "[g3,b3,d4,g4,b4]",
  U: "[~@6 [c5,c6]@2 [b4,b5]@4 [b4,b5]@2 [c5,c6] ~ [a4,a5]@4 [a4,a5]@2 [b4,b5] [a4,a5] [g4,g5]@6 [b3,e4,a4]!2, ~ [f4,f5]@3 ~@12, ~@4 [a4,a5]@4 ~@7 [b4,b5]@5 ~@12]/2", // C B C A B A G Esus4 …
  V: "[a#3,d#4,g4]!3 ~", // D#
})).s("gm_distortion_guitar").gain(0.29)

// chords · lead 5 charang
const lead_5_charang = note(`<
  A B A B A C D E A C D E ~@22 A C D E A C D E ~@21 A C D E A C D E ~@21 A B A B A B A@2 B A B
>`.pickRestart({
  A: "[f4,a4] c4 [f4,a4] c4 [g4,b4] c4 [g4,b4] c4", B: "[a4,c5] c4 [a4,c5] c4 [g4,b4] c4 [g4,b4] c4",
  C: "[a4,c5] c4 [a4,c5] c4 [g4,b4] c4 [f4,a4] c4", D: "[e4,a4] b3 [e4,a4] b3 [e4,a4] b3 [e4,a4] b3",
  E: "[e4,g4] b3 [e4,g4] b3 [e4,g4] b3 [e4,g4] b3", // Em
})).s("gm_lead_5_charang").gain(0.45)

// chords · pad new age
const pad_new_age = note(`<
  ~@11 A B C D E F G H I J G H I K L M@2 K N O@2 P Q ~@7 R B C D E F G H I J G H I K N M@2 S L O@2 P ~@7 R B T U V W G H
  I J G H I K L M@2 S L O@2 X@2 Y ~@2 Z AA AB ~@4
>`.pickRestart({
  A: "~@14 [e4,g4]!2", B: "[d4,g4]", C: "[d4,f#4]@12 ~@2 d4 e4", D: "f#4@8 e4@5 d4 e4 ~", E: "f#4@2 e4@2 g4@2 f#4 g4",
  F: "g4@4 [g3,g4]@2 [a3,a4] [b3,b4]@3 [d4,d5]@2 [e4,e5]@2 [d4,g4,g5]@2", G: "b4@5 a4 g4 b4@3 a4@6",
  H: "a4@2 a4@2 b4@2 b4 [a4,c5]@3 [a4,c5]@2 [b4,d5]@2 ~ [b4,d5]", // Am Bm
  I: "[c5,e5]@2 [c5,e5]@2 [d5,f#5]@2 [d5,f#5] [e5,g5]@3 [e5,g5]@2 [f#5,a5]@2 [f#5,a5]@2", // C D Em F#m
  J: "g4@4 [g3,g4]@2 [a3,a4] [b3,b4]@3 [d4,d5]@2 [e4,e5]@2 [d4,g4,g5]@2, [g5,b5] ~", // G A B D E G5 G
  K: "[g5,a#5]@6 g5 g#5 [g5,a#5]@6 g5 g#5", // Gm
  L: "[g5,a#5]@2 [g5,a#5]@2 [g5,a#5]@2 [g5,a#5] [g5,a#5]@3 [g#5,c6]@3 g5 f5 g5", // Gm G#
  M: "[g#5@5 g5 f5 g5 g#5@2 g#5@2 c6@2 g#5 g#5@2 g5@7 ~@6 g5 g#5]/2",
  N: "[g5,a#5]@2 [g5,a#5]@2 [g5,c6]@2 [g5,a#5] [g5,a#5]@3 [g#5,c6]@3 g5 f5 g5", // Gm C5 Gm G#
  O: "[g#5@5 g5 f5 g5 g#5@2 g#5@2 c6@2 g#5 g#5@2 g5@7 a#5@4 a5@4]/2", P: "c6", Q: "b5", R: "~@14 g4!2",
  S: "[g5,a#5]@6 g5 g#5 c6@2 a#5@4 g5 g#5, ~@4 g5@3 ~", T: "[d4,f#4]@12 ~@2 f#4 g4", U: "a4@8 g4@5 f#4 g4 ~",
  V: "a4 g4 g5!2", W: "[g4,g5]@4 [g3,g4]@2 [a3,a4] [b3,b4]@3 [d4,d5]@2 [e4,e5]@2 [d4,g4,g5]@2",
  X: "[c6@12 a5@2 g5 f5]/2", Y: "e5@2 f5 c5@8 ~@5", Z: "~@2 f5@2 a5@2 c6@2 b5@6 c6 b5", AA: "a5@6 b5 a5 g5@6 c5@2",
  AB: "c5 f5 a5 c6 d6@4",
})).s("gm_pad_new_age").gain(0.72)

// chords · piano
const piano = note("<~@12 A@3 B ~@26 A@3 B ~@25 A@3 B ~@28>".pickRestart({
  A: "[~@13 d4 [f#4,a4] ~@7 [c4,e4] g3, [g4,a4]@2 [g4,a4]@2 [g4,a4]@2 g4@8 ~@4 f#4@5 ~, ~ d4@4 d4@4 d4@4 ~@3 [c4,f#4]@2 c4@2 [c4,e4]@2 ~@2, ~@3 a3@4 a3@4 a3@3 ~ a3@8 ~, ~@6 a4@2 [f#4,a4]@2 [f#4,a4]@2 [f#4,a4]@2 ~@3 g3@2 g3@2 g3@2 ~]/3", // F#m C Gsus2 Cdim C F#m
  B: "[c4,f#4] g3 [c4,e4] g3 [d4,g4] a3 [d4,f#4] a3", // Cdim C G5 D
})).s("gm_piano").gain(0.57)

// other · viola
const viola = note("<~@8 A B@2 ~@92>".pickRestart({
  A: "~ c3 f3@2 a3@2 c4@2", B: "[b3@2 a3@3 ~@3]/2",
})).s("gm_viola").gain(0.64)

// other · overdriven guitar
const overdriven_guitar = note("<~@63 A B C D@5 ~@3 E ~@28>".pickRestart({
  A: "~ a3@5 ~@2 b3 d4 e4 d4 e4@4", B: "~@2 e4 [c4,d4] a3 d4 c4 [g3,b3] a3@4 a3 g3 [f3,g3] e3",
  C: "d3 ~@3 [a#3,b3]@2 e4@2 ~ a#3 b3 g4@2 e4@3, e3@3 ~@5", // Bmaj7
  D: "[~ a3 [a3,b3] [f#3,g3] g3 f#3 [e3,f#3] b2@2 d3 e3@4 [f4,a4]@8 [g4,b4]@8 [a4,c5]@8 [a4,f5]@8 [b4,e5]@7 a#4 b4 g5@2 e5@3 b4 [g4,a4] e4@13 ~@5, ~@7 e3 ~@72]/5", // Asus2 Gmaj7 Esus2 F G Am Dm E5 …
  E: "c3 g2 g3 f#3",
})).s("gm_overdriven_guitar").gain(0.8)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A B@3 C B@3 D B@3 E B@3 E B@3 E B@5 E B@3 E B@3 C B@3 D B@3 E B D B E B@3 E F B@3 E B@3 E B@3 C B@3 D B@3 E B D B
  G B@3 H F ~@11
>`.pickRestart({
  A: "~@8 x ~ x ~ x ~ x!2", B: "~ x ~ x", C: "~@4 x ~@2 x!2 ~@3 x!2 ~@2", D: "~@4 x ~@7 x ~@2 x", E: "~@2 x ~@3 x!2",
  F: "~@4 x ~@7 x!2 ~@2", G: "~@2 x ~@4 x", H: "x!2 ~@2 x ~@7 x ~ x ~",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<A@11 B C@4 ~@17 D ~@8 C@4 ~@25 C@4 ~@17 A@10 E>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", D: "~@8 x!2 ~@6", E: "~ x ~ x ~ x ~@2",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@86 [~@13 x ~@2] ~@3 [~@5 x ~ x!2 ~@7] ~@12>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@15 A ~@7 B ~@13 B ~@3 B ~@3 A ~@7 B ~@8 C ~@3 B ~@3 B ~@3 A ~@7 B ~@3 D ~@4 C ~@11
>`.pickRestart({
  A: "~@10 x ~@3 x!2", B: "~@13 x ~@2", C: "~@11 x ~@3 x", D: "~@9 x ~@5 x",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@17 B A@8 ~@4 A@25 ~@4 A@11 C A@5 ~@11>".pickRestart({
  A: "x!8", B: "x!4 ~ x ~ x", C: "x!6 ~ x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@23 A ~@3 B ~@3 B ~ B ~@3 A ~@3 A ~@11 A ~@3 B ~@3 B C ~@3 A ~@3 A ~@11 A ~@3 D ~@3 B C ~@11
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@10 x ~ x!2 ~@2", C: "~@9 x!2 ~@5", D: "~@5 x ~@2",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<[x!4]!12 [x!8]!4 ~@26 [x!8]!4 ~@25 [x!8]!4 ~@17 [x!4]!11>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@7 A ~@2 B A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@7 A ~@2 B C ~ A ~ A ~ A ~ A@2 ~@3 A ~@3 A ~@7 A ~@2 B C ~ A D A
  ~ A ~ A ~@11
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@2 x!2 ~@3", D: "~@5 x ~ x",
})).gain(0.8)

stack(
  bass, string_ensemble_1, distortion_guitar, lead_5_charang, pad_new_age, piano, viola, overdriven_guitar, kick, snare,
  hihat, low_tom, mid_tom, open_hat, high_tom, ride, crash
)

More by Aerosmith