Strudelify
(I Just) Died in Your Arms cover art

Ransomed Healed Restored Forgiven

(I Just) Died in Your Arms

Cutting Crew

KeyB minorTempo127 bpm
0:00/0:00
// (I Just) Died in Your Arms — Cutting Crew
// 127 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "Gtr 2" distortion guitar (copy of ch 3 "Lead Gtr" overdriven guitar, 0.125 beats late)
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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.

// bass · fretless bass · "Bass Gtr"
const bass = note(`<
  ~@8 A@2 B C D@2 ~@2 E F G@2 A@2 H@2 I@2 J@2 K@2 L M N O P Q R S T U R V W X Y S T U R S T Z AA@3 Y R AB K@2 L M N O P
  Q K@2 L M N O P Q R S T U R V W X Y S T U R S T Z AC ~ AD@2 H@2 AE AF R S T U R V W AG ~@7 AH R S T U R V W AI R AJ W
  AK AL V W Q R AM AN AO R S AP AQ AR ~
>`.pickRestart({
  A: "b1/2", B: "a1", C: "f#1", D: "[b1@5 c#2 d2 e2@9]/2", E: "b1@5 ~ b1@2 b1@6 ~@2", F: "b1@5 ~ b1 ~ b1@6 ~@2",
  G: "[b1@2 ~ b1 b1@11 ~]/2", H: "g1/2", I: "a1/2", J: "[~@11 a2 ~ e2 f#2 ~, f#1@15 ~]/2", K: "b1@4 ~@2 b1 ~ b1@6 ~@2",
  L: "g1@5 ~ g1 ~ g1@6 ~@2", M: "g1@5 ~ g1@2 g1@6 ~@2", N: "a1@5 ~ a1@2 a1@5 ~@3", O: "a1@5 ~ a1 ~ a1@6 ~@2",
  P: "f#1@4 ~@2 f#1 ~ f#1@6 ~@2", Q: "f#1 ~ f#1@2 ~@2 f#1 ~ f#1@3 ~ f#1@3 ~", R: "b1@4 ~@2 b1 ~ b1@4 ~@4",
  S: "e1@4 ~@2 e1 ~ e1@4 ~@4", T: "a1@4 ~@2 a1 ~ a1@4 ~@4", U: "f#1@4 ~@2 f#1 ~ f#1@4 ~@4", V: "e1@5 ~ e1 ~ e1@4 ~@4",
  W: "a1@4 ~@2 a1 ~ a1@5 ~@3", X: "f#1@4 ~@2 f#1 ~ f#1@3 ~ f#1@2 ~@2", Y: "b1@4 ~@2 b1 ~ b1@5 ~@3",
  Z: "f#1@5 ~ f#1 ~ f#1@5 ~ f#1 ~", AA: "[g1@28 ~@2 b1@6 ~@2 b1 ~ b1@6 ~@2]/3", AB: "f#2@2 a2 ~ b2 ~ d3@8 ~@2",
  AC: "g1 ~@15", AD: "[e1@9 a1 b1 ~ d2 e2@2 d2]/2", AE: "f#1@2 f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~",
  AF: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~", AG: "f#1@4 ~@2 f#1 ~ f#1@3 ~ f#1@3 ~", AH: "~@12 f#1@3 ~",
  AI: "~ f#2 e2 d2 c#2 d2 c#2 a1", AJ: "e1@5 ~ e1 ~ e1@5 ~@3", AK: "f#1@5 ~ f#1 ~ f#1@6 ~@2",
  AL: "b1@5 ~ b1 ~ b1@5 ~@3", AM: "e1@5 ~ e1@2 g1@4 g#1@4", AN: "a1@5 ~ a1 ~ a1@5 ~@3", AO: "f#1@5 ~ f#1@2 a1@4 c#2@4",
  AP: "a1@2 ~ a1 a1@2 ~@2", AQ: "f#1@5 ~ f#1 ~ f#1@3 ~ f#1@4", AR: "b1",
})).s("gm_fretless_bass").gain(0.4)

// other · overdriven guitar · "Lead Gtr"
const overdriven_guitar = note(`<
  ~@16 A@2 B@2 ~@2 A@2 ~@2 C@2 ~@2 A@2 ~@2 D@2 ~@16 E F@5 ~@3 G@3 H@2 E I E J@3 K@2 ~ L@2 ~@2 M@2 ~@2 L@2 ~@2 M@2 ~ N@2
  O@2 P@2 Q@2 R@3 S T U@2 V ~@7 W ~ L@2 ~@2 M@2 ~ X Y@2 Z AA AB@2 AC X AD@2 Z AA AE@2 AC AF ~
>`.pickRestart({
  A: "[~ c#4 d4 a4@13]/2", B: "[~ c#4 d4 a4@2 b4@2 f#4@9]/2", C: "[~@2 c#4@2 d4@2 a4@4 b4@4 f#4@17 ~]/2",
  D: "[~@2 c#4@2 d4@2 a4@4 b4@4 f#4@4 [a3,d4]@2 [a3,d4]@2 f#3@2 [a3,d4]@2 [a3,d4]@2 f#3@3 ~]/2", // D5
  E: "b4 ~ b4 ~ f#4 ~ f#4 ~ a4 ~ a4 ~ e4 ~ e4 ~",
  F: "[f#4 ~ f#4 ~ d4 ~ d4 ~ [d4,e4] ~ b3 ~ d4 ~ [f#4,b4]@19 ~ [f#4,b4]@2 ~@4 [f#4,b4] ~ c#4@2 d4@2 a4@30 ~@4]/5", // Dsus2 B5
  G: "[~@10 [d4,f#4]@3 ~ [d4,f#4]@6 [c#4,e4] ~ [c#4,e4]@6 [b3,d4] ~ [b3,d4]@4 e3@3 ~@3 e3@3 ~@5]/3", // D C#m Bm
  H: "[~@4 e5 a4@10 ~]/2", I: "f#4 ~ f#4 ~ d4 ~ d4 ~ e4 ~ e4 ~ b3 ~ b3 ~",
  J: "[f#4 ~ f#4 ~ d4 ~ d4 ~ e4@2 b3 ~ d4@2 d4@6 c#4 ~ c#4@6 b3@2 a3@11 ~ c#3 ~ e3@4]/3",
  K: "[c#3@7 ~@3 b3@8 [e3,a3] ~ [e3,a3]@2 c#3@2 [e3,a3] ~ [e3,a3]@2 c#3@2 [e3,a3]@2]/2", // A5
  L: "[b4@6 a4@6 f#4@2 a4@15 ~@3]/2", M: "[b4@6 a4@6 f#4@2 a4@17 ~]/2", N: "[g2@31 ~]/2", O: "[d4@31 ~]/2",
  P: "[g2@15 ~]/2", Q: "[f#3@2 c#4@4 f#3@2 d4@4 f#3@2 e4@4 a#3@2 f#4@4 a#3@2 f#4@5 ~]/2",
  R: "[f#5@2 b4@9 ~ a4@2 e4@9 ~ e5@2 a4@10 ~@2 a2@9 ~]/3", S: "b3 ~ b3@4 a3 ~ b3@7 ~", T: "b3@2 d4@2 b3 e4@2 b3",
  U: "[d4@4 b3@2 e4@6 d4 ~ d4@6 c#4@2 b3@4 a3@5 ~]/2",
  V: "a3 f#3 e3 f#3 e3 d3 ~ d3 b2 d3 b2 a2 b2 a2 f#2 a2, ~@3 e3 ~@4",
  W: "~@2 [e3,a3]@2 [e3,a3]@2 c#3@2 [e3,a3] ~ [e3,a3]@2 c#3@3 ~", X: "e4@13 ~@3",
  Y: "[[g4,b4]@2 [g4,b4] ~ [g4,b4]@2 [e4,a4]@5 ~ [d4,a4]@2 [e4,a4]@14 ~@4]/2", Z: "~@12 d4@3 ~",
  AA: "d4@2 c#4@2 b3@2 b3@9 ~", AB: "[[g4,b4]@3 ~ [g4,b4]@2 [f#4,a4]@4 [d4,a4]@3 ~ [e4,a4]@18]/2",
  AC: "~@2 e5@2 a4 ~ a4@2 e5 ~ e5@2 a4@3 ~",
  AD: "[[g4,d5]@2 [g4,d5] ~ [g4,d5]@2 [e4,d5]@5 ~ [d4,e5]@2 [e4,c#5]@14 ~@4]/2", // G5 E7 Dsus2 C#m
  AE: "[[g4,d5]@3 ~ [g4,d5]@2 [f#4,d5]@4 [d4,e5]@3 ~ [e4,a4]@18]/2", AF: "b3",
})).s("gm_overdriven_guitar").gain(0.33).pan(0.2)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@3 A B@4 C@2 D E F@2 G@2 H@2 I@2 J@4 K@8 L@4 M N@7 O@8 P@4 H@2 J@4 K@8 L@4 M N@7 O@8 ~@8 Q@8 ~@3 A R@3 ~ M N@7 O@8 M
  S@8 ~
>`.pickRestart({
  A: "~@3 f#2", B: "[b2@5 c#3 d3 e3@3 d3 c#3@3 b2 a2@6 b2 c#3 d3@3 c#3 b2@3 a2@2]/4", C: "b2/2", D: "a2", E: "f#2",
  F: "[b2@5 c#3 d3 e3@9]/2", G: "[~ [a3,e4,a4], a2]/2", H: "[[f#3,b3,d4]@11 [a3,c#4,e4]@5]/2",
  I: "[~ c#5 d5 a5@2 b5@2 ~@4 [a3,c#4,e4]@5, [f#3,b3,d4]@11 ~@5, ~@7 f#5@9]/2", J: "[f#3,b3,d4]/4",
  K: "[a3 ~ [f#3,d4]@2, [c#4,e4] ~, ~ b3@3]/8", L: "[a3 b3, [c#4,e4]]/4", M: "[b3,d4,f#4]",
  N: "[g4@6 f#4@10 b3@6 a3@9 ~ a3@16 d4@16 g4@6 f#4@10 b3@5 ~@11 f#4@16, e4@2 f#4@2 e4@2 ~, b3 c#4@2 b3@2 c#4@2, ~@86 a3@25 ~]/7",
  O: "[d4@16 g4@6 f#4@9 ~@33 d4@16 g4@6 f#4@10 b3@5 ~@11 f#4@16, b3@38 a3@25 ~ b3@32 ~@6 a3@26, ~ e4@2 f#4@2 e4@2 ~, ~@32 c#4@31 ~@33 c#4@32]/8",
  P: "[[f#3,b3,d4]@27 [a3,c#4,e4]@5]/4", // Bm A
  Q: "[[d4,f#4]@16 a4@5 ~ g4@6 f#4@4 ~@32 d4@16 a4@6 g4@6 f#4@4 ~@16 f#4@16, b3@38 a3@26 b3@37 ~ a3@26, ~@16 e4@15 ~ c#4@31 ~@33 c#4@32, ~@2 e4 f#4@2 e4@2 ~]/8", // D
  R: "[b2@5 c#3 d3 e3@3 d3 c#3@3 b2 a2@9]/3",
  S: "[g4@6 f#4@10 b3@6 a3@9 ~ a3@16 d4@16 g4@6 f#4@10 b3@6 ~@26 [b3,d4]@16, e4 f#4 e4 f#4, b3 c#4@2 b3@2 c#4@2 ~, ~@86 a3@25 ~@17]/8", // Bm
})).s("gm_string_ensemble_1").gain(0.25).pan(0.7)

// chords · acoustic guitar nylon · "Acc.Guitr"
const acoustic_guitar_nylon = note(`<
  ~@8 A@2 ~@5 B C@4 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 ~@22 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 ~@66
>`.pickRestart({
  A: "[[b3,d4,f#4]@7 ~]/2", // Bm
  B: "~@3 b4 ~@3 g4 ~@3 b4 ~@2 a4 g4, d4@2 a4@2 d5@2 a4@2 d4@2 a4@2 d5@3 ~, ~ g4@3 ~ b4@2 ~@2 g4@3 ~ b4@2 ~",
  C: "[[b3,d4,f#4]@21 ~ [a3,c#4,e4]@9 ~]/2", D: "[[b3,d4,f#4]@29 ~@3]/2", E: "[[d4,f#4,a4]@7 ~]/2",
  F: "[[a3,c#4,e4]@29 ~@3]/2", G: "[[b3,c#4,e4]@7 ~]/2", H: "[[b3,d4,f#4]@3 ~]/2", I: "[[d4,f#4,a4]@29 ~@3]/2",
  J: "[[a3,c#4,e4]@7 ~]/2", K: "[[b3,c#4,e4]@25 ~@7]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.2)

// other · electric guitar clean · "E.Guitar"
const electric_guitar_clean = note(`<
  ~@36 A B C D A B C D A B C D A B C D ~@22 A B C D A B C E A B C D A B C D F@4 G@2 H@2 ~@16 A B C D A B C D A B C D A B
  C E A B C D A B C D I ~
>`.pickRestart({
  A: "~@5 b3@3, b2@7 ~, ~ f#3@6 ~, ~@4 b3@5 ~@7, ~@3 d4@5",
  B: "~@10 e4@5 ~, e3@15 ~, ~ b3@6 ~, ~@4 e4@5 ~@7, ~@3 g4@4 ~", C: "a3@4 [c4,c#4]@2 e4@4 e4@2 c#4 b3 a3@2",
  D: "f#3@2 e3@2 f#3@2 e3@2 f#3@2 e3@2 d3@3 ~", E: "~@2 [e4,a4]@2 [e4,a4]@2 c#4@2 [e4,a4]@2 c#4@2 [e4,a4]@3 ~",
  F: "[g3@30 ~@3 f#5@30 ~, ~@31 b4@31 ~@2, ~@32 d5@31 ~]/4", G: "[[g3,d4,g4]@15 ~]/2", H: "[[f#3,c#4,f#4]@7 ~]/2",
  I: "b2",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A@19 B A@7 C A@7 C A D E A@18 B A@7 F A@7 G A@3 B A@2 H D A@7 B ~@6 I J A@7 F A@7 G A@7 G B ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x", C: "x ~@2 x!2 ~@2 x", D: "x ~@6 x", E: "~@3 x!2 ~@3", F: "x ~@2 x ~@3 x",
  G: "x ~@2 x ~ x ~ x", H: "x ~ x!5 ~", I: "~@10 x!2 ~@4", J: "x ~@2 x ~@4",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@19 B A@7 C A@7 C A D A@19 B A@7 E A@7 F ~ F ~ F ~ F G H A@7 I ~@6 F E A@7 E A@7 F A@7 F ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~ x", C: "~@2 x ~@2 x!2 ~", D: "~ x ~@2", E: "~ x!2 ~ x ~ x ~", F: "~@3 x", G: "~ x ~@6",
  H: "~ x!2 ~@5", I: "~@2 x!3 ~ x ~ x ~@3 x ~@3",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A@3 B A@7 B A@3 B A@7 B A@15 B A B A@7 B A@3 B A@7 B A@7 B A@7 B A@7 B A@3 B ~@7 B A@3 B A@7 B A@7 B A@4 ~@2
>`.pickRestart({
  A: "x!8", B: "x!7 ~",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@35 A ~@17 B ~@19 A ~@15 C ~@6 D E ~@7 F ~@7 F ~@15 C ~@7 C ~@2>".pickRestart({
  A: "~@3 x ~@2 x!2", B: "~@3 x", C: "~ x ~@6", D: "~@7 x", E: "~@5 x!2 ~", F: "~@11 x ~@2 x!2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@19 A ~@7 A ~@7 B ~@17 C ~@3 A ~@7 A ~@7 B ~@15 D ~@3 E ~@2 D F ~@7 G ~@7 G ~@15 D ~@7 D ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@3 x ~@2", C: "~ x ~@2 x!2 ~@2", D: "~ x", E: "~ x ~ x!3 ~@2", F: "~@3 x!2 ~@3",
  G: "~@9 x!2 ~@2 x ~@2",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@19 A ~@7 A ~@3 A ~@7 A ~@15 A ~ A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@3 A ~@7 A ~@7 A ~@6
>`.pickRestart({
  A: "~@7 x",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@19 B ~@7 B ~@7 A C ~@20 B ~@3 B ~@3 B ~@7 A ~@7 A ~@7 A ~@7 B ~@3 B ~@3 B ~@7 B ~@7 A ~
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~@7 x",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~@36 A@22 ~@16 A@16 ~@8 A@8 ~@8 A@24 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.35)

stack(
  bass, overdriven_guitar, string_ensemble_1, acoustic_guitar_nylon, electric_guitar_clean, kick, snare, hihat, low_tom,
  mid_tom, open_hat, crash, tambourine
)