Strudelify
Who Wants to Live Forever cover art

A Kind Of Magic

Who Wants to Live Forever

Queen

KeyG majorTempo72 bpm
0:00/0:00
// Who Wants to Live Forever — Queen
// 72 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: ch 5 "Keyboard 1 (Bass)" named as a bass, played on electric bass finger (its pad new age patch is not one)
// note: Full arrangement: all 91 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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 · overdriven guitar · "Guitar 2"
const overdriven_guitar = note("<~@33 A B@2 ~ C D@2 E@2 F G ~@47>".pickRestart({
  A: "~@30 [d4,g4]!2", B: "[[d4,g4]@7 [d4,a4]@9]/2", C: "b4@2 c5 [a4,b4] b4@28", D: "[b4@2 c5 [a4,b4] b4@44 ~@16]/2",
  E: "[b4@2 c5 b4 a4@2 b4@42 ~@16]/2", F: "b4@2 c5 b4 a4@2 b4@26", G: "[c6,g6]",
})).s("gm_overdriven_guitar").gain(0.64)

// chords · string ensemble 2 · "Guitar 2"
const string_ensemble_2 = note("<~@46 A B C D E F G H@2 I@2 J K J L M N@2 ~@2 O@2 ~@23>".pickRestart({
  A: "~@3 [e3,g3,b3]@3 ~@2", B: "~ [g3,c4]@2 ~", C: "~@3 [g3,b3]@2 ~@3", D: "~ [g3,c4]@3", E: "[g2,d3,g3] [a2,d3,a3]",
  F: "[e2,b2,e3,b3]", G: "[g2,d3,g3] [d3,a3]", H: "[e3,b3]", I: "d3/2", J: "g3 f#3", K: "e3", L: "e3@8 e3!4 d3@2 d3@2",
  M: "c#3", N: "[d3@15 ~]/2", O: "e6/2",
})).s("gm_string_ensemble_2").gain(0.64)

// other · distortion guitar · "Guitar 3"
const distortion_guitar = note("<~@33 A B C D@2 ~@53>".pickRestart({
  A: "~@7 a3 e4@8", B: "[d3,a3,d4]@3 d3", C: "d4", D: "e3/2",
})).s("gm_distortion_guitar").gain(0.64)

// bass · electric bass finger · "Keyboard 1 (Bass)"
const bass = note(`<
  A@3 B@2 C D E F G@2 H@3 I J@2 B@2 C D E F G@2 K@2 L I M N ~@7 O P O P O P O P O Q O Q ~@13 R@2 S@2 C T I U V W X@2 Y@3
  Z AA@4 AB@5 ~@3
>`.pickRestart({
  A: "[~@12 [g3,c4]@25 [e3,b3,e4]@30 [e2,e3]@29, ~ e3@11 ~@20, ~@8 e2@21 ~@67]/3", B: "[[a2,a3]@3 [f#2,f#3]]/2",
  C: "[e2,e3]", D: "d3 c#3", E: "d3", F: "e3", G: "[d3,a3,d4]/2",
  H: "[~@6 d3@3 ~@2 b3@3 ~@2 c3@4 b2@4, ~ e3@2 c4@2 g3@2 ~@2 e3 c4@2 ~@4 g3@8, ~@4 g3@4 b3@4 ~@7 a3@2 ~@7 a3@8 ~@12]/3",
  I: "a2", J: "[[d3,d4]@11 ~@5]/2", K: "[~@2 e3@2 f#3@2 c4@2 b3@2 f#3@2 d3@6 e3 a3 c4@2 b3@6 a3@4]/2", L: "c3 b2, g3",
  M: "d3@3 b2", N: "c3 ~", O: "[e3,b3]", P: "[c3,g3]", Q: "[c3,g3,c4]", R: "d3/2", S: "[e2,e3]/2", T: "c3", U: "f#2",
  V: "d2", W: "b2", X: "g2/2", Y: "[b3@6 e4 d4 c4@4, [e3,g3]]/3", Z: "[e3,a3,c4]", AA: "[e2,e3]/4",
  AB: "[[e2,e3] [d1,d2]]/5", // E D
})).s("gm_electric_bass_finger").gain(0.4)

// chords · french horn · "French Horns"
const french_horn = note(`<
  ~@22 A B@2 ~ C D E F G H I J K L ~@16 M N O P@2 ~@2 M N Q R@3 S@2 T@2 ~@2 U V W@2 ~ X Y Z AA@2 AB AC AD@3 ~@5
>`.pickRestart({
  A: "b4@3 a4", B: "[~ d4 g4 e4 f#4@2 ~@2, a4@3 ~]/2", C: "a4", D: "c4@3 d4 d4@3 d4, g4 ~",
  E: "d4 ~ e4!2 b4@2 a4@2, ~ c4@7", F: "[e4,g4]@2 f#4 g4, ~ d4", G: "c4@3 d4 d4@3 e4, g4",
  H: "e4@3 d4@2 ~@7 g4@4 c5@4 b4@4 b4@4 a4@4, g4@3 ~@5, ~@5 c4@27", I: "g4@3 g4 a4@2 d4@2", J: "g4 e4 c4@4 ~@2",
  K: "d4@5 g4@3", L: "d4 ~", M: "g4 a4", N: "b4@3 ~", O: "b4 a4, c#4", P: "[~@9 a#3 f4 a#3 f4 a#3 f4@2, d4]/2",
  Q: "b4 a4, [c#4,g4]", R: "[~@9 a#3 f4 a#3 f4 a#3 f4@2 ~@8, d4]/3", S: "[[a3,a4] [g3,g4]@3]/2", T: "[a4@3 g4 g4@12]/2",
  U: "[a3,f4]", V: "[f#3,d4]", W: "[a#3,d4]/2", X: "~@6 b3 d4, g3@3 ~, ~ e4", Y: "[e4,g4]@2 e4 c4",
  Z: "e4@8 g4@8 f#4@5 d4@5 ~ a3@5, a3 ~", AA: "[e4@7 ~]/2", AB: "a4 g4", AC: "f#4@5 d4@5 ~ a3@5 e4@16",
  AD: "[~ e4@39 ~@8, [g3,b3]@5 ~]/3", // G
})).s("gm_french_horn").gain(0.4)

// chords · trumpet · "Trumpets/Keyboard 2"
const trumpet = note("<~@30 A B C D E@2 ~@55>".pickRestart({
  A: "c4@3 d4 d4@3 e4", B: "e4@6 ~ [c4,e4]", C: "[c4,e4]@3 [d4,f#4] [d4,f#4]@3 [d4,f#4]", D: "g4 c5, e4",
  E: "[b4 a4 g4@7 f#4@3 ~@4]/2",
})).s("gm_trumpet").gain(0.4)

// chords · reed organ · "Trumpets/Keyboard 2"
const reed_organ = note("<~@79 A B C D E@3 ~@5>".pickRestart({
  A: "[e5,g5] [d5,f#5]", B: "[c#5,e5] [b4,d5]", C: "[a4,c#5]@6 [b4,d5] [a4,c#5] [g4,b4]@8",
  D: "[f#4,a4]@8 [e4,g4]@7 [f#4,a4]", E: "[[g4,b4]@5 ~]/3",
})).s("gm_reed_organ").gain(0.4)

// other · trombone · "Trombones"
const trombone = note("<~@27 A B C D E F G H I ~@10 J@4 K L K M N O@2 K L K M N O@2 ~@27>".pickRestart({
  A: "a2@4 ~@3 e3, g3@7 ~, ~ g2", B: "b3 a3@3, [a2,e3]", C: "[d3,a3]@3 ~@3 [b2,g3]@2, c4@3 ~",
  D: "~@2 g3@2 d4@3 e4, [c2,c3] [b1,b2]", // C B
  E: "e4@3 d4@2 c4@7 g3@4 ~@4 [b1,b2]@4 ~@4 g3@4, [a1,a2]@4 g3@3 ~, ~@3 [b1,b2]", F: "g3@3 g3 g3@3 g3, c2 b1",
  G: "g3@2 c4 b3 g3@2 a3@2, [a1,a2]", H: "[d2,d3,a3]", I: "[d3,a3,d4] ~",
  J: "[f#2,f#3] [g2,g3] [f#2,f#3] [g2,g3] [a2,a3] [g2,g3] [f#2,f#3] [g2,g3]", K: "[g2,g3] [f#2,f#3]", L: "[e2,e3]",
  M: "[e2,e3]@3 [d2,d3]", N: "[c#2,c#3]", O: "[d2,d3]/2",
})).s("gm_trombone").gain(0.4)

// chords · string ensemble 2 · "Strings (Treble)"
const string_ensemble_2_2 = note(`<
  ~@3 A@2 B@2 C D E@2 F G H I@3 J K L M N O P Q R S T U V W X Y Z AA AB AC@2 AD AE AD AE AD AF AG@2 ~@4 AH AI AJ AK AL
  AM@2 AN AO AP AQ AR AS@3 AT@2 AU AV AW AX AY AZ BA@2 BB@3 BC BD BE BF@5 ~@5
>`.pickRestart({
  A: "[c4,e4]/2", B: "[c4@8 b3@45 e4@5 ~ g4@5]/2", C: "g4@2 ~ g3, b3@3 ~, ~ d4", D: "[a3,g4]@6 ~ a3",
  E: "[[a3,d4]@3 ~]/2", F: "c4 d4", G: "d4 [c4,e4]@5 ~ e4", H: "[c4,e4]@3 [d4,f#4] [d4,f#4]@3 [d4,f#4]",
  I: "[[d4,f#4] g4@2 g4 c5 b4@2 ~ g4@11 ~@5, ~ e4@7 ~@16, ~@7 a4@12 ~@5]/3", J: "~@3 [c4,e4] e4 c4 e4 c4",
  K: "[c4,e4] c4 e4 a4 a4@4", L: "[f#4,b4] [e4,g4] [b3,b4] [e4,g4] [f#4,b4] [e4,g4] [f#4,b4] [e4,g4]",
  M: "[f#4,b4] [e4,g4] [b3,b4] [e4,g4] [g4,b4] [e4,g4] b3 c#4, ~@3 g4", N: "d4@8 g4@6 b4 g4, b3",
  O: "[b3,c#4]@8 [b3,c#4,e4]@3 [c#4,e4,g4]@2 [e4,g4]@3 ~@8 e5@8, ~@13 b4@11 ~@8, ~ [c#4,e4,g4]", // Bsus2 C#m7 C#dim Em C#dim
  P: "~@3 d4!2 [d4,a4]!2 [g4,d5], a3@5 ~@3", Q: "[f#4,a4,d5]@3 ~", R: "~@5 c4@5 ~ g4@5 d5@12 g5@4, ~ g4",
  S: "[c4,e4,g4,e5]", T: "[c5,e5]@3 [b4,f#5] [b4,f#5]@3 [b4,f#5]",
  U: "[b4,f#5]@4 g5@4 c5@3 d5 e5 f#5 g5 a5 [b4,b5]@8 [a4,a5]@8, ~ a4@3 ~@4", // B5 B A
  V: "[d5,d6]@24 [d4,d5] [e4,e5] ~ [f#4,f#5] [g4,g5] [a4,a5] ~ [b4,b5]", W: "[c5,c6]@3 [d5,d6] [d5,d6]@3 [e5,e6]",
  X: "[e5,e6]@7 [e5,e6]", Y: "e6@12 f#6@4 f#6@12 g6@3 ~", Z: "[g5,g6] [e5,e6] [d6,d7]@2 [c6,c7]@4",
  AA: "[b5,b6] [a5,a6] [g5,g6]@6", AB: "[d5,d6] ~", AC: "b4/2", AD: "e5", AE: "c5", AF: "~ b5 d6 b5, ~ [c5,e5]@3",
  AG: "[e5,g5,b5,e6]/2", AH: "[g5,g6] [f#5,f#6]", AI: "[g5,g6]@4 [b5,b6]@3 [d6,d7]", AJ: "[g5,g6] [a5,a6]",
  AK: "[d6,d7] [e6,e7] [f#6,f#7] [g6,g7]", AL: "[g6,g7] [a5,a6]",
  AM: "[[e6,e7]@3 [d6,d7] [d6,d7]@2 [b5,b6] [a#5,f6,f7]@9]/2", AN: "[d5,d6,d7]",
  AO: "[g5,g6,g7] [d5,d6,d7] [b4,b5,b6] [d5,d6,d7]", AP: "d5@2 e5 [d5,e6,e7], [d6,d7]@3 ~",
  AQ: "[d6,d7] [e6,e7] [f#6,f#7] [g6,g7], g5", AR: "[g6,g7]@4 [a5,a6]@3 [e5,e6]",
  AS: "[[e5,e6]@3 [d5,d6] [d5,d6]@2 [b4,b5] ~ d4@16, ~@7 [f5,f6]@17]/3", // E D B F
  AT: "[~@2 e5@3 b4 a4 g4 a4 g4@3 ~@4 c4@16, e2@3 ~, e4 b3 ~@2, ~@3 e4@5]/2", AU: "~ [b3,e4]@3", AV: "[c4,d#4]",
  AW: "~ [c4,e4]@7", AX: "[g#3,c4]", AY: "[f3,a3]", AZ: "[d3,f#3]", BA: "[~@3 [a#3,d4]@13]/2",
  BB: "[~@2 [e5,e6]@4 ~@2 c4@3 g4, ~ [g5,g6]]/3", BC: "e4@8 g4@8 f#4@5 d4@5 ~ a3@5, [a5,a6], g5 f#5",
  BD: "[e5,g5] [d5,f#5], [b5,b6]", BE: "c#5 [b4,d5], [e5,e6]",
  BF: "[[a4,c#5]@6 [b4,d5] [a4,c#5] [g4,b4]@8 [f#4,a4]@8 [e4,g4]@8 [b3,e4]@40 ~@8, [e6,e7]@17 ~@3]/5", // A Bm A G F#m Em E5 E
})).s("gm_string_ensemble_2").gain(0.4)

// chords · synth strings 1 · "Strings (Bass)"
const synth_strings_1 = note(`<
  ~@3 A@2 B@2 C D E@2 F G H I J@2 K@2 L M N D O@2 F P Q R S T U V W X Y Z@2 AA@4 AB AC AD@2 AE AF@3 AG AH AG AI AJ AK@2
  AG AH AG AL AM AN@3 AO@2 AP AQ AR AS AT AU AV@2 AW@8 AX@7 ~
>`.pickRestart({
  A: "[a2@2 a2 f#2, a3]/2", B: "[e2@32 d3@16 g3@5 a3@5 ~ b3@5, [e3,g3]@3 c#3]/2", C: "d3", D: "e3",
  E: "[g3@2 f#3 ~, d3@3 ~]/2", F: "c3 b2", G: "~@2 e3 a3 c4@2 b3@6 a3@4, a2", H: "c3 b2, g3", I: "~@2 e3 a3 c4@12, a2",
  J: "[[d3,a3,d4]@11 ~@5]/2", K: "[~@2 e3 a3 b3 a3 b3 a3 b3 [c3,a3] [b2,b3] [a2,c4] [f#2,a3,d4]@4, a2@9 ~@7]/2",
  L: "[e3,g3]@3 [e3,g3] g3 b3 g3 b3, ~ e3", M: "g3 b3 g3 [d3,b3] e4 b3 [e3,g3]@2, d3@3 ~ c#3@4", N: "[d3,g3]",
  O: "[g3@3 e3 f#3@3 ~, d3@7 ~]/2", P: "~@3 e3 c4 b3!2 a3, a2", Q: "[c2,c3]@4 ~@2 g3 e3, g3@3 ~, ~ [b1,b2]",
  R: "[a2,b3]@8 ~@19 [c2,c3]@5, a1@27 ~@5", S: "[d2,a3]@3 [b1,g3]", T: "c4@3 d4 d4@3 e4, [c2,c3] [b1,b2]",
  U: "e4@3 d4@2 c4@7 g3@4 ~@4 [b1,b2]@4 ~@4 g3@4, [a1,a2]@4 g3@3 ~, ~@3 [b1,b2]", // B A B
  V: "g3@12 g3@4 g3@12 g3@3 ~, c3@16 b2@15 ~", W: "g3@2 c4 b3 g3@2 a3@2, [a1,a2]", X: "[d2,d3,a3]", Y: "[d3,a3,d4] ~",
  Z: "[~ g3@4 f#3@4 e3@3 ~@4, [e1,e2,b2]]/2", AA: "[b3 g3, e2]/2", AB: "[e2,e3,b3]", AC: "[c2,g2,c3,e3,g3]",
  AD: "[[e2,b2,e3,g3]@7 ~]/2", AE: "~@2 [g2,g3]!2 [f#2,f#3]!2 [g2,g3]!2 [a2,a3]!2 [g2,g3]!2 [f#2,f#3]!2 [g2,g3]!2",
  AF: "[f#2,f#3]!2 [g2,g3]!2 [f#2,f#3]!2 [g2,g3]!2 [a2,a3]!2 [g2,g3]!2 [f#2,f#3]!2 [g2,g3]!2", // F# G F# G A G F# G
  AG: "[g2,g3] [f#2,f#3,a3]", AH: "b3@3 g3, [e2,e3]", AI: "[e2,e3]@3 [d2,d3], g3", AJ: "a3@3 g3, [c#2,c#3]",
  AK: "[a3@4 g3@2 g3 a#3@9, [d2,d3]]/2", AL: "[e3,e4]@3 [d3,d4], g4", AM: "a4@3 g3, [c#3,c#4]",
  AN: "[a3@4 g3@2 g3 ~ g3@16, [d2,d3], ~@7 a#3@17]/3", AO: "[~@2 e4@3 b3 a3 g3 a3 g3@23, [e1,e2]@3 ~]/2",
  AP: "~ g3 b3 [e1,e2,g3], [e1,e2]@3 ~", AQ: "[c2,c3,g3]", AR: "~ [a1,a2]@6 [g1,g2], ~ [e3,a3]@7", AS: "[f1,f2,f3]",
  AT: "[d1,d2,d3]", AU: "[b0,b1,b2]", AV: "[~@3 g3@13, [g1,g2]]/2",
  AW: "[~ [g3,b3]@7 [g3,c4]@4 [a3,c4]@4 b3@4 a3@12, [e1,e2], ~ e4]/8", // G C5 Am E
  AX: "[[e3,g3]@10 [d2,d3]@9 ~@5 b2@4, ~@19 [e1,e2]@9]/7", // Em D E
})).s("gm_synth_strings_1").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@18 A ~ A ~@3 A ~@13 A@10 B A C D C@3 E F C G C@3 E F ~ A ~ A ~@5 F A ~@8 F@2 A ~@5
>`.pickRestart({
  A: "x ~@2 x ~@12", B: "x!2 ~ x ~@12", C: "x!2", D: "x ~@6 x ~ x ~ x ~ x ~@2", E: "x ~@3 x ~@2 x", F: "x",
  G: "x ~@6 x ~ x ~ x ~@4",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@39 A ~ A ~@2 A ~ B@3 C D E D@4 ~ D E D@4 ~@28>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@2", C: "~@4 x ~@7 x!3 ~", D: "~ x ~ x", E: "~ x!3",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@37 A@13 B C B D@3 ~ B E B D@3 F G ~@26>".pickRestart({
  A: "x!16", B: "~ x!3 ~ x!3", C: "~ x!3 ~@4", D: "~ x!7", E: "~@2 x ~ x ~ x ~ x!2 ~@2 x ~@3", F: "~ x!15",
  G: "x!10 ~@6",
})).gain(0.64)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@64 [~@10 x!6] [x!16]!2 ~@24>").gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@28 A B C ~ D@2 C ~@15 C ~ C ~ C ~@2 C ~@14 D C ~@17>".pickRestart({
  A: "~@8 x!17 ~@7", B: "~@12 x!20", C: "x", D: "x!32",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@50 [x!8]!6 ~ [x!8]!6 ~@28>").gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@39 x ~ x ~@49>").gain(3.24)

stack(
  overdriven_guitar, string_ensemble_2, distortion_guitar, bass, french_horn, trumpet, reed_organ, trombone,
  string_ensemble_2_2, synth_strings_1, kick, snare, hihat, hihat_soft, crash, ride, cabasa
)

More by Queen