Strudelify
Be Still My Beating Heart cover art

1987 · ...Nothing Like The Sun

Be Still My Beating Heart

Sting

KeyE♭ majorTempo115 bpm
0:00/0:00
// Be Still My Beating Heart — Sting
// 115 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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.

// other · ocarina
const ocarina = note(`<
  ~ A B C D E F G H I B C D E F G H I B C D E F G J K B L M N F O P Q B R M N F O S T U V W X F Y Z I B C D E F G H ~@8
  T U V W X F Y ~ A B C D E F G H ~@16 T U V W X F Y Z T U V W X F Y Z A B C D E F G H A B C D E F G H ~@2
>`.pickRestart({
  A: "~@2 g3 c4 d4 ~ g3 c4 d4 ~ g3 c4 eb4 ~@3", B: "c4 eb4 ~@4 c4 eb4 c4 ~ eb3 ~ c4 eb4 ~ c4",
  C: "g3 c4 eb4 ~ f4 eb4 c4 ~@2 eb4 c4 ~ g4 ~ c4 ~", D: "g4 ~ c4 ~ g4 eb4 c4 ~ g4 eb4 c4 ~ g4 eb4 c4 ~",
  E: "g4 eb4 c4 ~@3 c4 eb4 d4 ~@3 eb4 d4 c4 d4", F: "eb4 ~@3 eb4 d4 c4 d4 eb4 ~@3 eb4 c4 eb4 ~",
  G: "~@4 f4 eb4 c4 ~@2 eb4 c4 ~ g4 eb4 c4 ~", H: "g4 eb4 c4 ~ g4 eb4 c4 ~ g4 eb4 c4 ~ g4 eb4 c4 ~",
  I: "g4 ~ [g3,c4] c4 d4 ~ g3 c4 d4 ~ g3 c4 eb4 ~@3", J: "g4 f4 d4 ~ g4 f4 d4 ~ g4 f4 d4 ~ g4 f4 d4 ~",
  K: "g4 ~ d4 ~ d4 ~ g3 c4 d4 ~ g3 c4 eb4 ~@3", L: "g3 c4 eb4 ~ f4 eb4 c4 ~ f4 ~ c4 ~ g4 ~ c4 ~",
  M: "g4 ~ c4 ~ g4 eb4 c4 ~ g4 ~ c4 ~ g4 ~ c4 ~", N: "g4 ~ c4 ~@3 c4 eb4 d4 ~@3 eb4 d4 c4 d4",
  O: "~@4 f4 eb4 c4 ~ f4 ~ c4 ~ f4 ~ c4 ~", P: "f4 ~ c4 ~@5 g4 ~ b3 ~ g4 ~ b3 ~",
  Q: "~@4 d4 ~ g3 c4 d4 ~ g3 c4 eb4 ~@3", R: "g3 c4 eb4 ~@2 eb4 c4 ~@3 c4 ~ g4 ~ c4 ~",
  S: "f4 ~ c4 ~@5 g4 ~ c4 ~ g4 ~ c4 ~", T: "~@4 eb4 ~ g3 bb3 eb4 ~ g3 bb3 eb4 ~@3",
  U: "bb3 eb4 ~@4 bb3 eb4 bb3 ~ eb3 ~@5", V: "g3 d4 eb4 ~ f4 ~ c4 ~ f4 ~ c4 ~ g4 ~ c4 ~",
  W: "g4 ~ c4 ~ g4 ~ c4 ~ g4 ~ c4 ~@5", X: "~@6 c4 eb4 d4 ~@3 eb4 d4 c4 d4", Y: "~@4 f4 ~ c4 ~ f4 ~ c4 ~ g4 ~ c4 ~",
  Z: "~@8 g4 ~ b3 ~@3 b3 ~",
})).s("gm_ocarina").gain(0.04).pan(0.3)

// other · ocarina · soft notes
const ocarina_soft = note(`<
  ~@3 A B ~@4 B ~ A B ~@4 B ~ A B ~@4 C ~ D E B ~ D F G ~ D E B ~ D H I J K L M ~ N O P ~ A B ~@12 I J K L M ~ N ~@3 A B
  ~@20 I J K L M ~ N O I J K L M ~ N O ~@2 A B ~@6 A B ~@6
>`.pickRestart({
  A: "~@13 eb4 ~@2", B: "~ eb4 ~@14", C: "~ f4 ~@14", D: "~@9 eb4 ~@3 eb4 ~@2", E: "~ eb4 ~@7 eb4 ~@3 eb4 ~@2",
  F: "~ eb4 ~@2 g4 d4 b3 ~@2 d4 ~@3 d4 ~@2", G: "g4 d4 b3 ~@13", H: "~ eb4 ~@2 g4 eb4 c4 ~@2 eb4 ~@3 eb4 ~@2",
  I: "g4 eb4 c4 ~@13", J: "~@12 bb3 eb4 ~ bb3", K: "~@5 d4 ~@3 d4 ~@3 d4 ~@2", L: "~ d4 ~@3 d4 ~@3 d4 ~@2 g4 d4 c4 ~",
  M: "g4 d4 c4 ~@13", N: "~@5 eb4 ~@3 eb4 ~@3 eb4 ~@2", O: "g4 eb4 c4 ~ g4 d4 b3 ~@2 d4 ~@2 g4 d4 ~@2",
  P: "~ [d4,eb4] b3 ~@13", // Ebmaj7
})).s("gm_ocarina").gain(0.02).pan(0.3)

// other · ocarina
const ocarina_2 = note(`<
  ~ A B C D E F G H I B C D E F G H I B C D E F G J K B L M E F G N O B P M E F G Q R S T U V F W X Y B C D E F G H ~@8
  R S T U V F W ~ A B C D E F G H ~@16 R S T U V F W X R S T U V F W X A B C D E F G H A B C D E F G H ~@2
>`.pickRestart({
  A: "~@6 g3 c4 d4 ~ g3 c4 d4 ~ g3 c4", B: "eb4 ~@3 c4 eb4 ~@4 c4 eb4 c4 ~ eb3 ~",
  C: "c4 eb4 ~ c4 g3 c4 eb4 ~ f4 eb4 c4 ~ f4 eb4 c4 ~", D: "g4 eb4 c4 ~ g4 ~ c4 ~ g4 ~ c4 ~ g4 ~ c4 ~",
  E: "g4 ~ c4 ~ g4 ~ c4 ~@3 c4 eb4 d4 ~@3", F: "eb4 d4 c4 d4 eb4 ~@3 eb4 d4 c4 d4 eb4 ~@3",
  G: "eb4 c4 eb4 ~@5 f4 eb4 c4 ~ f4 ~ c4 ~", H: "g4 ~ c4 ~ g4 eb4 c4 ~ g4 ~ c4 ~ g4 ~ c4 ~",
  I: "g4 eb4 c4 ~ g4 ~ [g3,c4] c4 d4 ~ g3 c4 d4 ~ g3 c4", J: "g4 ~ d4 ~ g4 f4 d4 ~ g4 ~ d4 ~ g4 ~ d4 ~",
  K: "g4 f4 d4 ~ g4 ~ d4 ~ d4 ~ g3 c4 d4 ~ g3 c4", L: "c4 eb4 ~ c4 g3 c4 eb4 ~ f4 eb4 c4 ~ f4 ~ c4 ~",
  M: "g4 ~ c4 ~ g4 eb4 c4 ~ g4 eb4 c4 ~ g4 ~ c4 ~", N: "f4 ~ c4 ~ f4 ~ c4 ~@5 g4 ~ b3 ~",
  O: "g4 ~ b3 ~@5 d4 ~ g3 c4 d4 ~ g3 c4", P: "c4 eb4 ~ c4 g3 c4 eb4 ~@2 eb4 c4 ~@3 c4 ~",
  Q: "f4 ~ c4 ~ f4 ~ c4 ~@5 g4 ~ c4 ~", R: "g4 ~ c4 ~@5 eb4 ~ g3 bb3 eb4 ~ g3 bb3",
  S: "eb4 ~@3 bb3 eb4 ~@4 bb3 eb4 bb3 ~ eb3 ~", T: "~ eb4 ~ bb3 g3 d4 eb4 ~ f4 ~ c4 ~ f4 ~ c4 ~",
  U: "g4 ~ c4 ~ g4 ~ c4 ~ g4 ~ c4 ~ g4 ~ c4 ~", V: "g4 ~@9 c4 eb4 d4 ~@3", W: "eb4 c4 eb4 ~@5 f4 ~ c4 ~ f4 ~ c4 ~",
  X: "g4 ~ c4 ~@3 c4 ~@5 g4 ~ b3 ~", Y: "g4 eb4 [b3,c4] ~ g4 ~ [g3,c4] c4 d4 ~ g3 c4 d4 ~ g3 c4",
})).s("gm_ocarina").gain(0.01).pan(0.4)

// other · ocarina · soft notes
const ocarina_soft_2 = note(`<
  ~@4 A B ~ C D E ~@2 A B ~ C D E ~@2 A B ~ C F G ~ C H B ~ C I J ~ C H B ~ C K L ~ M N O ~ P Q R ~@2 A B ~ C D ~@8 L ~
  M N O ~ P ~@4 A B ~ C D ~@16 L ~ M N O ~ P Q L ~ M N O ~ P Q ~@3 A B ~ C D ~@3 A B ~ C D ~@2
>`.pickRestart({
  A: "~@5 eb4 ~@3 eb4 ~@3 eb4 ~@2", B: "~ eb4 ~@3 eb4 ~@10", C: "~@13 eb4 ~@2", D: "~ eb4 ~@7 eb4 ~@3 eb4 ~@2",
  E: "~@5 eb4 ~@10", F: "~ f4 ~@7 f4 ~@3 f4 ~@2", G: "~@5 f4 ~@10", H: "~ eb4 ~@11 eb4 ~@2",
  I: "~ eb4 ~@3 eb4 ~@2 g4 d4 b3 ~@2 d4 ~@2", J: "~ d4 ~@2 g4 d4 b3 ~@9", K: "~ eb4 ~@3 eb4 ~@2 g4 eb4 c4 ~@2 eb4 ~@2",
  L: "~ eb4 ~@2 g4 eb4 c4 ~@9", M: "bb3 ~@8 d4 ~@3 d4 ~@2", N: "~ d4 ~@3 d4 ~@3 d4 ~@3 d4 ~@2",
  O: "~ d4 c4 ~ g4 d4 c4 ~@9", P: "~@9 eb4 ~@3 eb4 ~@2", Q: "~ eb4 ~@2 g4 eb4 ~@2 g4 d4 b3 ~@2 d4 ~@2",
  R: "~ d4 ~@3 [d4,eb4] b3 ~@9", // Ebmaj7
})).s("gm_ocarina").gain(0).pan(0.4)

// chords · string ensemble 2 · "Low Strings"
const string_ensemble_2 = note(`<
  ~ A@8 B@4 C@2 D@2 E@4 F@2 G H I@4 F@2 G J K@8 L@4 M@2 G J K@6 F@2 K@2 M@2 F@2 G J L@4 M@2 G J N@8 O@8 K@2 M@2 F@2 G J
  L@4 M@2 P@2 L@4 M@2 G J A@16 Q@2
>`.pickRestart({
  A: "[c4@4 [d4,f4] [c4,eb4,g4]@3, [c2,g3]]/4", B: "[c4@4 [d4,f4] [c4,eb4,g4]@3, g3]/4", C: "[g3,c4]/2",
  D: "[[d4,f4] [bb3,d4,g4]@3]/2", E: "[c4 [d4,f4], g3]/4", F: "[ab3,c4,eb4]/2", G: "[ab3,c4,eb4]", H: "[g3,b3,d4]",
  I: "[[g3,c4] [f3,bb3], eb4]/4", J: "[b3,d4,g4]", K: "[g3,c4,eb4,g4]/2", L: "[[bb3,eb4] [c4,d4], g4]/4",
  M: "[bb3,d4,f4]/2", N: "[c2,g3,c4]/4", O: "[g3,d4,g4]/4", P: "[[ab3,c4,eb4]@3 [bb3,d4]]/2", Q: "c2/2",
})).s("gm_string_ensemble_2").gain(0.07).pan(0.2)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@9 A@4 B@2 A@8 C D E@2 F@2 G@2 C D H I J K H@3 L M N O@2 P@2 Q O R S R T R S R S R S U V W X Y Z M N O@2 P@2 Q O A@2
  ~@6 O AA@2 AB O AA O AC R S U V W X Y Z M N O@2 P@2 Q AD M N O@2 P@2 Q O A@2 ~@16
>`.pickRestart({
  A: "c2/2", B: "[c2@15 g1]/2", C: "f1", D: "g1", E: "c2", F: "bb1", G: "ab1", H: "c2@3 c2@5", I: "c2@6 c2@8 g1 ~",
  J: "bb1@2 ~ c2@5", K: "c2@3 c2@2 bb1@3", L: "c2@3 c2@2 ~ bb1@2", M: "eb2@3 eb2@5", N: "eb2@3 eb2@4 bb1",
  O: "g1@3 g1@5", P: "bb1@3 bb1@5", Q: "ab1@3 ab1@5", R: "c2@2 ~ c2 ~@2 c2@10", S: "c2@2 ~ c2 ~@2 c2@8 g1@2",
  T: "c2@2 ~ c2 ~@2 c2@4 bb1@6", U: "bb1@2 ~ bb1 ~@2 bb1@10", V: "bb1@2 ~ bb1 ~@2 bb1@8 f1@2",
  W: "ab1@2 ~ ab1 ~@2 ab1@10", X: "ab1@2 ~ ab1 ~@2 ab1@8 eb1@2", Y: "f1@2 ~ f1 ~@2 f1@10", Z: "g1@2 ~ g1 ~@2 g1@8 d1@2",
  AA: "g1@3 g1@3 f1@2", AB: "g1@3 f1@5", AC: "g1@3 g1@3 g1@2", AD: "ab1@3 ab1 ab1@2 bb1@2",
})).s("gm_fretless_bass").gain(0.45)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@5 A@5 ~@7 B C D E F G H I J I K L M N O I O ~@24 P Q L M N O I ~@15 R S T U V W X Y Z ~ P Q L M N O I ~ AA ~ AA ~@5
  AA ~ AA ~@4 AB@16 AC@2
>`.pickRestart({
  A: "[[eb4,g4]@16 [d4,f4]@5 [eb4,g4]@12 ~@7, [c2,c4]@4 ~]/5", // Eb Dm Eb C
  B: "~@2 [g3,g4]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 ~ [c4,c5] [c4,c5]@2 [c4,c5]@2", // G C
  C: "~@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [d4,d5]@2 [eb4,eb5]@2 [f4,f5] [eb4,eb5]", // C D Eb F Eb
  D: "[eb4,eb5]@2 [d4,d5]@2 [d4,d5]@2 [bb3,bb4]@2 [c4,c5] [d4,d5] [bb3,bb4] ~ [bb4,bb5]@2 ~@2", // Eb D Bb C D Bb
  E: "~ [bb3,bb4]!3 [c4,c5] [d4,d5] [eb4,eb5] [f4,f5]", F: "[eb4,eb5] [d4,d5] [c4,c5] [bb3,bb4] [ab3,ab4]!3 ~",
  G: "~ [ab3,ab4]!2 [bb3,bb4] [c4,c5] [d4,d5] [eb4,eb5] [f4,f5]", // Ab Bb C D Eb F
  H: "~@2 [d4,d5]@2 [d4,d5]@2 ~ [d4,d5] [d4,d5]@2 [d4,d5]@2 ~@4", I: "~@3 [g3,g4] [c4,c5] [d4,d5] [eb4,eb5] [f4,f5]",
  J: "[eb4,eb5] [c4,c5] [g3,g4] ~@5", K: "[d4,d5]", L: "~@3 [bb3,bb4] [c4,c5] [d4,d5] [eb4,eb5] [f4,f5]",
  M: "[eb4,eb5]", N: "~@3 [ab3,ab4] [c4,c5] [d4,d5] [eb4,eb5] [f4,f5]", O: "[c4,c5]",
  P: "~@3 g4 [c4,c5] [d4,d5] [eb4,eb5] [f4,f5]", Q: "d4", R: "~@14 [g4,g5] [ab4,ab5]",
  S: "[g4,g5]@3 [f4,f5] [eb4,eb5]@2 [d4,d5]@2", // G F Eb D
  T: "~@3 [eb4,eb5] [f4,f5]@2 [g4,g5]@2 [ab4,ab5]@2 [bb4,bb5]@2 [ab4,ab5]@2 [g4,g5]@2", // Eb F G Ab Bb Ab G
  U: "[f4,f5] [eb4,eb5] [d4,d5]@2 [eb4,eb5]@2 [d4,d5]@10", // F Eb D Eb D
  V: "~ [d4,d5] [f4,f5] [g4,g5] [ab4,ab5] [bb4,bb5] [ab4,ab5] [g4,g5]", // D F G Ab Bb Ab G
  W: "[f4,f5] [eb4,eb5] [d4,d5]@2 [f4,ab5] [eb4,g5] [d4,f5]@9 ~", // F Eb D Fm Eb Dm
  X: "~ [d4,d5] [f4,f5] [g4,g5] [ab4,ab5] [bb4,bb5] [ab4,ab5] [bb4,bb5]", // D F G Ab Bb Ab Bb
  Y: "~ [ab4,ab5] ~ [g4,g5] ~ [f4,f5] ~ [eb4,eb5]", Z: "~ [d4,d5] ~ [c4,c5] ~ [ab3,ab4] ~ [g3,g4]",
  AA: "~@3 [g3,g4] [bb4,bb5] [ab4,ab5] [g4,g5] [f4,f5]", AB: "c2/4", AC: "c2/2",
})).s("gm_string_ensemble_1").gain(0.16).pan(0.6)

// chords · overdriven guitar · "Overdrive Guitar"
const overdriven_guitar = note(`<
  ~@41 A@2 B@2 C@2 D E ~@8 F@2 C@2 G@2 H E A@2 B@2 C@2 D E ~@16 F@2 C@2 G@2 H E A@2 B@2 C@2 I@2 A@2 B@2 C@2 D E ~@18
>`.pickRestart({
  A: "[eb3,bb3]/2", B: "[g2,c4]/2", C: "[bb2,f3]/2", D: "[ab2,eb3]", E: "[g2,d3]", F: "[c3,g3]/2", G: "[ab2,eb3]/2",
  H: "[f2,c3]", I: "[[ab2,eb3]@7 [bb2,f3]]/2",
})).s("gm_overdriven_guitar").gain(0.16)

// other · taiko drum · "Taiko Drums"
const taiko_drum = note("<~ A ~ A ~ A ~ A ~ B@24 ~@40 A ~ A ~ A ~ A ~@51>".pickRestart({
  A: "g1 ~@15", B: "c1 ~@15",
})).s("gm_taiko_drum").gain(0.45)

// other · lead 3 calliope · "Synth Calliope"
const lead_3_calliope = note("<~@3 A@3 ~@125>".pickRestart({
  A: "[~ c6@2 ~]/3",
})).s("gm_lead_3_calliope").gain(0.02).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@24 B C B@5 D B C B E B@2 F@2 G H G H G H G I G J G J G J G@2 K H G L G@2 F A@2 ~@5 G M B@8 G J G J G J G I B C B
  E B@2 G C B C B E B@2 G C ~@18
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x ~@2 x ~@3 x", D: "x ~@2 x ~ x ~ x", E: "x ~@2 x ~ x ~@2", F: "x ~ x!2 ~@2 x ~@9",
  G: "x ~@2 x ~@2 x ~@9", H: "x ~@2 x ~@2 x ~@7 x ~", I: "x ~@2 x ~@7 x ~@2 x ~", J: "x ~@2 x ~@2 x ~@3 x ~@3 x ~",
  K: "x ~@2 x ~@2 x ~@4 x ~@2 x ~", L: "x ~@2 x ~@2 x ~@3 x ~@5", M: "x ~@2 x ~@12",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@9 [~ x ~ x]!24 ~@98>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@32 A B@7 C B@7 D B@7 E B@7 D B@7 ~@16 F B@7 E B@15 ~@19>".pickRestart({
  A: "~@12 x!3 ~", B: "~ x ~ x", C: "~@4 x ~ x ~@2 x ~ x!2 ~@3", D: "~@4 x ~@3 x!3 ~ x!3 ~", E: "~@2 x!2 ~@2 x ~",
  F: "~@8 x ~@3 x!4",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@33 A B@6 C A B@6 D A B@7 A B@6 E A B@6 ~@9 A B@6 F A B@6 E A B@7 A B@7 ~@18
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!5 ~@3", D: "x!3 ~@5", E: "x!4 ~@4", F: "x!4 ~@2 x ~",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@88 [~@3 x ~@4] ~@42>").gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@9 [x!16]!104 ~@18>").gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@33 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@25>".pickRestart({
  A: "x",
})).gain(0.64)

// drums · bongos
const bongos = s("bongo:4").struct("<~@81 [~ x ~ x]!7 ~@43>").gain(0.84)

// drums · congas
const congas = s("conga:13").struct("<~@9 [~ x ~ x]!24 ~@98>").gain(1.02)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@4 A ~@4 B@3 C D E F G B@3 C D E F G B@3 C D E F G B@3 C D E F G B@3 C D E F G B@3 C D E F G B@3 C D E F G B@3 C D E
  F G H I J C D E K L M N O C D P Q R B@3 C D E F G B@3 C D E F G B@3 C D E F G B@3 C D E F G B@3 C D E F G ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@2", B: "x!16", C: "x ~ x!5 ~ x!8", D: "x!3 ~ x!3 ~ x ~ x!3 ~ x!2", E: "x!3 ~ x!9 ~ x!2",
  F: "x!9 ~ x!3 ~ x ~", G: "x!13 ~ x!2", H: "x!5 ~ x!9 ~", I: "x!7 ~ x ~ x!5 ~", J: "x ~ x ~ x!9 ~ x!2",
  K: "x!9 ~ x ~ x ~ x ~", L: "x!3 ~ x!3 ~ x!5 ~ x!2", M: "x!5 ~ x!3 ~ x!3 ~ x ~", N: "x!3 ~ x!3 ~ x ~ x!5 ~",
  O: "x ~ x ~ x ~ x!7 ~ x!2", P: "x!3 ~ x!3 ~ x ~ x!3 ~@2 x", Q: "x!7 ~ x ~ x ~ x ~ x ~",
  R: "x ~ x ~@2 x!2 ~ x!5 ~ x ~",
})).gain(1.02)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct(`<
  ~@4 A ~@7 B C D E F ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F
  G H I B C D J K L M N B C O P Q ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F ~@3 B C D E F ~@2
// … 35 more lines

More by Sting