Strudelify

Tangled

NyxTheShield

KeyG majorTempo180 bpm
0:00/0:00
// Tangled — NyxTheShield
// 180 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5856501; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 43 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · string ensemble 1 · "Violins"
const string_ensemble_1 = note("<~ A@2 B@2 C@2 D E A@2 B@2 C@2 D E ~@26>".pickRestart({
  A: "a4/2", B: "g4/2", C: "f#4/2", D: "f4", E: "g4",
})).s("gm_string_ensemble_1").gain(0.2)

// other · string ensemble 1 · "Violins"
const string_ensemble_1_2 = note(`<
  ~ A@2 B@2 C@2 D E A@2 B@2 C@2 D E ~ C@2 F@2 G@2 H I C@2 F@2 G@2 H I D ~@8
>`.pickRestart({
  A: "c5/2", B: "b4/2", C: "a4/2", D: "a4", E: "b4", F: "g4/2", G: "f#4/2", H: "f4", I: "g4",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · string ensemble 1 · "Violoncellos"
const string_ensemble_1_3 = note(`<
  ~ A@2 B@2 C@2 D E A@2 B@2 C@2 D E ~ F@2 G@2 H@2 I J F@2 G@2 H@2 I J K ~@8
>`.pickRestart({
  A: "[a2,c3]/2", B: "[g2,b2]/2", C: "[f#2,a2]/2", D: "[f2,a2]", E: "[g2,b2]", F: "a2/2", G: "g2/2", H: "f#2/2",
  I: "f2", J: "g2", K: "a2",
})).s("gm_string_ensemble_1").gain(0.25)

// drums · clap
const clap = s("cp").struct("<~@9 A ~ A B C@2 D B ~ D@9 E D@4 E@2 A ~@8>".pickRestart({
  A: "x", B: "x ~@7 x ~@2 x ~ x ~@2", C: "x ~@2 x ~@4", D: "x!2", E: "x!4",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~ A B C@2 D B ~ D@9 E D@4 E@2 A ~@8>".pickRestart({
  A: "x", B: "x ~@7 x ~@2 x ~ x ~@2", C: "x ~@2 x ~@4", D: "x!2", E: "x!4",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@9 A ~ A B C@2 D B ~@7 D E ~@6 D F A ~@8>".pickRestart({
  A: "x", B: "x ~@7 x ~@2 x ~ x ~@2", C: "x ~@2 x ~@4", D: "x!2", E: "x ~ x!2", F: "x ~@7 x!2 ~ x!3 ~ x",
})).gain(0.5)

stack(string_ensemble_1, string_ensemble_1_2, string_ensemble_1_3, clap, low_tom, crash)