Strudelify
KeyB♭ majorTempo50 bpm
0:00/0:00
// Mist — Akira SenjuArranger: Luc Eldridge
// 50 bpm, 3/4, key A# 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 9 "Alto Flute" named as a pipe, played on flute (its string ensemble 1 patch is not one); ch 1 "Flute" named as a pipe, played on flute (its acoustic bass patch is not one); ch 2 "B♭ Clarinet" named as a reed, played on clarinet (its tremolo strings patch is not one); ch 3 "Violins" named as a string part, played on violin (its french horn patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5910531; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 40 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(50/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 · flute · "Alto Flute"
const flute = note("<A@7 B@2 C@7 ~@4 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@4>".pickRestart({
  A: "[gb3@29 d3@29 e3@29 c3@25]/7", B: "[~@42 ab3@14 a3@15 b3@14 db4@11, ~@13 gb3@83]/2",
  C: "[~@4 d3@87 ~@29 a3@15 b3@14 c4@15 d4@14 [c3,eb4]@131 ~@27, ~@4 c4@44 ~@43 e3@87 ~@158]/7", // Cm
  D: "[~@2 d4 e4 b4@8]/2", E: "[~@2 c5@3 g4@3 eb4@4]/2", F: "[d4,eb4]/2", G: "[bb3,b3]/2",
  H: "[~@2 f4 g4 d5@8, [d4,eb4]]/2", I: "[~@2 eb5@3 bb4@3 gb4@4, [bb3,b3]]/2", J: "[~@2 a4 bb4 f5@8, [d4,eb4]]/2",
  K: "[~@2 gb5@3 db5@3 bb4@4, [bb3,b3]]/2", L: "[a4@4 bb4@4 f5@65 ~@23, [d4,eb4]@73 ~@23]/4",
})).s("gm_flute").gain(0.2)

// chords · flute · "Alto Flute" · soft notes
const flute_soft = note("<~@16 A@2 B@2 A@2 B@2 ~@16>".pickRestart({
  A: "[b3,c4]/2", B: "[g3,ab3]/2",
})).s("gm_flute").gain(0.05)

// other · flute
const flute_2 = note("<~@14 A@2 B@2 C@2 B@2 C@2 D@2 E@2 F G H I F G E@2 ~@4>".pickRestart({
  A: "[~@10 [d5,f5]@7 ~@7, ~@11 bb4@55 ~@30]/2", B: "[a1 a1@5]/2", C: "f2/2", D: "[c2 c2@5]/2", E: "[ab1!2 ab1@4]/2",
  F: "c2!3", G: "c2", H: "ab1!3", I: "ab1",
})).s("gm_flute").gain(0.15)

// other · flute · soft notes · Bb Gb
const flute_soft_2 = note("<~@29 [[bb5,d6]@47 ~] ~ [[gb5,bb5]@47 ~] ~@8>").s("gm_flute").gain(0.05)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<~@9 A B@3 C@3 ~@4 D@2 E@2 ~@4 F@2 G@2 H@2 I@2 J@4>".pickRestart({
  A: "~@11 a4@5", B: "[g4@14 f4@15 e4@14 d4@73 ~@28]/3", C: "[~@16 g4@14 f4@15 g4@14 d5@29 f5@29 ~@27]/3",
  D: "[~@2 d4 e4 b4@8]/2", E: "[~@2 c5@3 g4@3 eb4@4]/2", F: "[~@2 f4 g4 d5@8]/2", G: "[~@2 eb5@3 bb4@3 gb4@4]/2",
  H: "[~@2 a4 bb4 f5@8]/2", I: "[~@2 gb5@3 db5@3 bb4@4]/2", J: "[a4@4 bb4@4 f5@65 ~@23]/4",
})).s("gm_clarinet").gain(0.25)

// chords · violin · "Violins"
const violin = note("<A@2 B@7 C@2 D@2 E@3 ~@8 F@2 G@2 F@2 G@2 F@2 G@2 ~ H@3>".pickRestart({
  A: "[~@14 [d4,a4,e5]@73 ~@9]/2", // Dsus2
  B: "[~@5 [bb3,f4,c5]@73 ~@15 [c4,g4,d5]@73 ~@14 [ab3,eb4,bb4]@73 ~@14 [d4,a4,e5]@69]/7", // Bbsus2 Csus2 Absus2 Dsus2
  C: "[~@18 [bb3,f4,c5]@73 ~@5]/2", D: "[~@10 [c4,g4,d5]@73 ~@13]/2", E: "[~ [ab3,eb4,bb4]@116 ~@27]/3", F: "eb4/2",
  G: "gb4/2", H: "[[bb5,d6,f6]@49 ~@23]/3",
})).s("gm_violin").gain(0.15)

// chords · violin · "Violins" · soft notes
const violin_soft = note("<~@17 A ~ B ~ A ~ C ~ D ~ E ~ D ~ E ~ D ~ E ~@4>".pickRestart({
  A: "[d5,g5,b5]", B: "[bb4,d5,g5]", C: "[g5,bb5,d6]", D: "[f5,bb5,d6]", E: "[db5,gb5,bb5]",
})).s("gm_violin").gain(0.05)

// other · pizzicato strings · "Violas"
const pizzicato_strings = note("<A@7 B@4 C@5 ~@16 D@2 E@2 F@4>".pickRestart({
  A: "[~@7 db4@80 ~@7 a3@80 ~@7 b3@80 ~@8 g3@67]/7", B: "[~@20 db4@80 ~@7 a3@80 ~@5]/4",
  C: "[~ b3@40 ~@4 g3@62 ~@13]/5", D: "bb4/2", E: "gb4/2", F: "[bb4@73 ~@23]/4",
})).s("gm_pizzicato_strings").gain(0.15)

// other · pizzicato strings · "Violas" · soft notes
const pizzicato_strings_soft = note("<~@16 A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 ~@8>".pickRestart({
  A: "g4/2", B: "eb4/2", C: "bb4/2", D: "gb4/2",
})).s("gm_pizzicato_strings").gain(0.05)

// other · string ensemble 1 · "Contrabasses"
const string_ensemble_1 = note("<~@16 A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 C@2 D@2 E@4>".pickRestart({
  A: "a2/2", B: "f2/2", C: "c2/2", D: "ab2/2", E: "[[c2,c3]@73 ~@23]/4",
})).s("gm_string_ensemble_1").gain(0.2)

// bass · contrabass
const bass = note("<~@36 A@4>".pickRestart({
  A: "[c2@73 ~@23]/4",
})).s("gm_contrabass").gain(0.2)

// other · vibraphone
const vibraphone = note("<~@24 A@3 B A@3 B A@3 B ~@4>".pickRestart({
  A: "[~ [eb5,eb6]@2 [d5,d6]@2 [eb5,eb6]@2 [d5,d6]@2 [eb5,eb6]@2 [d5,d6]@2 [eb5,eb6]@2 [f5,f6]@2 [gb5,gb6]]/3", // Eb D Eb D Eb D Eb F …
  B: "~ [f5,f6] ~ [eb5,gb6] ~ [f5,f6]", // F Ebm F
})).s("gm_vibraphone").gain(0.25)

stack(
  flute, flute_soft, flute_2, flute_soft_2, clarinet, violin, violin_soft, pizzicato_strings, pizzicato_strings_soft,
  string_ensemble_1, bass, vibraphone
)