Strudelify

Earth Angel

Ben Benhardt

KeyF majorTempo120 bpm
0:00/0:00
// Earth Angel — Ben Benhardt
// 120 bpm, 6/8, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5927226; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// 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 pick · "Bass Guitar"
const bass = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F G@2 H@2 G E H@2 G E H@2 G I J@2 K L A B C
  D A B C D A B C D E F M E H@2 G E H@2 G E H@2 G I J@2 L N A B C D A B C D A B O P Q@3
>`.pickRestart({
  A: "f2@11 f2@2 e2@3", B: "d2@13 c2@3", C: "bb1@13 bb1@3", D: "c2@8 c2@3 d2@2 e2@3", E: "f2@8 f2@3 g2@2 a2@3",
  F: "bb2@8 bb2@3 a2@2 g2@3", G: "f2!2", H: "bb2!2", I: "f2@8 f2@3 f2@2 gb2@3", J: "g2!2", K: "e2!2", L: "c2!2",
  M: "f2", N: "c2@8 c3 b2 bb2 a2 ~ ab2 g2 gb2", O: "bb1", P: "c2", Q: "f2/3",
})).s("gm_electric_bass_pick").gain(0.3)

// chords · piano
const piano = note(`<
  A B C D A B C E A B C F A B C G A B C F A B C G A B C D A B C E A B C E H I J@2 K@2 L@2 K@2 L@2 K@2 M@2 N@2 O P A B C
  D A B C E A B C E H I J@2 K@2 L@2 K@2 L@2 K@2 L@2 N@2 O P A B C E A B C E A B Q R S T U
>`.pickRestart({
  A: "[a4,c5]@3 [a4,c5]@2 [a4,c5]@3 [a4,c5]@3 [a4,c5]@2 [a4,c5]@3, [f2,f3]@15 ~", // Am F
  B: "[f4,a4]@3 [f4,a4]@2 [f4,a4]@3 [f4,a4]@3 [f4,a4]@2 [f4,a4]@3, [d2,d3]@15 ~", // F D
  C: "[d4,f4]@3 [d4,f4]@2 [d4,f4]@3 [d4,f4]@3 [d4,f4]@2 [d4,f4]@3, [bb1,bb2]@15 ~", // Dm Bb
  D: "[e4,g4]@3 [e4,g4]@2 [e4,g4]@3 d5@3 c5@2 a4@3, [c2,c3]@15 ~, ~@8 [e4,g4]@5 ~@3", // Em C Em
  E: "[e4,g4]@3 [e4,g4]@2 [e4,g4]@3 [e4,g4]@3 [e4,g4]@2 [e4,g4]@3, [c2,c3]@15 ~", // Em C
  F: "[e4,g4]@3 [e4,g4]@2 [e4,g4]@3 [g4,c5]@3 [d2,f3,e4,g4]@2 [e2,g3,g4,c5]@3, [c2,e3]@5 ~@3", // Em C5 Em7 C
  G: "[e4,g4,c5]@3 [e4,g4,c5]!2 [e4,g4,c5]@3 d5@3 c5@2 a4@3, [c2,c3]@15 ~, ~@8 [e4,g4]@5 ~@3", // C Em
  H: "[a4,c5,f5]@3 [a4,c5,f5]@2 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@2 [a4,c5,f5]@3, [f2,f3]@15 ~", // F
  I: "[bb4,d5,f5]@3 [bb4,d5,f5]@2 [bb4,d5,f5]@3 [bb4,d5,f5]@3 [bb4,d5,f5]@2 [bb4,d5,f5]@3, [bb2,bb3]@15 ~", // Bb
  J: "[[a4,c5,f5]@3 [a4,c5,f5]@2 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@2 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@2 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@2 [a4,c5,f5]@3, [f2,f3]@15 ~]/2", // F
  K: "[~@24 [bb2,bb3]@3 [a2,a3]@2 [g2,g3]@3, [bb2,bb3]!2 [bb2,bb3] ~, ~@5 [d5,f5,bb5]@8 [d5,f5,bb5]@8 [d5,f5,bb5]@10 ~]/2", // Bb A G Bb
  L: "[~@24 [f2,f3]@3 [g2,g3]@2 [a2,a3]@3, [f2,f3]!2 [f2,f3] ~, ~@5 [a4,c5,f5]@8 [a4,c5,f5]@8 [a4,c5,f5]@10 ~]/2", // F G A F
  M: "[~@24 [f2,f3]@3 [f2,f3]@2 [gb2,gb3]@3, [f2,f3]!2 [f2,f3] ~, ~@5 [a4,c5,f5]@8 [a4,c5,f5]@8 [a4,c5,f5]@10 ~]/2", // F Gb F
  N: "[b4,d5,g5]@3 [b4,d5,g5]@2 [b4,d5,g5]@3 [b4,d5,g5]@3 [b4,d5,g5]@2 [b4,d5,g5]@3, [g2,g3]@15 ~", // G
  O: "[g4,c5,e5]@3 [g4,c5,e5]@2 [g4,c5,e5]@3 [c5,e5,g5]@3 [c5,e5,g5]@2 [c5,e5,g5]@3, [c3,c4]@15 ~", // C
  P: "[e5,g5,c6]@3 [e5,g5,c6]@2 [e5,g5,c6]@3 c6 [bb5,b5] a5 [g5,ab5] gb5 [e5,f5] eb5 [db5,d5], [c3,c4]@15 ~", // C Bmaj7 Abmaj7 Fmaj7 Dmaj7 C
  Q: "[bb3,d4,f4]@8 d4 [f4,bb4] d5 bb5@4 ~, [bb1,bb2]@15 ~, ~@11 f5 ~@4", // Bb Bb5 Bb
  R: "[c4,e4,g4]@8 c4 [e4,g4] c5 [e5,g5] c6 [e6,g6] c7@2, [c2,c3]@15 ~", S: "f4 a4 c5 a4, [f2,f3]@15 ~",
  T: "bb4 d5 f5 bb5, [f2,f3]@15 ~", U: "[f2,f3,a5,c6,f6]@15 ~",
})).s("gm_piano").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B C D A B C D A B C D A B C D A B C D E F G H A B C D A B C D A B C D E F I@2 J@2 I@2 J@2 E K J@2 I@2 L@2 M N A B C
  D A B C D A B C D E F I@2 J@2 I@2 L@2 E O J@2 I@2 L@2 P Q A B C D A B C D A B F H R@3
>`.pickRestart({
  A: "f3@11 g3@2 a3@3", B: "d3@8 a3@3 g3@2 f3@3", C: "d3@13 d3@3", D: "e3@5 f3@5 ~ g3@5", E: "f3", F: "d3", G: "bb2",
  H: "c3", I: "f3/2", J: "bb3/2", K: "f3@3 a3@2 c4@3 f4@3 c4@2 a3@3", L: "g3/2", M: "c3@3 e3@2 g3@3 c4@3 g3@2 c4@3",
  N: "e4@3 c4@2 e4@3 g4 [f4,gb4] [eb4,e4] [db4,d4] c4 [bb3,b3] [ab3,a3] [gb3,g3]", O: "f3@3 bb3@2 c4@3 f4@5 c4@3",
  P: "c4@13 c4@3", Q: "g4@3 a4@2 g4@3 a4@5 g4@3", R: "f3/3",
})).s("gm_tenor_sax").gain(0.3)

// other · violin
const violin = note("<~@88 A@4 B C D E F G H I J K L>".pickRestart({
  A: "[f4@7 c5]/4", B: "f4 g4", C: "a4 bb4", D: "bb4@11 a4@2 bb4@3", E: "c5@13 g4@3", F: "f4 e4", G: "d4", H: "bb3",
  I: "[c4,e4,g4]", J: "f4 a4 c5 a4", K: "bb4 d5 f5 bb5", L: "[a5,c6,f6]",
})).s("gm_violin").gain(0.3)

stack(bass, piano, tenor_sax, violin)