Strudelify

Zelda's Lullaby (Skyward Sword)

Koji Kondo & Mahito Yokota

KeyG majorTempo100 bpm
0:00/0:00
// Zelda's Lullaby (Skyward Sword) — Koji Kondo & Mahito Yokota
// 100 bpm, 3/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: ch 1 "Piccolo" named as a pipe, played on piccolo (its orchestral harp patch is not one); ch 2 "Oboe" named as a reed, played on oboe (its pizzicato strings patch is not one); ch 3 "Clarinet" named as a reed, played on clarinet (its vibraphone patch is not one); ch 4 "Horn in F" named as a brass, played on brass section (its string ensemble 1 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5462761; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 57 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · piccolo
const piccolo = note("<A B C B A B C B D E F G A B C B D E F G H I J K H L M@4 ~@8 N@2 O@7 P@5 Q@4 ~>".pickRestart({
  A: "~ g3 e4@4, c3", B: "~ a3 f#4@4, c3", C: "~ b3 g4@4, c3", D: "~ b3 a4@4, b2", E: "~ c#4 g4@4, a#2",
  F: "~ c4 g4@4, a2", G: "~ c4 f#4@4, d3", H: "~ c4 e4 a4 [e4,c6] [c4,b5], f2, d6@2 ~",
  I: "c6 [b3,b5] d4 g4 d4 b3, e2, ~@8 g5@15 ~", J: "~ a3 c4 f4 [c4,b5] [a3,a5], d2, c6@2 ~",
  K: "b5 [g3,a5] b3 e4 b3 g3, c2, ~@8 e5@15 ~", L: "c6 [b3,b5] d4 g4 d4 b3, e2, ~ g5 c6",
  M: "[~@4 a3@4 c4@4 ~ f4@4 c4@4 a3@4 ~@3 d4@3 e4@3 g4@6 b4@12 ~@3 a4@3 b4@3 g5@19 ~@16, g6@19 ~@5, d#2@25 d2@27 g2@28 ~@16]/4",
  N: "[~@11 [b4,b5]@16 [d5,d6]@8 [a4,a5]@13]/2", // B D A
  O: "[~@3 [g4,g5]@4 [a4,a5]@4 [b4,b5]@16 [d5,d6]@8 [a4,a5]@24 [b4,b5]@16 [d5,d6]@8 [a5,a6]@16 [g5,g6]@8 [d6,d7]@48 d6@13]/7", // G A B D A B D A …
  P: "[~@3 c6@4 b5@4 c6@4 b5@4 g5@16 c6@16 b5@4 a5@4 b5@4 a5@4 e5@16 d6@16 c6@4 b5@4 c6@4 b5@4 g5@5]/5",
  Q: "[~@3 c6@8 g6@76 ~@9]/4",
})).s("gm_piccolo").gain(0.25)

// chords · piccolo · soft notes
const piccolo_soft = note("<~@30 A@8 B@4 C@4 D@6 E@5>".pickRestart({
  A: "[~@11 c2@24 c2@24 c2@24 c2@16 c3@8 b2@24 a#2@24 a2@24 d3@13]/8",
  B: "[~@3 d2@8 c2@16 c3@8 c2@16 d3@8 c2@16 c3@8 c2@13]/4", C: "[~@3 d3@8 ~@4 d4@20 ~@4 c#4@20 ~@4 c4@20 ~@4 c4@9]/4",
  D: "[~@15 c4@4 e4@4 a4@4 e4@4 c4@4 ~@4 b3@4 d4@4 g4@4 d4@4 b3@4 ~@4 a3@4 c4@4 f4@4 c4@4 a3@4 ~@4 g3@4 b3@4 e4@4 b3@4 g3@4 ~@4 c4@4 e4@4 a4@4 e4@4 c4@4 ~@4 b3@4 d4@4 g4, ~@11 f3@24 e3@24 d3@24 c3@24 f3@24 e3@13]/6",
  E: "[~@3 d4@4 b3@4 ~@4 a3@4 c4@4 f4@4 ~ c4@4 a3@4 ~@5 c4@22 ~@4 d4@5 g4@6 a4@6 ~ b4@6 [g3,d5]@28 ~, ~@11 g7@80 ~@29, ~@11 d#3@25 d3@27 g3@28 ~@29]/5", // G5
})).s("gm_piccolo").gain(0.15)

// other · clarinet
const clarinet = note("<~@4 A B A C A D E C ~@18 F@8 ~@12 G@6 ~>".pickRestart({
  A: "b4@2 d5", B: "a4@4 g4 a4", C: "a4", D: "a5@2 g5", E: "d5@4 c5 b4",
  F: "[~@11 b3@16 d4@8 a3@16 g3@4 a3@4 b3@16 d4@8 a3@24 ~@8 b3@8 d4@8 a4@16 g4@8 d4@16 c4@4 b3@4 c4@8 d4@5]/8",
  G: "[~@11 f4@24 e4@16 e4@4 f4@4 g4@80 ~@5]/6",
})).s("gm_clarinet").gain(0.15)

// chords · brass section · "Horn in F"
const brass_section = note("<~@11 A B C B C@2 D@2 E ~@10 F@5 G@8 H@5 I@8 ~>".pickRestart({
  A: "~@2 [f#4,a4]", B: "[g4,b4]", C: "[f#4,a4]", D: "[e4,g4]", E: "[d4,f#4]",
  F: "[~@11 b3@16 d4@8 a3@16 g3@4 a3@4 b3@16 d4@8 [a3,g4,b4]@24 ~@8 b3@5, ~@11 [f#4,a4]@24 [g4,b4]@24 [f#4,a4]@24 ~@37]/5", // Em F#m G F#m
  G: "[~@3 d4@8 ~@8 f#4@8 g4@8 ~@12 g4@4 [c4,a4]@4 [b3,g4]@4 [c4,g4]@8 [d4,f#4]@8 ~@12 e5@4 [e5,g5]@4 e5@4 [e5,g5]@4 e5@4 ~@4 f#5@4 [f#5,a5]@4 f#5@4 [f#5,a5]@4 f#5@4 ~@4 e5@4 [e5,g5]@4 e5@4 [e5,g5]@4 e5@4 ~@4 f#5@4 [f#5,a5]@4 f#5@4 [f#5,a5]@4 f#5@4 ~@4 b4@4 [b4,d5]@4 [d4,b4], ~@11 a4@16 ~@8 d4@16 ~@36 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4@2 ~@6 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4@2 ~@6 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4@2 ~@6 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4@2 ~@6 d4@2 ~@2 d4@2 ~@3]/8", // F Em C5 D Em F#m Em F#m …
  H: "[~@3 [b4,d5]@4 b4@4 ~@4 a#4@4 [a#4,c#5]@4 a#4@4 [a#4,c#5]@4 a#4@4 ~@4 a4@4 [a4,c5]@4 a4@4 [a4,c5]@4 a4@4 ~@4 g5@4 a5@4 g5@4 [d4,f#5]@8 a3@24 g3@13, ~@3 d4@2 ~@2 d4@2 ~@6 c#4@2 ~@2 c#4@2 ~@2 c#4@2 ~@2 c#4@2 ~@2 c#4@2 ~@6 c4@2 ~@2 c4@2 ~@2 c4@2 ~@2 c4@2 ~@2 c4@2 ~@6 d4@2 ~@2 d4@2 ~@2 d4@2 ~@47]/5", // Bm A#m Am D
  I: "[~@3 a3@4 b3@4 d3@24 ~@16 g4@8 a4@24 g4@8 a4@8 f5@8 g5@8 [a#3,a#5]@8 ~ [a#3,f6]@8 c4@27 d4@28 ~@5, ~@35 c3@24 ~@73 g6@55 ~@5]/8", // A# A#5
})).s("gm_brass_section").gain(0.15)

// other · string ensemble 1 · "Violas"
const string_ensemble_1 = note("<~@11 A B C B C@2 B@2 D E F G H E F@2 ~@3 I@8 ~@8 J@6 K@4 ~>".pickRestart({
  A: "~@2 d4", B: "e4", C: "d4", D: "f#4", E: "~ a3 ~", F: "~ g3 ~", G: "~ f3 ~", H: "~ e3 ~",
  I: "[~@11 b3@8 g3@8 d4@8 a3@16 g3@8 b3@8 g3@8 d4@8 a3@8 f#4@8 d4@8 ~@8 b3@8 d4@8 e4@8 f#4@8 g4@8 ~@12 g4@4 a4@4 g4@4 g4@8 f#4@5]/8",
  J: "[~@11 a4@24 g4@16 e4@8 f4@24 e4@24 a4@24 g4@8 a4@5]/6", K: "[~@3 f5@8 g5@80 ~@5]/4",
})).s("gm_string_ensemble_1").gain(0.15)

// other · string ensemble 1 · "Violoncellos"
const string_ensemble_1_2 = note("<~@20 A B C D A B E F@3 ~@4 G@5 ~@12 H@5 ~>".pickRestart({
  A: "~ c3@3 ~@2", B: "~ b2@3 ~@2", C: "~ a2@3 ~@2", D: "~ g2@3 ~@2", E: "~@4 a#2@13 ~@7",
  F: "[~@6 a2@22 ~@5 b2@24 ~@15]/3", G: "[~@3 c3@5 ~@3 b2@16 ~@8 a#2@16 ~@8 a2@16 ~@8 d3@16 ~@21]/5",
  H: "[~@19 e2@16 d#2@25 d2@27 g2@28 ~@5]/5",
})).s("gm_string_ensemble_1").gain(0.15)

// other · string ensemble 1 · "Contrabasses"
const string_ensemble_1_3 = note("<~@20 A B C D A B E F@3 G@8 H@5 I@4 ~@3 J@6 ~>".pickRestart({
  A: "f2@2 ~", B: "e2@2 ~", C: "d2@2 ~", D: "c2@2 ~", E: "d#2@17 ~@7", F: "[~ d2@27 g2@28 ~@16]/3",
  G: "[~@11 c2@16 ~@8 c2@16 ~@8 c2@16 ~@8 c2@16 c3@5 ~@3 b2@16 ~@8 a#2@16 ~@8 a2@16 ~@8 d3@13]/8",
  H: "[~@3 d2@5 ~@3 c2@16 c3@5 ~@3 c2@16 d3@5 ~@3 c2@16 c3@5 ~@3 c2@16 d3@5 ~@3 b1@5 ~@3 d2@5]/5",
  I: "[~@3 b2@5 ~@3 a#2@16 a#1@5 ~@3 a1@16 a2@5 ~@3 d3@24 ~@13]/4",
  J: "[~@19 f2@16 ~@8 e2@16 d#2@25 d2@27 g2@28 ~@5]/6",
})).s("gm_string_ensemble_1").gain(0.15)

stack(piccolo, piccolo_soft, clarinet, brass_section, string_ensemble_1, string_ensemble_1_2, string_ensemble_1_3)