Strudelify

Ichor

Xtrullor

KeyD majorTempo160 bpm
0:00/0:00
// Ichor — Xtrullor
// 160 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 2 "Oboe" oboe (copy of ch 1 "Flute" flute); ch 6 "Tenor Saxophone" tenor sax (copy of ch 5 "Alto Saxophone" alto sax); ch 7 "B♭ Trumpet" trumpet (copy of ch 16 "Voice" choir aahs)
// note: Transcription provider: pdmx. https://musescore.com/score/5928043; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 54 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 · flute
const flute = note("<~@13 A@3 B A@3 C A@3 B A C ~@2 D@2 E@2 F G H I D@2 E@2 F G H I ~@9>".pickRestart({
  A: "f#5!2 d5!2 c#5!2 b4!2", B: "f#5!2 d5!2 c#5!2 b4!2, ~ c#5 d5 e5", C: "f#5!2 d5!2 c#5!2 b4!2, ~ e5 a5 b5",
  D: "[f#4 b4 c#5 d5@7 ~@3 d5 c#5 a4, ~@6 c#5 ~]/2", E: "[b4@3 f#4@9 f#5 e5 d5 b4]/2", F: "d5 b4@2 ~",
  G: "b4 a4 b4 c#5", H: "d5@2 ~ c#5 ~@2 f#5@2", I: "~ a5 b5 ~",
})).s("gm_flute").gain(0.4)

// other · flute · soft notes
const flute_soft = note("<~ A@4 B@8 ~@16 C D E F E@3 G C D E F E@3 G ~@9>".pickRestart({
  A: "[b5@15 ~]/2", B: "b5!4", C: "f#5@2 d5 ~ c#5@2 b4@2", D: "f#5 d5 ~ b4", E: "f#5 d5 c#5 b4", F: "f#5 c#5 d5 e5",
  G: "f#5 e5 a5 b5",
})).s("gm_flute").gain(0.2)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<~@13 A@3 B A@3 C A@3 B A C ~@2 D@2 E@2 F@4 D@2 E@2 F@4 ~@9>".pickRestart({
  A: "f#4!2 d4!2 c#4!2 b3!2, f#5 d5 c#5 b4", B: "f#4!2 d4!2 c#4!2 b3!2, f#5 c#5 d5 e5",
  C: "f#4!2 d4!2 c#4!2 b3!2, f#5 e5 a5 b5", D: "[[f#3,b3] ~ c#4 d4@9 ~ d4 ~ a3, ~ b3@11 c#4@2 c#4@2]/2",
  E: "[b3@3 ~ a4@2 e4@6 ~ e4 d4 b3, f#4 ~@2 f#4, ~@3 f#3@9 ~@4]/2",
  F: "[d4@2 ~@2 c#5@2 ~@4 a3@2 b3@2 c#4@2 d4@3 ~ a5@2 f#4@4 a4@2 b4@4, b4@4 ~@2 d5@3 c#5@3 f#5@8 ~@2 b5@10, ~@2 b3@6 b3@2 ~@9 c#4@3 ~@10]/4",
})).s("gm_clarinet").gain(0.4)

// chords · clarinet · "Bass Clarinet"
const clarinet_2 = note("<A@8 ~@5 B@14 ~@2 C@2 D E D F E G C@2 D E D F E G ~@9>".pickRestart({
  A: "b2/4", B: "[[b1,f#2,b2,d3,f#3]@3 [b1,f#2,b2,d3,f#3]@2 [b1,f#2,b2,d3,f#3]@3]/2", C: "b2/2", D: "f#2", E: "b2",
  F: "g2", G: "d3",
})).s("gm_clarinet").gain(0.15)

// chords · alto sax · "Alto Saxophone"
const alto_sax = note("<~@13 A@14 ~@2 B@2 C@2 D E F@2 B@2 C@2 D E F@2 ~@9>".pickRestart({
  A: "[[f#2,c#3,f#3,a3,c#4]@3 [f#2,c#3,f#3,a3,c#4]@2 [f#2,c#3,f#3,a3,c#4]@3]/2", B: "[f#3 b3 c#4 d4@9 c#4 d4 c#4 a3]/2",
  C: "[b3@3 f#3@9 f#4 e4 d4 b3]/2", D: "d4 b3@3", E: "b3 a3 b3 c#4", F: "[d4@3 c#4@3 f#4@4 a4@2 b4@4]/2",
})).s("gm_alto_sax").gain(0.15)

// other · french horn · "Horn in F"
const french_horn = note("<A@8 ~@21 B@2 C@2 D E F@2 B@2 C@2 D E F@2 ~@9>".pickRestart({
  A: "b3/4", B: "[f#3 b3 c#4 d4@9 c#4 d4 c#4 a3]/2", C: "[b3@3 f#3@9 f#4 e4 d4 b3]/2", D: "d4 b3@3", E: "b3 a3 b3 c#4",
  F: "[d4@3 c#4@3 f#4@4 a4@2 b4@4]/2",
})).s("gm_french_horn").gain(0.5)

// chords · trombone
const trombone = note("<~@7 A B ~@4 C@14 ~@2 D@2 E F E G F H D@2 E F E G F H ~@9>".pickRestart({
  A: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~", B: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2!2 b2@3 ~",
  C: "[[b1,f#2,b2,d3,f#3]@3 [b1,f#2,b2,d3,f#3]@2 [b1,f#2,b2,d3,f#3]@3]/2", D: "e3/2", E: "f#3", F: "b3", G: "g3",
  H: "d4",
})).s("gm_trombone").gain(0.15)

// bass · tuba
const bass = note("<~@29 A@2 B C B D C E A@2 B C B D C E ~@9>".pickRestart({
  A: "e2/2", B: "f#2", C: "b2", D: "g2", E: "d3",
})).s("gm_tuba").gain(0.3)

// other · glockenspiel
const glockenspiel = note("<~@7 A B A@7 C A@3 D A@3 C A D E F A@3 C A@3 G@2 A@2 C A@3 H@2 A@3 C A@3 D>".pickRestart({
  A: "f#7 d7 c#7 b6", B: "f#7 d7 c#7 d7", C: "f#7 c#7 d7 e7", D: "f#7 e7 a7 b7", E: "f#6 b6 c#7 d7@5", F: "b5 b6",
  G: "[f#7 e7 a7 ~ f#7 d7 c#7 b6, ~@3 b7@5]/2", H: "[f#7 e7 a7 b7@5]/2",
})).s("gm_glockenspiel").gain(0.2)

// other · piano · "Grand Piano"
const piano = note("<A@3 ~@2 B@2 C@2 D@4 E@14 ~@2 F@2 G@2 H I J@2 F@2 G@2 H I J@2 ~@9>".pickRestart({
  A: "[~ b1 ~@2 c#6@2, g6@2 ~, ~ b5@4 ~, ~ [b1,d6]@2]/3", B: "[f#3@2 b3@2 c#4@2 d4@17 ~ c#4@2 d4@2 c#4@2 a3@2]/2",
  C: "[b3@6 f#3@25 ~]/2",
  D: "[~@15 b4, [b1,f#5]@4 b1@7 b4@4 ~, ~ d5@3 f#5@3 d5 f#5@4 f#5@4, ~@2 c#5@3 d5 c#5@3 d5@4 d5@3, ~@3 b4@7 c#5@4 c#5@2]/4", // B5
  E: "[[b1,f#2,b2,d3,f#3]@11 ~ [b1,f#2,b2,d3,f#3]@8 [b1,f#2,b2,d3,f#3]@11 ~]/2", // Bm
  F: "[[f#1,f#2,f#3,f#4] [b1,b2,b3,b4] [c#2,c#3,c#4,c#5] [d2,d3,d4,d5]@9 [c#2,c#3,c#4,c#5] [d2,d3,d4,d5] [c#2,c#3,c#4,c#5] [a1,a2,a3,a4]]/2", // F# B C# D C# D C# A
  G: "[[b1,b2,b3,b4]@3 [f#1,f#2,f#3,f#4]@9 [f#2,f#3,f#4,f#5] [e2,e3,e4,e5] [d2,d3,d4,d5] [c#2,c#3,c#4,c#5]]/2", // B F# E D C#
  H: "[d2,d3,d4,d5] [b1,b2,b3,b4]@3", I: "[b1,b2,b3,b4]!2 [a1,a2,a3,a4]!2 [b1,b2,b3,b4]!2 [c#2,c#3,c#4,c#5]!2",
  J: "[[d2,d3,d4,d5]@3 [c#2,c#3,c#4,c#5]@3 [f#2,f#3,f#4,f#5]@4 [a2,a3,a4,a5]@2 [b2,b3,b4,b5]@4]/2", // D C# F# A B
})).s("gm_piano").gain(0.2)

// other · piano · "Grand Piano" · soft notes
const piano_soft = note("<~@46 [f#5 d5 c#5 b4]!3 [f#5 c#5 d5 e5] [f#5 d5 c#5 b4]!3 [f#5 e5 a5 b5]>")
  .s("gm_piano").gain(0.05)

// other · harpsichord
const harpsichord = note("<~@29 A@2 B@2 C D E@2 A@2 B@2 C D E@2 ~@9>".pickRestart({
  A: "[[f#1,f#2,f#3,f#4] [b1,b2,b3,b4] [c#2,c#3,c#4,c#5] [d2,d3,d4,d5]@9 [c#2,c#3,c#4,c#5] [d2,d3,d4,d5] [c#2,c#3,c#4,c#5] [a1,a2,a3,a4]]/2", // F# B C# D C# D C# A
  B: "[[b1,b2,b3,b4]@3 [f#1,f#2,f#3,f#4]@9 [f#2,f#3,f#4,f#5] [e2,e3,e4,e5] [d2,d3,d4,d5] [c#2,c#3,c#4,c#5]]/2", // B F# E D C#
  C: "[d2,d3,d4,d5] [b1,b2,b3,b4]@3", D: "[b1,b2,b3,b4]!2 [a1,a2,a3,a4]!2 [b1,b2,b3,b4]!2 [c#2,c#3,c#4,c#5]!2",
  E: "[[d2,d3,d4,d5]@3 [c#2,c#3,c#4,c#5]@3 [f#2,f#3,f#4,f#5]@4 [a2,a3,a4,a5]@2 [b2,b3,b4,b5]@4]/2", // D C# F# A B
})).s("gm_harpsichord").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@13 A B A B A B A B A B A B ~@4 C@2 D C@4 D C@2 D C@4 D ~@9>".pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~ x ~ x!5", C: "x", D: "x ~@2 x ~@4",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@8 A ~@4 B C B C B C B C B C B C D E ~@2 F@16 ~@9>".pickRestart({
  A: "~@10 x!3 ~@3", B: "x ~@2 x ~@2 x ~", C: "~ x ~ x!5", D: "x!8", E: "x!16", F: "~ x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@29 A@2 B A@4 B A@2 B A@4 B ~@9>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@7 A@2 B ~@19 C D@2 C D C D@2 C D@2 C D C D@2 ~@9>".pickRestart({
  A: "x!16", B: "x", C: "~ x", D: "x!2",
})).gain(0.2)

stack(
  flute, flute_soft, clarinet, clarinet_2, alto_sax, french_horn, trombone, bass, glockenspiel, piano, piano_soft,
  harpsichord, kick, snare, low_tom, crash
)