Strudelify

E-Mail My Heart

Britney Spears

KeyC majorTempo72 bpm
0:00/0:00
// E-Mail My Heart — Britney Spears
// 72 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 21, 4/4 at bar 22, 2/4 at bar 44, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/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.

// chords · piano · "Staff-3"
const piano = note("<A B A B ~@19 C D@3 ~@19 E F G H I J K L M N O P@3 Q@2 R@2 ~>".pickRestart({
  A: "[c4,e4] g3 [c4,e4] g3 [c4,e4] g3 [c4,e4] g3", B: "[b3,e4] g3 [b3,e4] g3 [b3,d4] g3 [b3,d4] g3",
  C: "~@4 [b3,e4] g3 [b3,e4] g3", // E5
  D: "[[b3,d4]@2 g3@2 [b3,d4]@2 f3@2 [g#3,c4,d4,f4]@3 [g#3,c4,d4,f4]@3 [g3,c4,e4]@9 ~ [g#3,c4,d4,f4]@3 [g#3,c4,d4,f4]@3 [g3,c4,e4]@5 ~ c4@2 d4@2 ~@8]/3", // Bm Dm7b5 C Dm7b5 C
  E: "[b3,e4] g3 [b3,e4] g3 [b3,d4] g3 [b3,d4] f3", F: "[g3,c4,e4] d4 e4 g4 c5 d5 e5 g5",
  G: "e4!2 a4 e4 [c4,e4] e4 d4 c4, c4@7 ~@9", H: "[b3,e4,g#4]@2 e4@2 a4@2 b4@2 [e4,a4,c5]@3 ~ [d4,g4,b4]@3 ~",
  I: "[c4,f4,b4] a4@2 g4 f4@2 e4 d4@2 e4 c4@3 ~ c4@2", J: "[g#3,c4,d4,g4]@2 f4@2 c4@2 [g#3,c4,d4,g4]@4 f4@3 ~ f4@2",
  K: "[g3,c4,e4] c4!2 d4 [g3,d4] d4!2 e4", L: "[g3,c4,e4]@2 e4@2 e4@2 c4@2 [a3,c4,f4]@3 ~ g4@2 a4@2",
  M: "[c4,e4] g4!2 c4 [a3,c4,f4] e4 d4 c4", N: "[a#3,f4] e4 d4@2 c4@2 [g3,c4,d4]@3 f4 e4@2 [g3,b3,d4]@3 ~",
  O: "[e3,g3] c4!2 d4 [g3,d4] d4!2 e4", // Em G5
  P: "[[g3,c4,e4]@2 e4@2 e4@2 c4@2 [a3,c4,f4]@3 g4 [c4,f4,g#4]@11 g3 g3@2 [g3,c4,e4]@13 ~ [b3,e4]@2 g3@2 [b3,e4]@2 g3@2]/3", // C F Fm C E5
  Q: "[[b3,d4]@2 g3@2 [b3,d4]@2 g3@2 g3@2 [g3,c4,e4]@13 ~ [b3,e4]@2 g3@2 [b3,e4]@2 g3@2]/2", // Bm C E5
  R: "[[b3,d4]@2 g3@2 [b3,d4]@2 g3@2 d4@2 c4@21 ~, ~@8 [e3,g3]@15 ~@9]/2", // Bm Em
})).s("gm_piano").gain(0.4)

// chords · music box · "Staff-3"
const music_box = note(`<
  ~@4 A B C D E F C G H I J K L M N O P Q@3 ~@2 R@3 S@4 T@2 U V@3 W X Y Z W AA AB ~@19
>`.pickRestart({
  A: "[g3,c4,e4]@2 e4@2 e4@2 ~@2 [b3,d4]@2 [b3,d4,g4]@5 ~, ~@3 g4@2 ~@3", // C Bm G
  B: "[g3,c4]@2 c4!3 d4 e4 [g3,c4,e4]@2 d4 c4@5 g3", C: "[f3,a3]@2 c4@2 c4@2 f4@2 [c4,e4]@2 d4@2 c4@3 e4",
  D: "[a3,f4] e4 d4@2 c4@2 [f3,a#3,d4]@5 ~ [g3,c4]@2 d4@2", // Dm A# C5
  E: "[g3,c4,e4]@2 e4@2 e4 ~@3 [b3,d4]@2 [b3,d4,g4]@3 ~ c4 a3, ~@5 a4@5 ~@6", // C Bm G
  F: "[g3,c4] a3 c4@2 c4 d4 e4 [g3,c4,e4]@2 d4 c4@4 g3!2", G: "[a#3,f4] e4 d4@2 c4@2 [g3,c4,d4]@5 ~ [g3,b3]@3 ~",
  H: "e4!2 a4 e4 [c4,e4] e4 d4 c4, c4@7 ~@9", I: "[b3,e4,g#4]@2 e4@2 a4@2 b4@2 [e4,a4,c5]@3 ~ [d4,g4,b4]@3 ~",
  J: "[c4,f4,b4] a4@2 g4 f4@2 e4 d4@2 e4 c4@3 ~ c4@2", K: "[g#3,c4,d4,g4]@2 f4@2 c4@2 [g#3,c4,d4,g4]@4 f4@3 ~ f4@2",
  L: "[g3,c4,e4] c4!2 d4 [g3,d4] d4!2 e4", M: "[g3,c4,e4]@2 e4@2 e4@2 c4@2 [a3,c4,f4]@3 ~ g4@2 a4@2",
  N: "[c4,e4] g4!2 c4 [a3,c4,f4] e4 d4 c4", O: "[a#3,f4] e4 d4@2 c4@2 [g3,c4,d4]@3 f4 e4@2 [g3,b3,d4]@3 ~",
  P: "[e3,g3] c4!2 d4 [g3,d4] d4!2 e4", // Em G5
  Q: "[[g3,c4,e4]@2 e4@2 e4@2 c4@2 [a3,c4,f4]@3 g4 [c4,f4,g#4]@11 g3 g3@2 [g3,c4,e4]@13 ~@9]/3", // C F Fm C
  R: "[~@8 [g3,c4,e4]@2 e4@2 e4@2 ~@2 [b3,d4]@2 [b3,d4,g4]@5 ~ [g3,c4]@2 c4!3 d4 e4 [g3,c4,e4]@2 d4 c4@5 g3 [f3,a3]@2 c4@2 c4@2 f4@2, ~@7 g4@2 ~@15]/3", // C Bm G C5 C F
  S: "[[c4,e4]@2 d4@2 c4@3 e4 [a3,f4] e4 d4@2 c4@2 [f3,a#3,d4]@5 ~ [g3,c4]@2 d4@2 [g3,c4,e4]@2 e4@2 e4 ~@3 [b3,d4]@2 [b3,d4,g4]@3 ~ c4 a3 [g3,c4] a3 c4@2 c4 d4 e4 [g3,c4,e4]@2 d4 c4@4 g3!2 [f3,a3]@2 c4@2 c4@2 f4@2, ~@29 a4@5 ~@30]/4", // C Dm A# C5 C Bm G C5 …
  T: "[[c4,e4]@2 d4@2 c4@3 e4 [a#3,f4] e4 d4@2 c4@2 [g3,c4,d4]@5 ~ [g3,b3]@3 ~ e4@2 e4@2 a4@2 e4@2, ~@24 c4@7 ~]/2", // C A#5 Gsus4 G
  U: "[c4,e4] e4 d4 c4 [b3,e4,g#4] e4 a4 b4", // C E
  V: "[[e4,a4,c5]@3 ~ [d4,g4,b4]@3 ~ [c4,f4,b4] a4@2 g4 f4@2 e4 d4@2 e4 c4@3 ~ c4@2 [g#3,c4,d4,g4]@2 f4@2 c4@2 [g#3,c4,d4,g4]@4 f4@3 ~ f4@2 [g3,c4,e4]@2 c4@2 c4@2 d4@2]/3", // Am G F G#maj7 C
  W: "[g3,d4] d4!2 e4 [g3,c4,e4] e4!2 c4", X: "[a3,c4,f4]@3 ~ g4@2 a4@2 [c4,e4]@2 g4@2 g4@2 c4@2",
  Y: "[a3,c4,f4]@2 e4@2 d4@2 c4@2 [a#3,f4] e4 d4@2 c4@2 [g3,c4,d4]@2", // F A#5 Gsus4
  Z: "~ f4 e4@2 [g3,b3,d4]@3 ~ [e3,g3]@2 c4@2 c4@2 d4@2", AA: "[a3,c4,f4]@3 g4 [c4,f4,g#4]@11 g3",
  AB: "g3@2 [g3,c4,e4]@13 ~", // C
})).s("gm_music_box").gain(0.4)

// chords · acoustic guitar steel · "Staff-4"
const acoustic_guitar_steel = note(`<
  ~@2 A B C D E F C D E G H I J K L M N O L P Q R S@3 T U V@2 T U W X Y Z AA AB AC AD AE AF AC AG A AH AI H I J K L M N
  O L P Q R AJ AK AL@3
>`.pickRestart({
  A: "[g3,c4,e4]@2 [g3,c4,e4]@5 ~ [g3,c4,e4]@2 [g3,c4,e4]@5 ~", // C
  B: "[g3,b3,e4]@2 [g3,b3,e4]@5 ~ [g3,b3,d4]@2 [g3,b3,d4]@5 ~", // Em G
  C: "[g3,c4,e4]@2 [g3,c4,e4]@5 ~ [b3,d4,g4]@2 [b3,d4,g4]@5 ~", // C G
  D: "[g3,a3,c4]@2 [g3,a3,c4]@5 ~ [g3,c4,e4]@2 [g3,c4,e4]@5 ~", // Am7 C
  E: "[f3,a3,c4]@2 [f3,a3,c4]@5 ~ [g3,c4,d4]@2 [g3,c4,d4]@5 ~", // F Gsus4
  F: "[a3,f4]@2 [a3,f4]@3 ~ [f3,a#3,d4]@5 ~ [g3,c4]@2 d4@2", // Dm A# C5
  G: "[a#3,f4]@2 [a#3,f4]@3 ~ [g3,c4,d4]@2 [g3,c4,d4]@3 ~ [g3,b3]@2 [g3,b3]@2", // A#5 Gsus4 G
  H: "[a3,c4,e4]@2 [a3,c4,e4]@5 ~ [g3,c4,e4]@2 [g3,c4,e4]@5 ~", // Am C
  I: "[b3,e4,g#4]@2 [b3,e4,g#4]@5 ~ [e4,a4,c5]@3 ~ [d4,g4,b4]@3 ~", J: "[c4,f4,b4]@7 ~ [c4,f4,b4]@7 ~",
  K: "[g#3,c4,d4,g4]@2 [g#3,c4,d4,g4]@5 ~ [g#3,c4,d4,g4]@2 [g#3,c4,d4,g4]@5 ~", // G#maj7
  L: "[g3,c4,e4]@7 [g3,c4,e4] [g3,b3,d4]@7 [g3,b3,d4]", // C G
  M: "g3@3 ~ g3@3 [g3,a3,c4,e4] [a3,c4,f4]@7 [a3,c4,f4], [a3,c4,e4]@7 ~@9", // Am7 F Am
  N: "[g3,c4,e4]@7 [g3,c4,e4] [a3,c4,f4]@7 [a3,c4,f4]", O: "[a#3,d4,f4]@7 [a#3,d4,f4] [g3,c4,d4]@7 [g3,c4,d4]",
  P: "g3@3 ~ g3@3 [g3,a3,c4,e4] [a3,c4,f4]@2 [a3,c4,f4]@5 ~, [a3,c4,e4]@7 ~@9", // Am7 F Am
  Q: "[c4,e4,g#4]@2 [c4,e4,g#4]@5 ~ [g3,c4,e4]@2 [g3,c4,e4]@5 ~", // Caug C
  R: "[g3,c4,e4]@2 [g3,c4,e4]@5 ~ [g3,b3,e4]@2 [g3,b3,e4]@5 ~", // C Em
  S: "[[g3,b3,e4]@2 [g3,b3,e4]@5 ~ [g#3,c4,d4,f4]@3 [g#3,c4,d4,f4]@3 [g3,c4,e4]@9 ~ [g#3,c4,d4,f4]@3 [g#3,c4,d4,f4]@3 [g3,c4,e4]@5 ~ c4@2 d4@2 [g3,c4,e4]@2 [g3,c4,e4]@5 ~]/3", // Em Dm7b5 C Dm7b5 C
  T: "[b3,d4,g4]@2 [b3,d4,g4]@5 ~ [g3,a3,c4]@2 [g3,a3,c4]@5 ~", // G Am7
  U: "[g3,c4,e4]@2 [g3,c4,e4]@5 ~ [f3,a3,c4]@2 [f3,a3,c4]@5 ~", // C F
  V: "[[g3,c4,d4]@2 [g3,c4,d4]@5 ~ [a3,f4]@2 [a3,f4]@3 ~ [f3,a#3,d4]@5 ~ [g3,c4]@2 d4@2 [g3,c4,e4]@2 [g3,c4,e4]@5 ~]/2", // Gsus4 Dm A# C5 C
  W: "[g3,c4,d4]@2 [g3,c4,d4]@5 ~ [a#3,f4]@2 [a#3,f4]@3 ~ [g3,c4,d4]@2", // Gsus4 A#5 Gsus4
  X: "[g3,c4,d4]@3 ~ [g3,b3]@2 [g3,b3]@2 [a3,c4,e4]@2 [a3,c4,e4]@5 ~", // Gsus4 G Am
  Y: "[g3,c4,e4]@2 [g3,c4,e4]@5 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@5 ~", Z: "[e4,a4,c5]@3 ~ [d4,g4,b4]@3 ~ [c4,f4,b4]@7 ~",
  AA: "[c4,f4,b4]@7 ~ [g#3,c4,d4,g4]@2 [g#3,c4,d4,g4]@5 ~", // F G#maj7
  AB: "[g#3,c4,d4,g4]@2 [g#3,c4,d4,g4]@5 ~ [g3,c4,e4]@7 [g3,c4,e4]", // G#maj7 C
  AC: "[g3,b3,d4]@7 [g3,b3,d4] g3@3 ~ g3@3 [g3,a3,c4,e4], ~@8 [a3,c4,e4]@7 ~", // G Am7 Am
  AD: "[a3,c4,f4]@7 [a3,c4,f4] [g3,c4,e4]@7 [g3,c4,e4]", AE: "[a3,c4,f4]@7 [a3,c4,f4] [a#3,d4,f4]@7 [a#3,d4,f4]",
  AF: "[g3,c4,d4]@7 [g3,c4,d4] [g3,c4,e4]@7 [g3,c4,e4]", // Gsus4 C
  AG: "[a3,c4,f4]@2 [a3,c4,f4]@5 ~ [c4,e4,g#4]@2 [c4,e4,g#4]@5 ~", // F Caug
  AH: "[g3,b3,e4]@2 [g3,b3,e4]@5 ~ [g3,b3,e4]@2 [g3,b3,e4]@5 ~", AI: "[g3,c4,e4]@7 [g3,c4,e4] [g3,c4,e4]@7 [g3,c4,e4]",
  AJ: "[g3,b3,d4]@2 [g3,b3,d4]@5 ~ [c4,e4,g4]@2 [c4,e4,g4]@5 ~", // G C
  AK: "[d4,e4,g4]@2 [d4,e4]@4 d4 e4 [g3,b3,e4]@2 [g3,b3,e4]@5 ~, ~@2 g4@3 ~@11", // Em7 Dsus2 Em
  AL: "[[g3,b3,d4]@2 [g3,b3,d4]@5 ~ [a3,c4,f4]@2 [a3,c4,e4]@23 ~@15]/3", // G F Am
})).s("gm_acoustic_guitar_steel").gain(0.4)

stack(piano, music_box, acoustic_guitar_steel)

More by Britney Spears