Strudelify
Unchained Melody cover art

1965 · Just Once In My Life

Unchained Melody

The Righteous Brothers

KeyC majorTempo70 bpm
0:00/0:00
// Unchained Melody — The Righteous Brothers
// 70 bpm, 4/4, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 93 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · fretless bass · "bass"
const bass = note(`<
  ~ A B C D E F G H E F I J E K L M N O K E P Q E R S T U V W X Y Z A B C D E F G H E F I J E K L M N O K E P Q E R S T
  U V W X Y Z A B C D E F G AA E F I J E K L M N O K E P Q AB AC AD AE AF AG
>`.pickRestart({
  A: "g2@9 ~ g2@2 g2@5 ~ g2@5 ~", B: "e2@8 ~@2 e2@2 e2@5 ~ e2@5 ~", C: "c2@9 ~ c2@2 c2@5 ~ c2@5 ~",
  D: "d2@9 ~ d2@2 d2@5 ~ d2@5 ~", E: "g2@9 ~ g2 ~ g2@5 ~ g2@5 ~", F: "e2@9 ~ e2 ~ e2@5 ~ e2@5 ~",
  G: "d2@9 ~ d2 ~ d2@5 ~ d2@5 ~", H: "d2@9 ~ f#2@2 a2@6 d2@2 f#2 ~ a2 ~", I: "c2@9 ~ c2 ~ c2@5 ~ c2@5 ~",
  J: "d2@8 ~@2 d2 ~ d2@5 ~ d2@2 f#2@2 a2@2", K: "e2@9 ~ e2@2 e2@5 ~ e2@5 ~", L: "b1@9 ~ b1 ~ b1@5 ~ b1@6",
  M: "d2@9 ~ d2@2 d2@5 ~ d2@6", N: "g2@8 ~@2 g2 ~ g2@5 ~ g2@5 ~", O: "d2@8 ~@2 d2@2 d2@6 d2@5 ~",
  P: "a2@9 ~ a2@2 a2@5 ~ a2@5 ~", Q: "d2@8 ~@2 d2 ~ d2@6 d2@5 ~", R: "g2@9 ~ g2@2 g2@5 ~ g2@6",
  S: "c2@5 ~ c2@2 e2 ~ g2@2 d2@5 ~ d2@2 f#2 ~ a2 ~", T: "c2@5 ~ c2@2 e2 ~ g2@2 a#2@5 ~ a#2@2 f2 ~ d2 ~",
  U: "c2@5 ~ c2@2 e2 ~ g2@2 d2@5 ~ d2@2 f#2@2 a2 ~", V: "g2@5 ~ g2 ~ b2@2 g2@2 g2@6 b2@2 g2 ~ f2@2",
  W: "c2@5 ~ c2@2 e2@2 g2@2 d2@5 ~ d2@2 f#2@2 a2@2", X: "c2@5 ~ c2@2 e2 ~ g2 ~ a#2@5 ~ a#2@2 f2 ~ d2 ~",
  Y: "c2@5 ~ c2@2 e2@2 g2@2 f#2@2 a2 ~ f#2 ~ d3@2 a2 ~ f#2@2", Z: "g2@5 ~ b2@2 g2@2 b2@2 g2@9 ~ g2@2",
  AA: "d2@9 f#2@2 ~ a2@6 d2@2 f#2 ~ a2 ~", AB: "g1@9 ~ b1@2 d2@6 b1@2 d2@2 b1@2", AC: "e2@9 ~ g2@2 b2@6 g2@2 b2@2 g2@2",
  AD: "c2@5 e2 g2@3 e2 g2 e2", AE: "a1@10 c2@2 e2@5 ~ g2@6", AF: "g1@9 ~ b1@2 d2@6 g2@2 d2@2 b1@2", AG: "g1@7 ~@17",
})).s("gm_fretless_bass").gain(0.42)

// chords · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C D A B E D A B F D A B G H A I A G J K L M N O P A P O P A@2 B C D A B E D A B F D A B G H A I A G J K L M N O
  P A P O P A@2 B C D A B E D A B F D A B G H A I A G J K Q R S J T ~
>`.pickRestart({
  A: "~@6 [b3,d4,g4] ~@11 [b3,d4,g4] ~@5", B: "~@6 [b3,e4,g4] ~@11 [b3,e4,g4] ~@5",
  C: "~@6 [c4,e4,b4] ~@11 [c4,e4,b4] ~@5", D: "~@6 [c4,f#4,a4] ~@11 [c4,f#4,a4] ~@5",
  E: "~@6 [d4,f#4,a4] ~@11 [d4,f#4,a4] ~@5", F: "~@6 [c4,e4,b4] ~@11 [b3,e4,g4] ~@5",
  G: "~@6 [b3,d4,f#4] ~@11 [b3,d4,f#4] ~@5", H: "~@6 [d4,f#4,a4] ~@11 [c4,f#4,a4] ~@5",
  I: "~@6 [a3,d4,f#4] ~@11 [b3,d4,f#4] ~@5", J: "~@6 [a3,c4,e4] ~@11 [a3,c4,e4] ~@5",
  K: "~@6 [a3,c4,f#4] ~@11 [a3,c4,f#4] ~@5", L: "~@6 [g3,b3,d4] ~@11 [b3,d4,g4] ~@5",
  M: "~@6 [b3,d4,g4] ~@11 [b3,d4,f4] ~@5", N: "~@6 [e4,g4,c5] ~@11 [d4,f#4,a4] ~@5",
  O: "~@6 [c4,e4,g4] ~@11 [a#3,d4,f4] ~@5", P: "~@6 [c4,e4,g4] ~@11 [d4,f#4,a4] ~@5",
  Q: "~@6 [g3,b3,d4]@2 ~@10 [g3,b3,d4] ~@5", R: "~@6 [g3,b3,e4] ~@11 [g3,b3,e4] ~@5",
  S: "~@6 [c4,e4,g4] ~@11 [c4,e4,g4] ~@5", T: "~@6 [g3,b3,d4] ~@11 [g3,b3,d4] ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.44).pan(0.2)

// chords · synth strings 1 · "strings"
const synth_strings_1 = note(`<
  ~@8 A B C D E F G H I J K L F M N O P Q R Q S T U V W ~@7 A B C D E F G H I J K L F M N O P Q R Q S T U V W X Y Z AA
  AB AC AD A B C D E F G H I J K L F M N W AE AF AG AH ~
>`.pickRestart({
  A: "d4 f#4 a4 c5", B: "[g4,b4]", C: "e4@6 g4@12 e4@5 ~", D: "c4@3 e4", E: "d4@3 f#4", F: "g4", G: "e4@3 g4", H: "b4",
  I: "d4", J: "g4@3 d4", K: "~@3 f#4, a3@3 ~, ~ d4@3", L: "e4", M: "a3@3 c4", N: "d4 a4", O: "g4@19 b4@2 d5@2 ~",
  P: "f5@2 d5 f5, g4@3 ~ b4@4", Q: "[g4,c5,e5] [a4,d5,f#5]", R: "[g4,c5,e5] [f4,a#4,d5]",
  S: "[g4,b4,d5]@4 [g3,g4,b4]@3 [f3,f4,b4], ~ d5", // G Fdim
  T: "[c3,g4,c5,e5]@9 [c3,g4,c5,e5]@3 [d3,a4,d5,f#5]@9 [d3,a4,d5,f#5]@2 ~", // C D
  U: "[c5,e5]@3 [c5,e5] [a#2,a#4,d5]@3 [a#2,a#4,d5], c3 ~", V: "[c3,c5,e5]@3 [c5,e5] [d3,a4,d5]@3 [d3,a4,d5]",
  W: "[g3,g4,b4]@23 ~", X: "[b4,d5,g5]", Y: "[b4,e5,g5]@23 ~", Z: "[c5,e5,g5]@23 ~", AA: "[a4,c5,f#5]@23 ~",
  AB: "[g4,b4,d5]@11 ~", AC: "[g4,b4,e5]@23 ~", AD: "[a4,d5]@19 ~@5", AE: "[e3,e5]@17 ~@7, e4@23 ~", AF: "[c4,g4,c5]",
  AG: "[a3,e4,a4,c5,e5]@12 [a3,a4,c5,a5]@11 ~", AH: "[g3,d5,g5]",
})).s("gm_synth_strings_1").gain(0.58).pan(0.9)

// chords · piano
const piano = note(`<
  ~ A B C D A B E F A B C G A B H E I J K L M F A N O P O Q O P O Q A B C D A B E F A B C G A B H E I J K L M F A N O P
  O Q O P O Q R S T U V W X Y V W S Z R S AA AB V AC W AD AE AF AG AH AI AJ AG ~
>`.pickRestart({
  A: "g4 b4 d5 g5 d5 b4 g4 b4 d5 g5 d5 b4", B: "e4 g4 b4 e5 b4 g4 e4 g4 b4 e5 b4 g4",
  C: "c4 e4 g4 b4 g4 e4 c4 e4 g4 b4 g4 e4", D: "d4 f#4 a4 c5 a4 f#4 d4 f#4 a4 d5 a4 f#4",
  E: "d4 f#4 a4 d5 a4 f#4 d4 f#4 a4 d5 a4 f#4", F: "d4 f#4 a4 c5 a4 f#4 d4 f#4 a4 c5 a4 f#4",
  G: "d4 f#4 a4 d5 a4 f#4 d4 f#4 a4 c5 a4 f#4", H: "d4 f#4 b4 d5 b4 f#4 d4 f#4 b4 d5 b4 f#4",
  I: "d4 g4 b4 d5 b4 g4!2 b4 d5 g5 d5 b4", J: "d4 f#4 a4 b4 a4 f#4 d4 f#4 a4 d5 a4 f#4",
  K: "e4 g4 b4 d5 b4 g4 e4 g4 b4 d5 b4 g4", L: "g4 b4 d5 f#5 d5 b4 g4 b4 d5 f#5 d5 b4",
  M: "a4 c5 e5 a5 e5 c5 a4 c5 e5 a5 e5 c5", N: "g4 b4 d5 g5 d5 b4 g4 b4 d5 f5 d5 b4",
  O: "c4 e4 g4 c5 g4 e4 d4 f#4 a4 d5 a4 f#4", P: "c4 e4 g4 c5 g4 e4 a#3 d4 f4 a#4 f4 d4",
  Q: "g3 b3 d4 g4 d4 b3 g3 b3 d4 g4 d4 b3",
  R: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  S: "[e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~", // Em
  T: "[c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~ [c4,e4,b4] ~", // Cmaj7
  U: "[c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~", // F#dim
  V: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  W: "[g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~", // Em
  X: "[a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~", // D
  Y: "[a4,d5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~", // D F#dim
  Z: "[d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~", // D7 D
  AA: "[d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5] ~", // D
  AB: "[f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,c5] ~ [f#4,a4,c5] ~ [f#4,a4,c5] ~ [f#4,a4,c5] ~ [f#4,a4,c5] ~ [f#4,c5] ~", // D F#dim
  AC: "[f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~", // D
  AD: "[f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~", // Bm
  AE: "[a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~", // Am
  AF: "[a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~ [a4,c5,f#5] ~", // F#dim
  AG: "[b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // G
  AH: "[b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~", // Em
  AI: "[c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~", // C
  AJ: "[c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~", // Am
})).s("gm_piano").gain(0.4).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~ [x ~@4 x!2 ~@5]!78 [x ~@4 x!2 ~@2 x!3] [x ~@4 x!7] [x ~@4 x!2 ~@5]!11 x>").gain(0.35)

// drums · rim
const rim = s("rim").struct("<[x!4] [~ x ~ x]!91 ~>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@11 A ~@7 A ~@10 A ~@12 A ~@7 A ~@10 A ~@2 B@10 C B@4 D B@2 C B@7 E F>".pickRestart({
  A: "~@8 x!2 ~ x", B: "~ x ~ x", C: "~@3 x ~@4 x!2 ~ x", D: "~@6 x ~@11 x!6", E: "~@6 x ~@9 x!8", F: "x",
})).gain(0.45)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@91 [~@12 x!4 ~@8] ~>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@32 [~@6 x!6 ~@12] ~@31 [~@6 x!6 ~@12] ~@15 [~@12 x!6 ~@6] ~@12>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~ [x!12]!64 ~@28>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 A ~@31 A ~@3 A ~@3 A ~@6 A B ~@12>".pickRestart({
  A: "~@12 x!6 ~@6", B: "~@6 x!6 ~@12",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@32 A ~@31 A ~@3 A ~@3 A ~@6 A B ~@12>".pickRestart({
  A: "~@18 x!6", B: "x!6 ~@18",
})).gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@11 A ~@7 A ~@10 A ~@12 A ~@7 A ~@10 A ~@2 B@27 ~>".pickRestart({
  A: "x!2 ~@2", B: "x!12",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@65 A@2 ~@2 A ~@3 A@2 ~@3 A@2 B A@3 ~@7 C A>".pickRestart({
  A: "x", B: "x!4", C: "~@19 x!5",
})).gain(0.25)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@91 [~@12 x!7 ~@5] ~>").gain(0.1)

stack(
  bass, acoustic_guitar_steel, synth_strings_1, piano, kick, rim, snare, snare_soft, low_tom, hihat, mid_tom, high_tom,
  ride, crash, crash_soft
)

More by The Righteous Brothers