Strudelify

Stardew Valley Music (ost)

ConcernedApe

KeyF majorTempo125 bpm
0:00/0:00
// Stardew Valley Music (ost) — ConcernedApe
// 125 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 33, 4/4 at bar 56) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 4 "Double Bass" named as a bass, played on acoustic bass (its contrabass patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5921859; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 119 bars on a 32-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 · [...]/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 · piccolo
const piccolo = note(`<
  ~@16 A B C@2 D B C@2 A ~ E ~ D ~ A F@2 ~@12 G H@2 I@2 J@2 K@4 ~@6 L@2 ~@2 M@3 ~@4 N O@3 ~@3 P Q R S ~@2 T@3 U@6 V@3
  W@4 ~@2 X@2 ~ Y ~ Z@2 ~ AA@2 ~ AB@4
>`.pickRestart({
  A: "g5 d6 g5 d6 g5 d6 g5 d6 g5 d6 g5 d6 g5 d6 g5 d6", B: "d6!4", C: "g5!4",
  D: "g6 eb6 g6 eb6 g6 eb6 g6 eb6 g6 eb6 g6 eb6 g6 eb6 g6 eb6", E: "d6 f6 d6 f6 d6 f6 d6 f6 d6 f6 d6 f6 d6 f6 d6 f6",
  F: "[g5@3 ~]/2", G: "~ bb5@3 e6@6 c6@6", H: "[d6@6 c6@6 d6@5 g6@6 d6@6 c6@6 bb5@6 a5@6 bb5@6 d6@6 bb5@5]/2",
  I: "[~ a5@5 g5@35 ~@23]/2", J: "[~ g5@6 c6@6 d6@6 c6@6 d6@6 g6@6 d6@5 c6@6 bb5@6 a5@6 bb5@4]/2",
  K: "[~@2 d6@6 bb5@6 a5@6 g6@23 bb5@6 a5@6 g5@59 ~@14]/4", L: "[~@27 e6@4 f6@4 g6@4 a6@4 ~ g6@4 f6@4 d6@4 ~@8]/2",
  M: "[~@7 g5@67 ~@22]/3", N: "~@8 d6@4 e6@4 ~ d6@8 b5@7", O: "[~ g5@8 ~ e5@4 g5@4 b5@67 ~@11]/3", P: "~@7 bb5",
  Q: "c6@4 bb5@3 d6@8 d6@4 f6@4 ~@9", R: "~@25 bb5@4 c6@3", S: "~ bb5@4 d6@8 c6@4 bb5@4 ~@11",
  T: "[~@12 bb5@36 bb5@7 c6@14 ~@27]/3", U: "[~@31 f6@30 f6@54 ~@8 b5@12 c6@12 d6@12 e6@12 b5@6 c6@6 d6@6 e6@3]/6",
  V: "[~@3 b5@12 a5@12 b5@12 c6@12 d6@11 e6@6 d6@3 c6@3 b5@6 c6@6 d6@6 e6@4]/3", W: "[~ b5@6 a5@6 g5@24 g5@24 ~@3]/4",
  X: "[~ b5@6 g5@6 ~@11 d6@6 e6@6 ~@28]/2", Y: "b5@3 g5@3 ~@10", Z: "[~@7 f5@48 ~@9]/2", AA: "[~@15 d6@12 c6@5]/2",
  AB: "[~@6 g5@12 f6@12 a6@12 ~@11 e6@71 ~@4]/4",
})).s("gm_piccolo").gain(0.3)

// other · piccolo · soft notes
const piccolo_soft = note("<~@33 A B C D@3 E@4 F G@2 ~@73>".pickRestart({
  A: "~ bb5@3 bb5@3 ~", B: "~@7 bb5@12 bb5@12 ~", C: "~@11 c6@11 c6@10",
  D: "[~@2 g5@6 bb5@6 e6@12 c6@12 ~@11 bb5@12 bb5@12 ~@12 bb5@11]/3",
  E: "[bb5@12 ~@12 c6@12 c6@11 g5@6 bb5@6 e6@12 c6@12 ~@11 bb5@12 bb5@12 ~@10]/4", F: "~@2 bb5@11 bb5@12 ~@7",
  G: "[~@5 c6@12 c6@12 g5@6 ~@29]/2",
})).s("gm_piccolo").gain(0.2)

// other · flute
const flute = note(`<
  ~@8 A@10 B C A@2 D C E F E G H I J ~@15 K L@2 M@7 ~@2 N@3 O P@2 Q@5 R@3 ~ S T@3 ~@7 U V@4 W@4 ~@5 X@4 ~ Y Z@2 AA AB ~
  AC@2 AD@3 AE@5
>`.pickRestart({
  A: "g5!4", B: "d6 f6 d6 f6 d6 f6 d6 f6 d6 f6 d6 f6 d6 f6 d6 f6", C: "d6!4",
  D: "g5 d6 g5 d6 g5 d6 g5 d6 g5 d6 g5 d6 g5 d6 g5 d6", E: "g5 d5 ~@2", F: "~@3 a5", G: "~@3 c6", H: "d6 g5 ~@2",
  I: "c6 ~ f5 ~@5", J: "g5 ~@3", K: "g5", L: "[~@3 d6@34 ~ c5@22 ~@2 bb4@2]/2",
  M: "[~@4 a4@6 g4@34 ~ g5@34 ~ d6@34 ~@2 c5@22 ~ bb4@6 a4@6 g4@53 ~@20]/7",
  N: "[~@30 c5@16 ~@9 g5@4 f5@4 e5@4 f5@4 ~ g5@16 c5@4 d5@4]/3", O: "~ e5@16 c5@15", P: "[~@2 g4@55 ~@3 g5@4]/2",
  Q: "[f5@4 ~ e5@4 f5@4 g5@16 ~ c5@4 d5@4 e5@16 ~ c5@16 g5@63 ~@26]/5",
  R: "[~@3 d5@4 e5@4 d5@8 ~ b4@8 g4@8 e4@4 b4@4 ~ g4@32 ~@19]/3", S: "~@8 d5@4 e5@4 ~ d5@8 b4@7",
  T: "[~ g4@8 ~ e4@4 b4@4 g5@63 ~@15]/3", U: "~@23 bb4@3 d5@3 ~ bb4@2",
  V: "[~ g5@7 ~ f5@7 d6@7 c6@7 bb5@14 bb4@34 ~@2 bb5@7 c6@14 ~@4 bb4@3 ~ d5@3 bb4@3 ~ g5@7 f5@3 f5@2]/4",
  W: "[~@2 d6@2 c6@2 ~ bb5@2 c6@2 ~ bb5@2 g5@2 bb5@14 ~ f4@29 ~ f5@48 ~@19]/4", X: "[~@26 e5@45 ~@3 e5@45 ~@9]/4",
  Y: "~@9 b4@6 c5@6 d5@6 e5@5", Z: "[~ b4@11 ~ a4@11 b4@11 ~ c5@11 ~ d5@11 ~ e5@4]/2",
  AA: "~@2 d5@3 c5@3 b4@6 c5@6 d5@6 e5@6", AB: "b4@11 ~ a4@11 ~@9", AC: "[~@7 c5@45 ~@12]/2",
  AD: "[~@3 b5@11 ~ f5@11 ~ e5@11 ~@12 b5@11 ~ f5@11 ~ e5@11 ~@11]/3",
  AE: "[~@2 b5@11 ~ f5@11 ~ e5@11 ~ c5@11 ~ b5@11 ~ d6@11 ~@12 c5@68 ~@7]/5",
})).s("gm_flute").gain(0.3)

// other · flute · soft notes
const flute_soft = note("<~@33 A B C D@3 E@4 F@3 ~@64 G ~ H I ~@5>".pickRestart({
  A: "~@4 d6@11 ~ d6@11 ~@5", B: "~@7 d6@11 ~ d6@11 ~@2", C: "~@11 e6@11 e6@10",
  D: "[~@2 g4@6 bb4@6 e5@11 ~ c5@11 ~@12 d6@11 ~ d6@11 ~@13 d6@11]/3",
  E: "[d6@11 ~@13 e6@11 ~ e6@11 g4@6 bb4@6 e5@11 ~ c5@11 ~ g5@11 d6@11 ~ d6@11 ~ d6@10]/4",
  F: "[~@2 d6@11 d6@11 ~ c5@11 ~ e6@11 ~ e6@11 ~ g4@34 ~]/3", G: "~@23 c5@9", H: "~@7 c5@11 ~@14", I: "~@11 c5@5",
})).s("gm_flute").gain(0.2)

// other · clarinet · "Bass Clarinet"
const clarinet = note(`<
  A@2 B C A@2 B C A D B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B E@2 ~@12 F ~ G@2 H I J@2 K@3 L M@2 N@2 ~ O ~@8 P@3 Q@3 ~
  R@2 ~@2 S T ~@2 U@3 V@4 ~@18 W@3 X@5
>`.pickRestart({
  A: "g3!4", B: "d4 g3@2 f4@2 g4@2 a4", C: "d4 f4 ~@6", D: "d4 ~@3", E: "[d4 f4@11 ~@4]/2", F: "~ bb2@3 e3@6 c3@6",
  G: "[~@3 g2@6 bb2@6 g3@12 g3@12 ~@25]/2", H: "~@10 g2@6 bb2@5 e3@11", I: "~ c3@12 ~@19",
  J: "[~@8 g2@3 bb2@3 g3@6 g3@6 ~@6]/2", K: "[~@11 bb2@6 a2@6 g2@6 bb2@6 e3@11 c3@35 ~@9 c3@6]/3", L: "~ g3@4 ~@11",
  M: "[~@29 c3@8 g3@8 ~@19]/2", N: "[~@31 c3@8 ~ g3@8 ~@16]/2", O: "~ c3@4 g3@4 ~@7",
  P: "[~@6 e3@4 g3@4 a3@4 b3@4 c4@4 d4@4 ~ b3@4 g3@4 e3@4 d3@4 e3@33 ~ d4@8 b3@7]/3",
  Q: "[~ g3@8 ~ e3@4 b3@4 d4@67 ~@11]/3", R: "[~@30 bb3@4 c4@4 bb3@4 d4@8 c4@3 bb3@4 ~@7]/2", S: "~@25 bb3@4 c4@3",
  T: "~ bb3@4 d4@8 c4@4 bb3@4 ~@11", U: "[~@12 bb3@36 bb3@7 c4@14 ~@27]/3",
  V: "[~@31 ab2@15 f3@15 f3@8 eb3@8 d3@7 c3@31 ~@13]/4", W: "[~@3 d4@12 a3@12 g3@12 ~@11 d4@12 a3@12 g3@12 ~@10]/3",
  X: "[~@2 d4@12 a3@12 g3@12 e3@12 d3@12 f3@12 ~@11 e3@71 ~@4]/5",
})).s("gm_clarinet").gain(0.3)

// other · clarinet · "Bass Clarinet" · soft notes
const clarinet_soft = note("<~@33 A B ~ C@2 D E F@2 G H I@2 ~@49 J@3 K@4 ~@2 L@3 ~ M N O@2 P Q ~@5>".pickRestart({
  A: "~@7 g2", B: "~ bb2@6 g3@12 g3@12 ~", C: "[~ g2@3 bb2@3 e3@6 c3@6 ~@13]/2", D: "~@9 g2@6 bb2@6 g3@11",
  E: "g3@3 ~@5", F: "[~@15 g2@6 bb2@6 e3@12 c3@12 ~@13]/2", G: "~@11 g2@3 bb2@2", H: "~@2 g3@11 g3@12 ~@7",
  I: "[~@29 g2@6 ~@29]/2", J: "[~@27 c3@24 g3@23 c3@22]/3", K: "[~ g3@12 b2@24 b2@24 ~@3]/4", L: "[~ c3 g3 c3]/3",
  M: "~@15 c4@6 b3@6 g3@5", N: "~ e3@6 ~@25", O: "[~@23 e3@12 ~@29]/2", P: "~@7 e3@12 ~@13", Q: "~@11 e3@5",
})).s("gm_clarinet").gain(0.2)

// bass · acoustic bass · "Double Bass"
const bass = note(`<
  ~@8 A B C D E F A B@2 ~ C D E F A B@2 ~ C D E F A G@2 ~@13 B H I@8 J K@3 L M N@5 O ~ P@5 Q@7 R S T U V@4 W@4 ~@22 X@4
>`.pickRestart({
  A: "g2 bb2 d3 f3 ~@2 f3@4 d3@4 g3@2", B: "g2", C: "g3!4 ~@2 g3@8 g3@2", D: "f3", E: "eb3!4 ~@2 d3@8 d3@2", F: "c3",
  G: "[g2@3 ~]/2", H: "~@3 g1@29", I: "[~@6 c2@35 ~ g1@35 g2@35 g1@35 ~ c2@23 bb1@6 a1@6 g1@59 ~@14]/8",
  J: "~@11 g2@8 g2@8 ~@5", K: "[~@12 g2@8 g2@8 ~ e2@8 c2@8 g2@8 ~ g2@8 c3@33 ~]/3", L: "~@2 g2!2",
  M: "~@17 f2@8 ~ f2@6",
  N: "[~@2 e2@8 c2@8 ~ g2@8 g2@8 c3@33 ~ c2@8 c2@8 g2@8 ~ g2@8 ~@8 f2@8 ~ f2@8 e2@8 c2@8 ~ c2@8 g2@8]/5",
  O: "g2@8 ~ c2@23", P: "[~@11 g1@8 ~ g1@8 d2@8 d2@8 ~@9 c2@8 c2@8 ~ b1@8 g1@8 g1@8 ~ d2@8 d2@8 g1@25 ~@9 g1@8 g1@7]/5",
  Q: "[~ d2@8 ~ d2@8 g2@67 ~@8 bb2@10 ~@5 f2@10 ~@6 bb2@10 ~@5 f2@10 ~@6 g2@10 ~@5 d2@10 ~@5 eb3@10 ~@6 bb2@10 ~@5 bb2@8]/7",
  R: "~@7 f2@10 ~@6 bb2@9", S: "~ bb2@2 f2@4 gb2@4 g2@5", T: "~@5 d2@10 ~@5 eb3@10 ~@2", U: "~@4 bb2@10 ~@5 bb2@13",
  V: "[~ f2@7 ~ f2@7 ~@7 c3@7 bb2@14 g2@29 g2@14 a2@14 bb2@14 ~ f2@7 f2@5]/4",
  W: "[~@2 eb2@14 eb2@4 g2@3 g2@7 ~ ab2@15 f3@15 f3@23 f2@31 ~@13]/4", X: "[~@6 c2@12 f2@12 d3@12 ~@11 c3@71 ~@4]/4",
})).s("gm_acoustic_bass").gain(0.4)

// bass · acoustic bass · "Double Bass" · soft notes
const bass_soft = note("<~@41 A@5 ~@46 B@6 C@6 D@3 E ~ F@5 G@2 ~@3>".pickRestart({
  A: "[~@19 g2@35 d3@35 c3@24 bb2@6 a2@6 g2@35]/5", B: "[~@27 c2@24 g2@24 c2@24 g2@24 a1@24 e2@23 a1@22]/6",
  C: "[~@2 e2@24 g2@48 g2@47 c2@24 g2@24 c2@23]/6", D: "[~ g2@23 a1@24 e2@24 a1@24]/3", E: "e2@3 ~",
  F: "[~@7 f2@48 c2@12 b2@12 f2@12 e2@12 c2@11 b2@12 f2@12 e2@12 c2@10]/5", G: "[~ b2@6 f2@6 e2@6 ~@13]/2",
})).s("gm_acoustic_bass").gain(0.2)

stack(piccolo, piccolo_soft, flute, flute_soft, clarinet, clarinet_soft, bass, bass_soft)