Strudelify

Fgo Christmas BGM

FGO mobile game

KeyD majorTempo115 bpm
0:00/0:00
// Fgo Christmas BGM — FGO mobile game
// 115 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "B♭ Clarinet" named as a reed, played on clarinet (its tremolo strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5903621; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<A B C D A B C E A B C D F G H E ~@16 A B C D A B C E A B C D F G H E ~@16>".pickRestart({
  A: "e4 g4@2 ~", B: "d4 f4@2 ~", C: "e4@4 g4@4 b4@4 ~@2 c5 ~", D: "g4", E: "d5", F: "e4 g4@3", G: "d4 f4@3",
  H: "e4@4 g4@4 b4@6 c5 ~",
})).s("gm_clarinet").gain(0.3)

// other · flute
const flute = note(`<
  ~@4 A B C D A B C E F G H D I J K L I J M N I J K L O P D L ~@4 A B C D A B C E F G H D I J K L I J M N I J K L O P D
  L
>`.pickRestart({
  A: "e4 g4@2 ~", B: "d4 f4@2 ~", C: "e4@4 g4@4 b4@4 ~@2 c5 ~", D: "d5@15 ~", E: "g4@15 ~", F: "e4@4 g4@11 ~",
  G: "d4@4 f4@11 ~", H: "e4@4 g4@4 b4@6 c5 ~", I: "a5 g5 f5 e5", J: "d5@11 ~ f5@4", K: "e5 f5 g5 e5", L: "c5@15 ~",
  M: "e5 f5", N: "g5@15 ~", O: "a4 b4 c5 f5", P: "e5 d5 c5 b4",
})).s("gm_flute").gain(0.25)

// other · viola
const viola = note("<~@8 A B C D E F G H ~@8 I J K L M N O L ~@8 A B C D E F G H ~@8 I J K L M N O L>".pickRestart({
  A: "e4 g4@2 ~", B: "d4 f4@2 ~", C: "e4@4 g4@4 b4@4 ~@2 c5 ~", D: "g4", E: "e4 g4@3", F: "d4 f4@3",
  G: "e4@4 g4@4 b4@6 c5 ~", H: "d5", I: "a4 g4 f4 e4", J: "d4@3 f4", K: "e4 f4 g4 e4", L: "c4", M: "a3 b3 c4 f4",
  N: "e4 d4 c4 b3", O: "d4",
})).s("gm_viola").gain(0.25)

// other · pizzicato strings · "Violin"
const pizzicato_strings = note(`<
  A@16 ~@2 B C ~@2 D E ~@2 B C ~@2 F G A@16 ~@2 B C ~@2 D E ~@2 B C ~@2 F G
>`.pickRestart({
  A: "~ g4 ~ g4 ~ g4 ~ g4", B: "g3 c4 e4 f4 g4 ~@3", C: "~ e4 a4 e4 ~ e4 g4 e4", D: "~ e5 ~ f5",
  E: "~@2 c6 ~ g5 ~ e5 ~", F: "d5 ~ g5 ~ f5 ~ g5 ~", G: "e5 ~ g5 ~ c5@2 ~@2",
})).s("gm_pizzicato_strings").gain(0.3)

// other · string ensemble 1 · "Violins"
const string_ensemble_1 = note("<~@24 A B C D E F G D ~@24 A B C D E F G D>".pickRestart({
  A: "a5 g5 f5 e5", B: "d5@3 f5", C: "e5 f5 g5 e5", D: "c5", E: "a4 b4 c5 f5", F: "e5 d5 c5 b4", G: "d5",
})).s("gm_string_ensemble_1").gain(0.2)

// other · vibraphone
const vibraphone = note(`<
  A B C D A B C E A B C D A B C E ~@6 F G ~@6 H I A B C D A B C E A B C D A B C E ~@6 F G ~@6 H I
>`.pickRestart({
  A: "e4 g4@2 ~", B: "d4 f4@2 ~", C: "e4@4 g4@4 b4@4 ~@2 c5 ~", D: "g4", E: "d5", F: "~ e5 ~ f5",
  G: "~@2 c6 ~ g5 ~ e5 ~", H: "d5 ~ g5 ~ f5 ~ g5 ~", I: "e5 ~ g5 ~ c5@2 ~@2",
})).s("gm_vibraphone").gain(0.3)

// other · piano · "Toy Piano"
const piano = note("<~@22 A B ~@6 C D ~@22 A B ~@6 C D>".pickRestart({
  A: "~ e5 ~ f5", B: "~@2 c6 ~ g5 ~ e5 ~", C: "d5 ~ g5 ~ f5 ~ g5 ~", D: "e5 ~ g5 ~ c5@2 ~@2",
})).s("gm_piano").gain(0.3)

// other · xylophone
const xylophone = note("<A@16 ~@4 B C D E B C F G H I J G A@16 ~@4 B C D E B C F G H I J G>".pickRestart({
  A: "~ g5 ~ g5 ~ g5 ~ g5", B: "a5 g5 f5 e5", C: "d5@3 f5", D: "~ e6 ~ f6", E: "~@2 c7 ~ g6 ~ e6 ~", F: "e5 f5 g5 e5",
  G: "c5", H: "a4 b4 c5 f5", I: "e5 d5 c5 b4", J: "d5",
})).s("gm_xylophone").gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17
>`.pickRestart({
  A: "~@4 x!2 ~@2",
})).gain(0.3)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@15 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@15
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "~@7 x", C: "x ~@6 x",
})).gain(0.3)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@2 x ~",
})).gain(0.29)

// drums · triangle
const triangle = s("triangles:35").struct("<~@15 [~@3 x!13] x ~@30 [~@3 x!13] x ~@15>").gain(1.3)

// drums · triangle · soft notes
const triangle_soft = s("triangles:35").struct("<~@15 [x!3 ~@13] ~@31 [x!3 ~@13] ~@16>").gain(0.86)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<[~ x ~@2]!16 [~ x]!16 [~ x ~@2]!16 [~ x]!16>").gain(1.29)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@16 x ~@31 x ~@15>").gain(1.77)

stack(
  clarinet, flute, viola, pizzicato_strings, string_ensemble_1, vibraphone, piano, xylophone, tambourine, shaker,
  woodblocks, triangle, triangle_soft, jingle_bells, bell_tree
)