Strudelify

Sacred Groove - Twilight Princess Remix

Toru Minegishi Asuka Ota Koji Kondo Original

KeyC majorTempo125 bpm
0:00/0:00
// Sacred Groove - Twilight Princess Remix — Toru Minegishi Asuka Ota Koji Kondo Original
// 125 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 "Saw Synthesizer" lead 2 sawtooth (copy of ch 2 "Oboe" oboe)
// note: Transcription provider: pdmx. https://musescore.com/score/5613610; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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 · oboe
const oboe = note("<~@16 A B A C A B D E F@2 ~@16 A B A C A B D E F@2>".pickRestart({
  A: "d4@2 e4 ~ f4@4 g4@2 a4 ~ b4@4", B: "c5@2 b4 ~ e4@12", C: "c5@2 d5 ~ e5@12",
  D: "d4@2 c4 ~ f4@2 e4 ~ g4@2 f4 ~ a4@2 g4 ~", E: "b4@2 a4 ~ c5@2 b4 ~ d5@2 c5 ~ e5 f5 ~ d5", F: "[e5@3 ~]/2",
})).s("gm_oboe").gain(0.3).pan(0.8)

// chords · orchestral harp · "Harp"
const orchestral_harp = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C D E D F G H@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C D E D F G H@2
>`.pickRestart({
  A: "[e4 f4 a4 c5 e4 f4 a4 c5 e4 f4 a4 c5 e4 f4 a4 c5, a3]/2",
  B: "[b3 c4 e4 g4 b3 c4 e4 g4 b3 c4 e4 g4 b3 c4 e4 g4, e3]/2", C: "c4 d4 f4 a4 b3 d4 f4 a4, f3 ~",
  D: "b3 c4 e4 g4 b3 c4 e4 g4", E: "c4 d4 f4 a4 b3 d4 f4 a4, f3", F: "c4 d4 f4 a4 c4 d4 f4 a4, f3",
  G: "c4 e4 g4 b4 c4 e4 g4 b4", H: "[b3 e4 a4 b4 e4 a4 b4 e5 e4 g#4 b4 e5 b4 g#4 e4 b3, e3]/2",
})).s("gm_orchestral_harp").gain(0.3)

// chords · piano
const piano = note("<~@8 A@2 B@2 A@2 B@2 C D C D E D F D G H ~@8 A@2 B@2 A@2 B@2 C D C D E D F D G H>".pickRestart({
  A: "[[c4,f4,a4]@2 ~@2 [c4,f4,a4]@2 ~@2 [c4,f4,a4]@2 ~@2 [c4,f4,a4]@2 ~@2 [c4,f4,a4]@2 ~@2 [c4,f4,a4]@2 ~@2 [c4,f4,a4] ~@2 [c4,f4,a4] ~@2 [c4,f4,a4]@2, f2@15 ~]/2", // F
  B: "[[g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4]@2, c2@15 ~]/2", // C
  C: "[c4,d4,f4,a4] ~ [c4,d4,f4,a4] ~ [g4,a4,b4,d5] ~ [g4,a4,b4,d5] ~", // Dm7 G
  D: "[c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // C
  E: "[c4,d4,f4,a4] ~ [c4,d4,f4,a4] ~ [d4,g4,a4,b4] ~ [d4,g4,a4,b4] ~", // Dm7 G
  F: "[c4,d4,f4,a4] ~ [c4,d4,f4,a4] ~ [c4,d4,f4,a4] ~ [c4,d4,f4,a4] ~", // Dm7
  G: "[a4,b4,e5] e4!2 [a4,b4,e5]!2 e4!2 [a4,b4,e5]", H: "[e4,g#4,b4,e5] e4!2 [e4,g#4,b4,e5]!2 ~@3",
})).s("gm_piano").gain(0.3)

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  A B C D A B C D A B C D A B C D E F E G E F E H I J A B C D A B C D A B C D A B C D E F E G E F E H I J
>`.pickRestart({
  A: "f2@2 ~@2 f2@2 ~@2 f2@3 f2@2 f2 c2@2", B: "f2@2 ~@2 f2@2 ~@2 f2@3 f2@2 f2 d2@2",
  C: "c2@2 ~@2 c2@2 ~@2 c2@3 c2@2 c2 g1@2", D: "c2@2 ~@2 c2@2 ~@2 c2@3 c2@2 c2 e2@2",
  E: "d2@3 d2@3 d2@2 g1@3 g1@3 g1@2", F: "c2@3 c2@3 c2@2 c2@2 ~ c2 c2@2 c2@2", G: "c2@3 c2@3 c2@2 c2@2 ~ c2 c2@2 c#2@2",
  H: "c2@3 c2@3 c2@2 c2@2 ~ c2 c2@2 d2@2", I: "e2@2 ~@2 e2@2 ~@2 e2@3 e2@3 f2@2", J: "e2 e1!2 e2!2 e1!2 e2",
})).s("gm_electric_bass_pick").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  [x!4]!7
  [x ~ x ~ x ~ x!2]
  [x ~ x ~@4 x ~@2 x ~@3 x ~]!17
  [x ~@2 x ~@3 x ~@2 x ~ x ~@3]
  [x!4]!7
  [x ~ x ~ x ~ x!2]
  [x ~ x ~@4 x ~@2 x ~@3 x ~]!17
  [x ~@2 x ~@3 x ~@2 x ~ x ~@3]
>`).gain(0.3)

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~@7 x] ~@25 [~@7 x] ~@18>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B A B C B A B C B A B A B A B A ~@9 A B A B C B A B C B A B A B A B A ~
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "~@2 x!3 ~ x ~ x ~ x ~ x ~ x ~",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@10 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@8 x ~@16 [~@2 x!3 ~@3] ~@8 x ~@16 [~@2 x!3 ~@3]>").gain(0.3)

stack(oboe, orchestral_harp, piano, bass, kick, snare, low_tom, hihat, open_hat, crash)