Strudelify

final goodbye

Rihanna

KeyA minorTempo72 bpm
0:00/0:00
// final goodbye — Rihanna
// 72 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (6/8 at bar 1, 3/8 at bar 21, 3/4 at bar 21, 3/8 at bar 31, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/28197; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 71 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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.

// chords · string ensemble 1 · "Violin 1"
const string_ensemble_1 = note(`<
  ~@12 A B C B C B C B D ~@10 A B C B C B C B E D F G H I F G H@2 J K J K J K J K J K J K J K L@2 ~@4 M@2
>`.pickRestart({
  A: "~ [a4,e5,g5]", B: "[g4,b4,d5] [e4,b4,d5]", C: "[a4,c5,e5] [a4,e5,g5]", D: "[a4,c5,e5] ~",
  E: "[a4,c#5,e5] [a4,c5,e5]", F: "[a4,c5,d5,f5]!2", G: "[g4,b4,d5]!2", H: "[a4,c#5,e5]!2",
  I: "[a4,c#5,e5]@3 c#5 d5 e5", J: "[a4,e5,g5] [g4,b4,d5]", K: "[e4,b4,d5] [a4,c5,e5]",
  L: "[[a4,e5,g5] [g4,b4,d5]@3]/2", M: "[a4,e5]/2",
})).s("gm_string_ensemble_1").gain(0.3)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  A B C B D B C B C B C B E F G F G F H I ~ J K J L J L J L J L M F G F G F H I N@24 O ~@2 J P ~@3
>`.pickRestart({
  A: "~@12 e4 ~ c4 ~ b3@4 c4@3 ~", B: "b3@12 b3@2 d4 ~ g4@4 b3@3 ~", C: "[a3,c#4]@12 e4 ~ d4 ~ c4@4 d4@3 ~",
  D: "[a3,c#4]@12 e4 ~ c4 ~ c4@4 c4@3 ~", E: "[a3,c#4]@6 a3 a4 a3 a4 a3 a4", F: "g3 g4 g3 g4 g3 e4 e3 e4 e3 e4 e3 e4",
  G: "a3 a4 a3 a4 a3 a4 a3 a4 a3 a4 a3 a4", H: "a3 a4 a3 a4 a3 a4 [a3,e4,g4]@6", I: "[g3,b3,d4] ~",
  J: "e4 ~ d4 ~ c4@4 d4@3 ~ b3@12", K: "b3@2 c4 ~ g4@2 c4@2 e4@2 b3@2 [a3,c#4]@12",
  L: "b3@2 d4 ~ g4@4 b3@3 ~ [a3,c#4]@12", M: "~@6 a3 a4 a3 a4 a3 a4",
  N: "[a3,e4,a4]@2 [a3,e4,a4]!2 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]!2 [a3,e4,a4]@2", // A5
  O: "[a3,e4,a4]@2 [a3,e4,a4]!2 [a3,e4,a4]@2 [a3,e4,a4]@6", P: "b3@4 c4@4 g4@2 b3@2 ~@8 e4 ~ g3 ~",
})).s("gm_acoustic_guitar_steel").gain(0.15)

// other · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  A B C D E B F D E B F D G H I H I H J K L M N O P M N O P M N Q H I H I H J K R L ~@8 S T S T S T S T S T S T S T U ~
  V C W ~@3
>`.pickRestart({
  A: "~@20 b3@3 ~", B: "g3@6 g4 ~ b3@4 ~@12", C: "a3 ~", D: "g3@3 ~ b3 ~ g4 ~ b3 ~ g3 ~@9 b3 ~ g3 ~",
  E: "a3@9 ~@11 b3@3 ~", F: "a3@4 e4 ~ c#4 ~ a3@3 ~@13", G: "a3@9 ~@3 a3@2 c4@2 e4@2 g4@2 e4@2 c4@2",
  H: "g3 b3 d4 g4 d4 c4 e3 g3 b3 d4 b3 g3", I: "a3 c4 e4 a4 e4 c4 a3 c4 e4 g4 e4 c4",
  J: "a3 c4 e4 a4 e4 c4 [a3,e4,g4]@6", K: "[g3,b3,d4]@6 e3 g3 b3 d4 b3 g3", L: "a3 c4 e4 a4 e4 c4 ~@6",
  M: "~@12 g3@3 ~ b3 ~ g4 ~ b3 ~ g3 ~", N: "~@8 b3 ~ g3 ~ a3@9 ~@3", O: "~@8 b3@3 ~ g3@6 g4 ~ b3@4", P: "~ a3",
  Q: "a3@2 a3@2 a3@2 a3 c4 e4 g4 e4 c4", R: "a3 c#4 e4 a4 e4 c#4 a3 c4 e4 a4 e4 c4",
  S: "a3 c4 e4 g4 e4 c4 g3 b3 d4 g4 d4 c4", T: "e3 g3 b3 d4 b3 g3 a3 c4 e4 a4 e4 c4", U: "a3 c4 e4 g4 e4 c4 ~@6",
  V: "~@8 e4 a4 e4 c4", W: "~@3 g3 e3 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// other · acoustic guitar nylon · "Guitar" · soft notes · A5
const acoustic_guitar_nylon_2 = note(`<
  ~@20
  [~@6 [a3,e4,a4]@2 [a3,e4,a4]!2 [a3,e4,a4]@2]
  ~@44
  [e3 g3 b3 d4 b3 g3 a3 c4 ~@4]
  [~@12 g3@3 ~ b3 ~ g4 ~ b3 ~ g3 ~]
  [~@20 e4 ~ g3 ~]
  ~@3
>`).s("gm_acoustic_guitar_nylon").gain(0.15)

// chords · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note(`<
  ~@4 A B@2 C D B@2 E F G H G H G I J K ~@2 L M L M L M L M N G H G H G I J O P Q R S@2 Q R S@2 T U T U T U T U T U T U
  T U V ~@7
>`.pickRestart({
  A: "~@12 a3 ~ e4@2 a4@8", B: "[g3 ~ d4@2 g4@8 e3 ~ b3 ~@9 [a3,c#4]@12 a3 ~ e4@2 a4@8, ~@16 e4@13 ~@19]/2",
  C: "g3 ~ d4@2 g4@8 e3 ~ b3 ~ e4@7 ~", D: "a3@3 ~ e4@3 ~ a3@3 ~ a3 ~ e4@2 a4@8",
  E: "g3 ~ d4@2 g4@8 e3 ~ b3 ~ e4@3 ~ g4@3 ~",
  F: "[a3,e4]@11 ~ [a3,e4,g4]@4 [a3,e4,g4]@2 [a3,e4,g4]@2 [a3,e4,g4]@2 [a3,e4,g4]@2", // A5 A7
  G: "[g3,b3,d4,g4]@4 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [e3,b3,d4] ~ [e3,b3,d4]@4 [e3,b3,d4]@2 [e3,b3,d4]@2 [e3,b3,d4]@2 [e3,b3,d4]@2", // G E7
  H: "[a3,e4,a4]@2 [a3,e4,a4]!4 [a3,e4,g4]@2 [a3,e4,g4]!4", I: "[a3,e4,a4]@2 [a3,e4,a4]!4 [a3,e4,g4]@6",
  J: "[g3,b3,d4] [e3,b3,d4]", K: "[a3,c#4,e4] ~", L: "a3!3 g3!3", M: "e3!3 a3!3",
  N: "a3@2 a3@2 a3@2 [a3,e4,g4]@2 [a3,e4,g4]!4", O: "[a3,c#4,e4] [a3,c4,e4]", P: "[a3,c4,e4] ~", Q: "[a3,c4,d4,f4]!2",
  R: "[g3,b3,d4]!2", S: "[a3,c#4,e4]!2",
  T: "[a3,e4,g4]@4 [a3,e4,g4]@2 [a3,e4,g4]@2 [a3,e4,g4]@2 [a3,e4,g4]@2 [g3,b3,d4,g4]@4 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [e3,b3,d4] ~", // A7 G E7
  U: "[e3,b3,d4]@2 [e3,b3,d4]!4 [a3,e4,a4]@2 [a3,e4,a4]!4", V: "[a3,e4,g4]@2 [a3,e4,g4]!4 [g3,b3,d4]@6",
})).s("gm_electric_guitar_jazz").gain(0.3)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  A B C B C B C B C B C B C B C B C B C B D E F E F E F E F E F A B C B C B C B D G H I J@2 K L C@2 E F E F E F E F E F
  E F E F M ~@7
>`.pickRestart({
  A: "~ a2", B: "g2@10 e2 ~ e2@12", C: "a2!2", D: "a2 ~", E: "a2@12 g2@10 e2 ~", F: "e2 a2", G: "a2@3 a2!3", H: "d2!6",
  I: "g1!6", J: "a1!6", K: "d2!2", L: "g2!2", M: "a2 g2",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · piano · "Drum Set"
const piano = note("<~@23 A B A B A B A B C D@31 E ~@4 F ~@2>".pickRestart({
  A: "c2@6 c2@4 g2!2", B: "d2 c2", C: "g2@2 g2@2 g2@2 a3!6, ~@3 g2!3", D: "a3!12, g2!6", E: "a3!6 [g2,a3]@6, g2!3 ~@3",
  F: "a3",
})).s("gm_piano").gain(0.3)

stack(
  string_ensemble_1, acoustic_guitar_steel, acoustic_guitar_nylon, acoustic_guitar_nylon_2, electric_guitar_jazz, bass,
  piano
)

More by Rihanna