Strudelify

Devil in Her Heart

The Beatles

KeyG majorTempo120 bpm
0:00/0:00
// Devil in Her Heart — The Beatles
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 7 "Guitar 1" electric guitar clean (copy of ch 3 "Guitar 1" electric guitar clean)
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  ~ A B@2 C ~@7 D ~@3 D ~@12 D ~@3 D ~@12 D ~@3 D ~@12 E F G@2 H A B@2 I@2
>`.pickRestart({
  A: "~@3 [a4,c5]@2 [g4,b4]@3 [f#4,a4]@6 [e4,g4]@2", // Am G F#m Em
  B: "[[f#4,a4]@3 [f#4,a4]@2 [e4,g4]@3 [d4,f#4]@3 [c4,e4]@2 [b3,d4]@7 [b3,d4]@2 [c4,e4]@2 [b3,d4]@2 [b3,d4]@2 [a#3,c#4]@2 [a3,c4]@2]/2", // F#m Em D C Bm C Bm A#m …
  C: "[g3,b3] ~@7", D: "~@2 [g3,b3]!2 [a3,c4]!2 [b3,d4]!2", E: "~@3 [a4,c5]@2 [g4,b4]@3 [f#4,a4]@4 ~@4",
  F: "~@3 [a4,c5]@2 [g4,b4]@3 [f#4,a4]@6 [c4,e4]@2", // Am G F#m C
  G: "[[f#4,a4]@3 [f#4,a4]@2 [e4,g4]@3 [d4,f#4]@3 [c4,e4]@2 [b3,d4]@9 [c4,e4]@2 [b3,d4]@2 [b3,d4]@2 [a#3,c#4]@2 [a3,c4]@2]/2", // F#m Em D C Bm C Bm A#m …
  H: "[g3,b3]@3 [f#4,a4]@2 [f#4,a4]@3 [e4,g#4]@3 [e4,g#4]@2 [e4,g#4]@3", I: "[[g3,b3] ~@3 [g3,b3,e4,a4,d5]@12]/2",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.2)

// chords · electric guitar muted · "Guitar 2"
const electric_guitar_muted = note(`<
  ~ A B C D A B E F G H I J K L M J K L N O P A B E F G H I J K L M J K L N O P A B E F G H I J K L M J K L N O P A B E
  F G H I E G H E@2 G H E Q@2
>`.pickRestart({
  A: "[a3,c4,e4,g4,a4]@3 [a3,c4,e4,g4,a4] [a3,c4,e4,g4,a4]@2 [a3,c4,e4,g4,a4] ~", // Am7
  B: "[d3,f#3,a3,c4,d4]@3 [d3,f#3,a3,c4,d4] [d3,f#3,a3,c4,d4]@2 [d3,f#3,a3,c4,d4] ~", // D7
  C: "[g3,b3,d4,g4]@3 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4]!2", D: "[g3,b3,d4,g4] ~@7",
  E: "[g3,b3,d4,g4]@3 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2", // G
  F: "[g3,b3,d4,g4]@2 [g3,b3,d4,g4]!5 ~", G: "[a3,c4,e4,g4,a4]@3 [a3,c4,e4,g4,a4]!4 ~",
  H: "[d3,f#3,a3,c4,d4]@3 [d3,f#3,a3,c4,d4]!4 ~", // D7
  I: "[g3,b3,d4,g4]@3 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@4 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2", // G
  J: "[g3,b3,d4,f4,g4]@2 [g3,b3,d4,f4,g4]!6", K: "[c3,e3,g3,c4]!3 [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!3",
  L: "[c3,d#3,g3,c4]!3 [c3,d#3,g3,c4]@2 [c3,d#3,g3,c4]!3", M: "[g3,b3,d4,g4]!3 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]!3",
  N: "[a3,c#4,e4,g4,a4]!3 [a3,c#4,e4,g4,a4]@2 [a3,c#4,e4,g4,a4]!3", // A7
  O: "[d3,f#3,a3,c4,d4]@3 [d3,f#3,a3,c4,d4] [d3,f#3,a3,c4,d4]@2 [d3,f#3,a3,c4,d4]@4 [d3,f#3,a3,c4,d4]@2 [d3,f#3,a3,c4,d4]@2 [d3,f#3,a3,c4,d4]@2", // D7
  P: "[d3,f#3,a3,c4,d4] ~@7", Q: "[[g3,b3,d4,g4] ~@3 [g3,b3,e4,a4,d5]@12]/2",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.7)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~ A B C D A E F G A H F I J K L I M N O P Q A R F G S H F I M T U I V W O P Q A E F G A H F I J K L I M N O P Q A E F
  G A H F X A Y U Z AA R AB AC@2
>`.pickRestart({
  A: "a2@3 a2 a2@2 ~@2", B: "d2@3 d2 d2@2 ~@2", C: "g2@3 g2 d2 ~ d2 f#2", D: "g2 ~@7", E: "d2@3 d2!3 e2 f#2",
  F: "g2@3 g2 d2@2 d2 f#2", G: "g2@3 g2 d2@2 g2 ~", H: "d2@3 f#2 a2 d2 e2 g2", I: "g2@2 g2!2 a2!2 b2!2",
  J: "c2@3 c2 g2@2 g2 b1", K: "c2@3 c2 g2@2 c2 d2", L: "g2@3 g2 d3@2 d2 f#2", M: "c2@3 g2 g2@2 ~@2",
  N: "c2@3 g2 g2@3 c2", O: "a2@3 a2 e2@2 a2 ~", P: "d2@3 d2 a2@2 a1 c#2", Q: "d2 ~@7", R: "d2@3 f#2 a2 d2 e2 f#2",
  S: "a2@3 c2 e2@2 c#2 e2", T: "c2@3 g2 g2@2 ~ d2", U: "g2@3 g2 d2@3 f#2", V: "c2@3 g2 g2@2 ~ b1",
  W: "c2@3 g2 g2@2 c2 g2", X: "g2@3 g2 d2@2 g2@2", Y: "d2@3 f#2 a2@2 d2@2", Z: "g2@3 g2 d2!2 g2 ~",
  AA: "a2@3 a2 e2@2 a2@2", AB: "g2@3 g2 d2@4", AC: "[g2 ~ d2@2 g2@12]/2",
})).s("gm_electric_bass_pick").gain(0.48).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A B@2 C D B@2 C B@6 C B@5 C D B@2 C B@6 C B@5 C D B@2 C B@6 C B@5 C D B@2 C B@8 C B@2 C E ~
>`.pickRestart({
  A: "~@6 x!2", B: "x", C: "x ~@6 x", D: "x ~@5 x!2", E: "x!2",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<A B@3 A B@7 C B@3 C B@4 A B@7 C B@3 C B@4 A B@7 C B@3 C B@4 A B@15 D ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@2 x ~", C: "~@2 x!6", D: "~ x ~@2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@14 A ~@5 A B ~@9 A ~@5 A B ~@9 A ~@5 A B ~@11 A ~@2 A B ~>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~ A@3 B A@9 ~ A@5 ~@2 A@9 ~ A@5 ~@2 A@9 ~ A@5 ~@2 A@11 ~ A@2 ~@3>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.28)

// drums · crash
const crash = s("cr").struct("<~@71 [~ x] ~>").gain(0.32)

stack(electric_guitar_clean, electric_guitar_muted, bass, kick, snare, hihat, open_hat, crash)

More by The Beatles