Strudelify

outer wilds - main theme

Andrew Prahlow

KeyC majorTempo70 bpm
0:00/0:00
// outer wilds - main theme — Andrew Prahlow
// 70 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 40, 4/4 at bar 54) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5718386; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 90 bars on a 16-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 · [...]/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 · electric bass finger
const bass = note("<~@57 A B C D E F G H I F J K L ~@20>".pickRestart({
  A: "~@8 f2!2 [f2,c3] f2!2 [f2,c3] f2!2", B: "[f2,c3] f2!2 [f2,c3] f2!2 [f2,c3] f2 g2!2 [g2,c3] g2!2 [g2,c3] g2!2",
  C: "[g2,c3] g2!2 [g2,c3] g2!2 [g2,c3] g2 a2!2 [a2,c3] a2!2 [a2,c3] a2!2", // C5 Am
  D: "[a2,c3] a2!2 [a2,c3] a2!2 [a2,c3] a2 g2!2 [g2,c3] g2!2 [g2,c3] g2!2", // Am C5
  E: "[g2,c3] g2!2 [g2,c3] g2!2 [g2,c3] g2 f2!2 [f2,c3] f2!2 [f2,c3] f2!2", // C5 F5
  F: "[f2,c3] f2!2 [f2,c3] f2!2 [f2,c3] f2 e2!2 [e2,c3] e2!2 [e2,c3] e2!2", // F5 C
  G: "[e2,c3] e2!2 [e2,c3] e2!2 [e2,c3] e2 d2!2 [d2,c3] d2!2 [d2,c3] d2!2", // C D7
  H: "[d2,c3] d2!2 [d2,c3] d2!2 [d2,c3] d2 c2!8", I: "c2!8 f2!2 [f2,c3] f2!2 [f2,c3] f2!2",
  J: "[e2,c3] e2!2 [e2,c3] e2!2 [e2,c3] e2 f2!2 [f2,c3] f2!2 [f2,c3] f2!2", // C F5
  K: "[f2,c3] f2!2 [f2,c3] f2!2 [f2,c3] f2 c2!2 [c2,c3] c2!2 [c2,c3] c2!2", // F5 C
  L: "[c2,c3] c2!2 [c2,c3] c2!2 [c2,c3] c2 ~@8", // C
})).s("gm_electric_bass_finger").gain(0.4)

// other · slap bass 1
const slap_bass_1 = note("<~@9 [~@3 g4 c4 g4 c4 g4] [c4 g4 c4 g4 c4 g4 c4 g4]!21 [c4 g4 c4 g4 ~@4] ~@58>")
  .s("gm_slap_bass_1").gain(0.25)

// other · slap bass 1 · soft notes
const slap_bass_1_soft = note(`<
  ~@2
  [c4 g4 c4 g4 c4 g4 c4 g4]!7
  [c4 g4 c4 ~@5]
  ~@21
  [~@4 c4 g4 c4 g4]
  [c4 g4 c4 g4 c4 g4 c4 g4]!6
  ~@52
>`).s("gm_slap_bass_1").gain(0.15)

// other · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  ~@2 A B C B A B C B D E F G H E F I J K L K M K F K F N@2 O ~@4 P Q R S ~@15 T@5 U V W X U Y Z AA AB AC AD AE ~@20
>`.pickRestart({
  A: "f3@3 ~", B: "g3@3 ~", C: "a3@3 ~", D: "f2@2 c3 g3@2 c4 g3@2 e4@2 c3 g3@2 c4 g3@2",
  E: "f4 e4@2 g3@2 c4 g3@2 d4@2 e4@2 c4@2 b3@2", F: "c4@2 c3 g3@2 c4 g3@2 e4@2 c3 g3@2 c4 g3@2",
  G: "f4 e4@2 g3@2 c4 g3@2 d4@2 e4@2 g4@2 e4@2", H: "c3@3 g3@2 c4 g3@2 e4@2 c3 g3@2 c4 g3@2",
  I: "f4 e4 c3 g3@2 c4 g3@2 d4@2 e4@2 g4@2 e4@2", J: "[c4,g4]@2 c3 g3@2 c4 g3@2 e4@2 c3 g3@2 c4 g3@2",
  K: "d4@2 c3 g3@2 c4 g3@2 e4@2 c3 g3@2 c4 g3@2", L: "c4@2 c3 g3@2 c4 b3@2 c4@2 c3 g3@2 c4 b3@2",
  M: "g4@2 c3 g3@2 c4 g3@2 e4@2 c3 g3@2 c4 g3@2", N: "e4@2 c3 g3@2 c4 g3@2 e4@2 c3 g3@2 c4 g3@2",
  O: "[c4,e4]@2 c3 g3@2 c4 g3@2 c4@2 ~@6", P: "f3@2 c4@2 e4@3 c4", Q: "f4 e4 d4 c4 d4 e4 c4@2", R: "a3@2 c4@2 e4@3 c4",
  S: "f4 e4 d4 c4 d4 e4 g4 e4",
  T: "[~@12 c4@4 e4@6 c4@2 f4@2 e4@2 d4@2 c4@2 d4@2 e4@2 c4@4 g3@4 c4@4 e4@6 c4@2 f4@2 e4@2 d4@2 c4@2 d4@2 e4@2 g4@2 e4@2 f3@2 [f3,c4]@2 f3 [f3,c4]@2 f3, ~ f3@2 g3@2 a3@2 g3@2 ~]/5", // F5
  U: "[f3,c4]@2 f3 [f3,c4]@2 f3 [f3,c4]@2 g3@2 [e3,c4]@2 g3 [e3,c4]@2 g3", // F5 C
  V: "[e3,c4]@2 g3 [e3,c4]@2 g3 [e3,c4]@2 a3@2 [a3,c4]@2 a3 [a3,c4]@2 a3", // C Am
  W: "[a3,c4]@2 a3 [a3,c4]@2 a3 [a3,c4]@2 g3@2 [g3,c4,e4]@2 g3 [g3,c4,e4]@2 g3", // Am C
  X: "[g3,c4,e4]@2 g3 [g3,c4,e4]@2 g3 [g3,c4,e4]@2 f3@2 [f3,c4]@2 f3 [f3,c4]@2 f3", // C F5
  Y: "[e3,c4]@2 g3 [e3,c4]@2 g3 [e3,c4]@2 f3@2 [f3,c4]@2 f3 [f3,c4]@2 f3", // C F5
  Z: "[f3,c4]@2 f3 [f3,c4]@2 f3 [f3,c4]@2 g3@2 [e3,g3,c4]@2 g3 [e3,g3,c4]@2 g3", // F5 C
  AA: "[e3,g3,c4]@2 g3 [e3,g3,c4]@2 g3 [e3,g3,c4]@2 f3@2 c4@2 f3 c4@2 f3", // C
  AB: "c4@2 f3 c4@2 f3 c4@2 e3@2 c4@2 e3 c4@2 e3", AC: "c4@2 e3 c4@2 e3 c4@2 [f3,a3]@2 [a3,c4]@2 f3 [a3,c4]@2 f3",
  AD: "[a3,c4]@2 f3 [a3,c4]@2 f3 [a3,c4]@2 [e3,g3]@2 [g3,c4]@2 e3 [g3,c4]@2 e3", // Am Em C5
  AE: "[g3,c4]@2 e3 [g3,c4]@2 e3 [g3,c4]@2 ~@8", // C5
})).s("gm_acoustic_guitar_steel").gain(0.3)

// other · viola
const viola = note(`<
  ~@8 A B C D E F C G H B I J K L M C N O P Q R ~@14 S@3 T@3 U@2 ~@6 V W X Y Z AA AB AC AD AE@2 Y AF AG@2 AH AI AJ@2 AK
  AL AM@2 AN AO AM@2 AN AP@3 ~@2
>`.pickRestart({
  A: "~ g3", B: "c4 b3", C: "g3 c4", D: "g3!2", E: "a3 c4", F: "c4@3 b3", G: "c4 g3", H: "c4 e4", I: "c3", J: "g3",
  K: "c4@2 g3 e3", L: "g3@2 g3 b3", M: "c4!2", N: "a3 e4", O: "d4 b3", P: "c4 f3 c3 c4", Q: "e4@4 d4@3 g3",
  R: "f3 g3 f3 g3", S: "[c4 g4 d4@2]/3", T: "[c5 g5 d#5 c5]/3", U: "[d#5@3 f5@3 ~@2]/2", V: "~ c4", W: "e4 d4 b3@2",
  X: "e4 b3 a3 e4", Y: "d4 c4 d4 e4", Z: "c4@2 g3 c4", AA: "e4 d4", AB: "b3@4 [e3,e4]@2 [a3,f4] [g3,e4]",
  AC: "d4 c4 d4 e4, f3 e3", AD: "g4 e4 c4@2, c3 ~", AE: "[e4@5 c4 f4 e4]/2", AF: "c4 [f3,f4]",
  AG: "[[c4,c5]@2 d4@2 ~ c5 f5 e5, ~@2 e5@3 ~@3, ~@2 e4 d4]/2", AH: "d5 c5 d5 e5, c4 b3", AI: "c5 b4 [a3,a4]@2, c4 ~",
  AJ: "[[g3,g4]@2 b3@2 ~ c5 f5 e5, ~@2 e5@3 ~@3, ~@2 c4 b3]/2", AK: "d5 c5 d5 e5, g3 c4", AL: "g5 e5 [a4,a5]@2, d4 ~",
  AM: "[[g4,c6]@2 f4@2 ~ c6 f6 e6, ~@2 e6@3 ~@3, ~@2 e4 d4]/2", AN: "d6 c6 d6 e6, c4 b3", AO: "[a3,c6] [g4,a5]",
  AP: "[g6 e6 g4@2 e4@6 ~@2, c4 c6@4 ~]/3",
})).s("gm_viola").gain(0.64)

// other · viola · soft notes
const viola_soft = note("<~@29 A ~@10 B@3 ~@7 C@4 ~@33 D@3>".pickRestart({
  A: "c4@8 c5!8", B: "[c4 g4 d#4@2]/3", C: "[~ [c4,g4]@6 ~]/4", D: "[~ [g4,c5]@4 ~]/3",
})).s("gm_viola").gain(0.32)

// other · pizzicato strings
const pizzicato_strings = note("<~@53 [~@4 c4 g4 c4 g4] [c4 g4 c4 g4 c4 g4 c4 g4]!3 [c4 g4 c4 g4 ~@4] ~@32>")
  .s("gm_pizzicato_strings").gain(0.24)

// bass · contrabass
const bass_2 = note("<~@18 A B C B ~@4 D@2 ~@14 E F@3 G@3 H@2 ~@6 I@8 J@8 K@8 L@7 ~@2>".pickRestart({
  A: "c2", B: "g1", C: "a1", D: "f1/2", E: "~ d2@3", F: "[g#2@3 f2@3 b1@5 d2]/3", G: "[g2 f2 g#2 f2]/3",
  H: "[d#2@3 d2@3 ~@2]/2", I: "[~ f1@2 g1@2 a1@2 g1@2 f1@2 c2@2 f1@2 g1]/8",
  J: "[~ c2@2 c2@2 f2@2 [c2,e2]@2 f2@4 g2@3]/8", K: "[~ a2@4 g2@4 f2@4 g2@3]/8", L: "[~ a2@4 g2@4 f2@4 ~]/7",
})).s("gm_contrabass").gain(0.39)

// bass · contrabass · soft notes
const bass_soft = note("<~@40 A@3 ~@44 B@3>".pickRestart({
  A: "[g#2 f2 d#2 ~]/3", B: "[~ [c2,e2]@4 ~]/3",
})).s("gm_contrabass").gain(0.19)

// bass · acoustic bass
const bass_3 = note("<~@10 A B C B A B C B ~@5 D E D ~@64>".pickRestart({
  A: "f1!3 ~", B: "g1!3 ~", C: "a1!3 ~", D: "g1!4", E: "a1!4",
})).s("gm_acoustic_bass").gain(0.24)

// chords · piano
const piano = note(`<
  ~@10 A B@7 C D C D E F E G H I J K L ~ M N O P Q R ~@8 S T U V W X Y Z ~@3 AA@8 AB@5 ~@20
>`.pickRestart({
  A: "~@7 g4, c4!4, ~ g4@2 g4@2 g4@2 ~", B: "c4 g4 c4 g4 c4 g4 c4 g4", C: "c4 g4 c4 g4 c4 g4 c4 g4, c5!2 b4 c5",
  D: "c4 g4 c4 g4 [c4,b4] [g4,c5] [c4,c5] [g4,b4], c5!2 ~@2", // Cmaj7 C5 C G
  E: "~@7 g4, [c4,c5] c5@2 ~, ~ g4@2 g4@2 g4@2 ~, ~ c4 b4@2, ~@2 c4 [c4,c5]", // C
  F: "~@5 e5 ~ [g4,d5], [c4,c5] c5@3, ~ g4@2 g4@2 g4@2 ~, ~@2 c4@2 d5@3 ~, ~@2 c4 [c4,e5]", // G5 C
  G: "~@5 c5 ~ [g4,b4], [c4,c5]@2 c5@3 ~@3, ~ g4@2 g4@2 g4@2 ~, ~@2 c4@2 b4@3 ~, ~@2 c4 [c4,c5]", // G C
  H: "~@7 g4, a4, c4!4, ~ g4@2 g4@2 g4@2 ~", I: "~@7 g4, c4!3 [c4,b4], ~ g4@2 g4@2 g4@2 ~",
  J: "~@7 g4, c5, c4!3 [c4,d5], ~ g4@2 g4@2 g4@2 ~", K: "~@7 g4, e5, c4!2 d5@2, ~ g4@2 g4@2 g4@2 ~, ~@2 c4!2",
  L: "~@3 c4, [f2,c3], c4!3 ~, ~ g4@2 g4@2 g4@2 ~", M: "[c3,f3,a3,c4]", N: "[c3,e3,g3,c4]", O: "[a2,c3,f3]",
  P: "[c3,e3,a3]", Q: "~ [e2,g2,c3], [f2,a2,d3]", R: "[f2,a2,d3]",
  S: "d#4 c4 g3 c4 d#4 c4 g3 c4 d#4 c4 d#4 c4 d4 c4 g3 c4", T: "d4 c4 g3 c4 d4 c4 d4 c4 g4 f4 d#4 f4 g4 f4 d#4 f4",
  U: "g4 f4 d#4 f4 g#4 f4 c4 f4 g#4 f4 c4 f4 g#4 f4 c4 f4", V: "g4 f4 d#4 f4 g4 f4 d#4 f4 g4 f4 d#4 f4 g#4 f4 c4 f4",
  W: "g#4 f4 c4 f4 g#4 f4 c4 f4 [c4,c5]@4 [c4,c5]@4", X: "b4 c5 c4@2 ~ c5 [c4,c5]@2, c4@2 c5@3 ~@3, ~@2 c4 ~",
  Y: "b4 c5!2 b4 [c4,c5]@2 [c4,c5]@2, c4!2 ~@2", Z: "b4 c5 [c4,c5]@2 ~@4, c4 ~@3",
  AA: "[~@11 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@3 [g3,g4], ~ [f2,c3,f3] [f2,c3,f3] [g2,c3] [g2,c3] [a2,c3,e3] [a2,c3,e3] [g2,e3] [g2,e3] [f2,c3,f3] [f2,c3,f3] [e2,c3,e3] [e2,c3,e3] d2 [d2,b2] [c2,g2,e3], ~@2 [c4,c5]!2 [c4,c5]!4 [c4,c5]!4 [c4,c5]!4 [c4,c5]!4 [c4,c5]!4 [c4,c5]!4 [c4,c5]!4, ~@5 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~ c3@8 ~@4, ~@53 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 ~]/8", // G F5 C5 Am C F5 C G …
  AB: "[~@3 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@7 [g3,g4] ~@4, [c2,g2,e3] ~@9, [c4,c5]!4 [c4,c5]!4 [c4,c5]!4 [c4,c5]!4 [c4,c5]!2 ~@2, ~ [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@2 [g3,g4]@2 [g3,g4]@2 [g3,g4]@2 ~@5]/5", // G C G
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<A@4 B@6 ~@20 C D ~@55 E@3>".pickRestart({
  A: "~@7 g5, c5!4, ~ g5@2 g5@2 g5@2 ~", B: "c5 g5 c5 g5 c5 g5 c5 g5", C: "~@7 g4",
  D: "~@7 g4, [a2,e3,a3], c4!4, ~ g4@2 g4@2 g4@2 ~", E: "[~ [c3,e3,g3,c4]@4 ~]/3",
})).s("gm_piano").gain(0.2)

stack(
  bass, slap_bass_1, slap_bass_1_soft, acoustic_guitar_steel, viola, viola_soft, pizzicato_strings, bass_2, bass_soft,
  bass_3, piano, piano_soft
)

More by Andrew Prahlow