Strudelify
Straight to My Heart cover art

1987 · ...Nothing Like The Sun

Straight to My Heart

Sting

KeyB minorTempo162 bpm
0:00/0:00
// Straight to My Heart — Sting
// 162 bpm, 7/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 88 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(162/7)

// 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 · slap bass 1 · "StraightT"
const bass = note(`<
  ~@4 A@12 B C D E@4 A@4 B C D E@2 F G H I H J K L M N O P E@2 A@4 B C D E@2 A@4 B C D E@2 F G H I H J K L M N O P A@12
>`.pickRestart({
  A: "b1@2 ~@5 b1@2 ~@3 f#2@2 ~@2 f#2@2 b1@2 ~@3 b1@2 f#2@2 c#2@3 ~@2",
  B: "a1@5 ~@2 a1@2 ~@2 e2@2 ~@3 e2@2 a1@2 ~@3 a1@2 e2@2 b1@3 ~@2",
  C: "g1@4 ~@3 g1@2 ~@3 g1@2 f#1@4 e1@4 ~ e1@4 ~ f#1@4", D: "g1@5 ~@2 f#1@2 ~@3 f#1@2 ~@2 f#1@2 g1@4 ~ g1@4 f#1@3 ~@2",
  E: "b1@5 ~@2 b1@2 ~@3 f#2@2 ~@2 f#2@2 b1@2 ~@3 b1@2 f#2@2 c#2@3 ~@2",
  F: "d2@6 ~ b1@2 ~@3 b1@2 ~@2 b1@2 a1@2 ~@3 a1@4 g1@5", G: "d2@2 ~ d2@2 ~@2 b1@2 ~@2 b1@2 ~@3 b1@2 a1@3 ~@2 a1@4 g1@5",
  H: "d2@7 b1@2 ~@2 b1@2 ~@3 b1@2 a1@3 ~@2 a1@4 g1@4 ~", I: "d2@7 b1@2 ~@2 b1@2 ~@3 b1@2 a1@2 ~@3 a1@4 g1@5",
  J: "d2@2 d2@3 ~@2 b1@2 ~@3 b1@2 ~@2 b1@2 a1@2 ~@3 a1@4 g1@4 ~", K: "d2@7 b1@2 ~@2 b1@2 ~@3 b1@2 a1@3 ~@2 a1@4 ~ g1@4",
  L: "d2@7 b1@2 ~@2 b1@2 ~@3 b1@2 a1@2 ~@3 a1@4 g1@4 ~", M: "a1@31 ~", N: "g1", O: "f#1@7 f#2@9", P: "f#1 f#2",
})).s("gm_slap_bass_1").gain(0.25)

// other · piano
const piano = note("<~@4 A B C D E F G H E F G H ~@7 E F G H ~@19 E F G H ~@5 E F G H ~@17 A B C D ~@8>".pickRestart({
  A: "~@21 b4 ~@5 g4 ~@2 f#4 ~", B: "~@21 b4 ~@10", C: "~@18 f#4 g4 ~ a4 g4 f#4 ~@8",
  D: "~@2 c#5 d5 ~ a4 ~ c#5 d5 ~@2 c#5 ~ d5 f#4 ~@9 c#5 f#5 g5 a5 ~@4",
  E: "f#5 ~@4 f#5@2 e5 ~@4 d5 ~@3 f#5@6 ~@6 b4 ~ d5 ~", F: "f#5@3 ~@2 f#5@2 e5 ~@4 d5 ~@3 b4@6 ~@6 b4 ~ d5 ~",
  G: "f#5@3 ~@2 f#5@2 e5 ~@4 d5 ~@3 f#5@7 ~@5 b4 ~ d5 ~", H: "f#5@3 ~@2 f#5@2 e5 ~@4 d5 ~@3 b4@8 ~@4 b4 ~ d5 ~",
})).s("gm_piano").gain(0.22).pan(0)

// other · piano · soft notes
const piano_soft = note("<~@4 A B ~ C ~@68 A B ~ C ~@8>".pickRestart({
  A: "~@25 f#4 ~@6", B: "~@25 b4 ~@6", C: "~@6 a4 ~@2 g4!2 ~@4 f#4 g4 b4 d5 c#5 ~ d5 c#5 b4 ~@8",
})).s("gm_piano").gain(0.11).pan(0)

// chords · oboe
const oboe = note("<~@18 A B@2 ~@8 A B@2 ~@20 A B@2 ~@6 A B@2 ~@15 C D@4 E@2 ~@2>".pickRestart({
  A: "~@7 f#4@2 b4@2 ~ d5 ~ b4@2 b4@2 d5@2 ~ b4 ~ d5 ~ d5 ~ [b4,d5] ~@2 f#5 ~, ~@11 f#4@2 ~@19", B: "[b4@51 ~@13]/2",
  C: "~@16 b4@2 d5@2 ~ b4@2 ~@2 d5 ~ [b4,d5] ~@2 f#5 ~", D: "[b4@41 ~@7 b4@2 d5@2 ~ b4@2 ~@2 d5 ~ [b4,d5] ~@2 f#5 ~]/2",
  E: "[b4@41 ~@7 b4@2 d5@2 ~@12]/2",
})).s("gm_oboe").gain(0.17).pan(0)

// chords · oboe · soft notes
const oboe_soft = note("<~@18 A ~@10 A ~@22 A ~@8 A ~@17 B ~ B ~ B ~ C D@2>".pickRestart({
  A: "~@16 d5 ~@8 b4 ~@4 d5 ~", B: "~@23 d5@2 b4 ~@4 d5 ~", C: "~@21 b4@2 d5@2 [b4,d5] ~ [b4,d5] ~@2 [d5,f#5] ~",
  D: "[b4@41 ~@23]/2",
})).s("gm_oboe").gain(0.08).pan(0)

// other · oboe
const oboe_2 = note(`<
  ~@8 A B C D A B C D ~@2 E F@2 ~@2 A B C D ~@2 E F@2 ~@14 A B C D ~@2 E F@2 A B C D ~@2 E F@2 ~@15 G H@6 I@2
>`.pickRestart({
  A: "b4 ~@3 b4@3 a#4 ~@3 a#4 ~@4 a4@8 ~@8", B: "g#4 ~@3 g#4@2 ~ g4@2 ~@2 g4@2 ~@3 f#4@8 ~@8",
  C: "b4@2 ~@2 b4@3 a#4 ~@4 a#4 ~@3 a4@9 ~@7", D: "g#4@2 ~@2 g#4@3 g4@2 ~@2 g4@2 ~@3 f#4@9 ~@7",
  E: "~@9 f#4@2 ~ b4@2 d5 ~@3 b4@2 ~ d5@2 b4 ~ d5 ~ d5 ~@2 b4 ~", F: "[f#5 ~ b4@51 ~@11]/2",
  G: "~@18 b4@2 ~ d5@2 b4 ~ d5 ~ d5 ~@2 b4 ~", H: "[f#5 ~ b4@41 ~@7 b4@2 ~ d5@2 b4 ~ d5 ~ d5 ~@2 b4 ~]/2",
  I: "[f#5 ~ b4@41 ~@21]/2",
})).s("gm_oboe").gain(0.11).pan(1)

// chords · kalimba · B5 E5 Gdim B5 Gdim E5 Gdim
const kalimba = note(`<
  ~@2
  [~@2 [f#4,b4] ~@4 [f#4,b4] ~@4 [f#4,b4] ~ [b4,e5] ~@3 b4@2 ~@3 [b4,e5] ~ [g4,c#5] ~@2 b4 ~@3, ~@18 e5 ~@8 f#4@2 ~@3]
  [~@2 [f#4,b4] ~@4 [f#4,b4] ~@4 [f#4,b4] ~ b4@2 [g4,c#5] ~@2 e5 ~ [g4,c#5] ~ [b4,e5] ~ [g4,c#5] ~@6, ~@14 e5 ~@3 b4@2 ~@12]
  ~@84
>`).s("gm_kalimba").gain(0.11).pan(0.1)

// other · melodic tom
const melodic_tom = note("<~@16 [~@18 d4@5 ~@9]!3 ~@8 [~@18 d4@5 ~@9]!3 ~@20 [~@18 d4@5 ~@9]!3 ~@35>")
  .s("gm_melodic_tom").gain(0.36).pan(0.8)

// other · xylophone
const xylophone = note("<~@40 A B C D ~@28 A B C D ~@12>".pickRestart({
  A: "g4@2 ~@5 g4 ~@8 g4 ~ b4 ~@2 g4 ~ b4 ~ g4 ~@2 b4@2 g4 ~", B: "g4 ~@6 g4 ~@8 g4 ~ b4 ~@4 b4 ~ g4 ~ b4 ~@2 g4 ~",
  C: "f#4@2 ~@5 f#4 ~@8 g4 ~ b4 ~@2 g4 ~ b4 ~ g4 ~@2 b4@2 g4 ~", D: "f#4 ~@6 f#4 ~@8 g4 ~ b4 ~@4 b4 ~ g4 ~ b4 ~@2 g4 ~",
})).s("gm_xylophone").gain(0.17).pan(0.7)

// other · xylophone · soft notes
const xylophone_soft = note("<~@41 A ~ A ~@29 A ~ A ~@12>".pickRestart({
  A: "~@20 g4 ~@11",
})).s("gm_xylophone").gain(0.11).pan(0.7)

// other · shakuhachi
const shakuhachi = note("<~@32 A B C D A B C E ~@24 A B C D A B C E ~@16>".pickRestart({
  A: "~@2 f#6@2 a6 ~@2 a6@3 ~ a6@3 ~@2 a6@7 g6@3 ~ g6@4 ~",
  B: "d6@2 f#6@2 ~ a6 ~ a6@3 ~ a6@3 ~@2 a6@4 ~@2 g6@4 e6@3 ~@3",
  C: "d6@2 f#6 ~ a6 ~@2 a6@3 ~ a6@3 ~@2 a6@4 a6@2 g6@3 ~@2 g6@2 b6@2 ~",
  D: "a6@3 ~ a6@3 ~@2 d6 ~ f#6@2 ~ a6 ~ a6@5 ~ g6@4 ~ e6@2 ~@3",
  E: "a6@3 ~ a6@3 ~@2 d6 ~ f#6@2 ~ a6 ~ a6@5 ~ g6@4 ~ g6@2 ~@3",
})).s("gm_shakuhachi").gain(0.22).pan(1)

// chords · dulcimer
const dulcimer = note("<~@32 A@2 B A C A C@2 ~@24 A@2 B A C A C@2 ~@16>".pickRestart({
  A: "[d4,a4] ~@6 [e4,a4] ~@4 [e4,a4] ~@3 [e4,a4] ~ [f#4,a4] ~@4 [f#4,a4] ~@3 [g4,a4] ~@4", // D5 A5 F#m Gsus2
  B: "[d4,a4] ~@6 [e4,a4] ~@4 [e4,a4] ~@3 [e4,a4] ~@2 [f#4,a4] ~@3 [f#4,a4] ~@3 [g4,a4] ~@4", // D5 A5 F#m Gsus2
  C: "[d4,a4] ~@6 [e4,a4] ~@3 [e4,a4] ~@4 [e4,a4] ~ [f#4,a4] ~@4 [f#4,a4] ~@3 [g4,a4] ~@4", // D5 A5 F#m Gsus2
})).s("gm_dulcimer").gain(0.2).pan(0.2)

// chords · piano
const piano_2 = note("<~@40 A@4 ~@28 A@4 ~@12>".pickRestart({
  A: "[~@63 c#4@61 ~@4, e4@31 ~, a3@63 ~@65, ~@31 b3@93 ~@4]/4",
})).s("gm_piano").gain(0.17).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B ~@4 A B A B A B A B A B A B
>`.pickRestart({
  A: "~@2 x ~@9 x ~@8 x ~@8 x ~", B: "~@7 x ~@8 x ~@8 x ~@6",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B ~@4 A B A B A B A B A C D ~
>`.pickRestart({
  A: "x ~@4 x ~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~ x ~@4", B: "x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@3 x ~@4 x ~@3 x ~@4",
  C: "x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@3 x ~@2 x ~ x ~@3 x ~@2 x ~", D: "x",
})).gain(0.17)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~@2 B C
>`.pickRestart({
  A: "~@21 x ~@8 x ~", B: "~@5 x ~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~ x ~@4",
  C: "x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@3 x ~@2 x ~ x ~@3 x ~@2 x ~",
})).gain(0.11)

// drums · clap
const clap = s("cp").struct("<~@32 A B@3 A B@3 ~@24 A B@3 A B@3 ~@16>".pickRestart({
  A: "~@5 x ~@3 x ~@4 x ~@3 x ~@4 x ~ x ~ x ~@4", B: "x ~@4 x ~@3 x ~@4 x ~@3 x ~@4 x ~ x ~ x ~@4",
})).gain(0.17)

// drums · low tom
const low_tom = s("lt").struct(`<
  [~@9 x ~@17 x ~@4]!40
  [~@9 x ~@18 x ~@3]!4
  [~@9 x ~@17 x ~@4]!28
  [~@9 x ~@18 x ~@3]!4
  [~@9 x ~@17 x ~@4]!12
>`).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<A B A B C@16 D B A C@17 ~@4 A B C@26 ~@4 C@10 ~@2>".pickRestart({
  A: "x ~@4 x ~@3 x ~@6 x ~ x ~@4 x ~@4 x ~@3", B: "x ~@4 x ~@8 x ~ x ~@6 x ~@8", C: "x!2", D: "x ~@3 x ~@2 x",
})).gain(0.2)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<A B A B ~@16 C B A D ~@20 A B ~@40 E@2>".pickRestart({
  A: "~@7 x ~@6 x ~ x ~@8 x ~@6", B: "~@2 x ~@6 x ~@2 x ~@5 x ~@2 x ~@6 x ~ x ~", C: "~@23 x ~ x ~@6",
  D: "x ~ x ~@2 x ~@26", E: "x!2",
})).gain(0.08)

// drums · ride
const ride = s("rd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A C A B A B A B A B A B A B A B A
  B A B A B A B A B A B A C A B A C A B A B A B A B A B A B
>`.pickRestart({
  A: "~@5 x ~@8 x ~@8 x ~@8", B: "x ~@8 x ~@8 x ~@8 x ~@4", C: "x ~@8 x ~@8 x ~@8 x ~@2 x!2",
})).gain(0.17)

// drums · cowbell
const cowbell = s("cb").struct("<A@4 ~@17 B C D ~@20 B C E ~@41>".pickRestart({
  A: "x ~ x ~ x!2 ~ x!3 ~ x ~ x!2 ~ x ~ x ~@2 x!3 ~ x!3 ~@2 x!2",
  B: "x ~ x!2 ~ x ~ x!3 ~ x ~ x!2 ~ x!3 ~@2 x!3 ~ x!3 ~@2 x ~",
  C: "x ~ x ~ x!2 ~ x!3 ~ x ~ x!2 ~ x ~ x ~@2 x!3 ~ x!3 ~@2 x ~", D: "x", E: "x ~ x!2 ~ x ~ x!2 ~@23",
})).gain(0.08)

// drums · cowbell · soft notes
const cowbell_soft = s("cb").struct(`<
  [~ x ~@4 x ~@3 x ~@4 x ~@4 x ~@3 x ~@4 x ~@2]!4
  ~@17
  [~ x ~@4 x ~@3 x ~@4 x ~@4 x ~@3 x ~@4 x ~ x]!2
  ~@21
  [~ x ~@4 x ~@3 x ~@4 x ~@4 x ~@3 x ~@4 x ~ x]!2
  [~ x ~@4 x ~@2 x!3 ~ x ~@18]
  ~@41
>`).gain(0.03)

// drums · guiro
const guiro = s("guiro:0").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@5 D B A B A B A B A B A D B A B A B A
  D B A B A B A B C ~@6 D B A B A B A B E
>`.pickRestart({
  A: "x ~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~@2", B: "x ~@3 x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@3 x ~@2 x ~ x ~@4",
  C: "x", D: "~@2 x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~@2",
  E: "x ~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~ x",
})).gain(3.54)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@2 A B@2 C B C B C B C B C B C B C B C B D E F B C B C B C B C B C B C B C B C ~@3 G A B@2 C B C B C B C B D E F B C
  B C B C B C B C B C B C ~@3 G B C B C B C B C B H ~@2
>`.pickRestart({
  A: "~@18 x ~@2 x ~@5 x ~@2 x ~", B: "~@5 x ~ x ~@6 x ~ x ~@6 x ~ x ~@6",
  C: "x ~ x ~@6 x ~ x ~@6 x ~@2 x ~@5 x ~@2 x ~", D: "x ~@8 x ~@6", E: "~@7 x ~@8",
  F: "~@2 x ~@6 x ~ x ~@6 x ~@2 x ~@5 x ~@2 x ~", G: "~@7 x ~@12 x ~@11", H: "x ~ x ~@6 x ~ x ~@6 x ~@2 x ~@10",
// … 31 more lines

More by Sting