Strudelify

Final Fantasy V - Main Theme

Nobuo Uematsuarr. notfge

KeyF majorTempo140 bpm
0:00/0:00
// Final Fantasy V - Main Theme — Nobuo Uematsuarr. notfge
// 140 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5987597; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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 · trumpet
const trumpet = note("<~ A B@2 C ~@80>".pickRestart({
  A: "~@14 c4 f4", B: "[g4@28 ~@2 f4 bb4]/2", C: "c5",
})).s("gm_trumpet").gain(0.3)

// other · oboe
const oboe = note(`<
  ~@5 A B C D E F G H A B C D I F J@2 K L M@2 N@2 O@2 K L M@2 P Q R@2 S T U@2 V@4 A B C D E F G H A B C D I F J@2 K L
  M@2 N@2 O@2 K L M@2 P Q R@2 S T U@2 V@4
>`.pickRestart({
  A: "g4@2 b3 c4", B: "d4@3 a4", C: "g4", D: "eb4@2 eb4 f4", E: "g4 c5", F: "a4@3 f4", G: "g4 d5", H: "a4", I: "g4 bb4",
  J: "[g4@7 ~]/2", K: "d5 g4", L: "f5@2 eb5 d5", M: "[c5 d5 a4@6]/2", N: "[c5 d5 a4@3 g4 a4 c5]/2",
  O: "[bb4@2 g4@3 g4 a4 bb4]/2", P: "c5 f4", Q: "g5 f5 eb5 f5", R: "[d5@3 ~]/2", S: "d5@3 c5", T: "bb4 g4",
  U: "[gb4 d5 c5@4 bb4 gb4]/2", V: "bb4/4",
})).s("gm_oboe").gain(0.3)

// other · orchestral harp · "Harp"
const orchestral_harp = note(`<
  A B A B C ~@16 D@2 E@2 F@2 G@2 D@2 E@2 H I J@2 ~@24 D@2 E@2 F@2 G@2 D@2 E@2 H I J@2 ~@8
>`.pickRestart({
  A: "~@15 [e3,g3]", B: "c4@3 [f4,g4] c5@3 [g5,c6] e6@4 ~@4",
  C: "c3 [e3,g3] c4 [e4,g4] g3 [c4,e4] g4 [c5,e5] c4 [e4,g4] c5 [e5,g5] g4 [c5,e5] g5 [c6,e6]", // Em C Em C
  D: "eb3 g3 bb3 eb4 g4 bb4 eb5 g5 bb5 g5 eb5 bb4 g4 eb4 bb3 g3", E: "eb3 a3 c4 f4 a4 c5 f5 a5 c6 a5 f5 c5 a4 f4 c4 a3",
  F: "d3 a3 c4 f4 a4 c5 f5 a5 c6 a5 f5 c5 a4 f4 c4 a3", G: "d3 g3 bb3 d4 g4 bb4 d5 g5 bb5 g5 d5 bb4 g4 d4 bb3 g3",
  H: "d3 f3 a3 c4 f4 a4 c5 f5 a5 f5 d5 a4 f4 c4 a3 f3", I: "d3 f3 a3 c4 f4 a4 c5 f5 a5 f5 c5 a4 f4 c4 a3 f3",
  J: "d3 g3 b3 d4 g4 b4 d5 g5 b5 g5 d5 b4 g4 d4 b3 g3",
})).s("gm_orchestral_harp").gain(0.3).pan(0.1)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A@5 B C@2 D C D C A B C@2 ~@2 E F G@2 H@2 I@2 J@2 G@2 H@2 K@2 G@2 L@2 M@2 N O N O A B C@2 D C D C A B C@2 ~@2 E F
  G@2 H@2 I@2 J@2 G@2 H@2 K@2 G@2 L@2 M@2 N O N O
>`.pickRestart({
  A: "[c4,e4] ~ [c4,e4] ~ [c4,f4] ~ [c4,f4] ~ [c4,e4] ~ [c4,e4] ~ [c4,d4] ~ [c4,d4] ~", // C F5 C Csus2
  B: "[d4,gb4] ~ [d4,gb4] ~ [d4,g4] ~ [d4,g4] ~ [d4,gb4] ~ [d4,gb4] ~ [d4,e4] ~ [d4,e4] ~", // D G5 D Dsus2
  C: "[c4,eb4] ~ [c4,eb4] ~ [c4,f4] ~ [c4,f4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,d4] ~ [c4,d4] ~", // Cm F5 Cm Csus2
  D: "[bb3,eb4] ~ [bb3,eb4] ~ [bb3,f4] ~ [bb3,f4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,d4] ~ [bb3,d4] ~", E: "c5", F: "b4",
  G: "g3/2", H: "[a3@6 bb3 c4]/2", I: "[d4@3 c4]/2", J: "[bb3 g3@3]/2", K: "d4/2", L: "[g3@5 d4 c4 bb3]/2", M: "bb3/2",
  N: "bb3", O: "ab3",
})).s("gm_string_ensemble_1").gain(0.25).pan(0.8)

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  ~@5 A B A B C D C D A B A B E F G@2 C H I H J K L M C H I H J K L M N O N P Q R S T A B A B C D C D A B A B E F G@2 C
  H I H J K L M C H I H J K L M N O N P Q R S T
>`.pickRestart({
  A: "c2@2 c2 ~@9 c3@2 g2@2", B: "c2@2 c2 ~@13", C: "eb2@2 eb2 ~@9 eb3@2 bb2@2", D: "f2@2 f2 ~@13", E: "eb3 d3 c3 bb2",
  F: "a2 g2 f2 c3", G: "g2 ~ g2 ~@3 d2@2 g2 ~ g2 ~@3 d2@2", H: "eb2@2 eb2 ~@13", I: "eb2@2 eb2 ~@9 f3@2 c3@2",
  J: "d2@2 d2 ~@9 d3@2 a2@2", K: "d2@2 d2 ~@13", L: "g2@2 g2 ~@9 g3@2 d3@2", M: "g2@2 g2 ~@5 f2@2 f2 ~@5",
  N: "c2@2 c2 ~@3 c3@2 c2@2 c2 ~@3 c3@2", O: "c2@2 c2 ~@3 g2 ~@3 c2 ~@3 g2@2", P: "c2@2 c2 ~@3 gb2 ~@3 c2 ~@3 c2@2",
  Q: "bb2@2 bb2 ~@3 f2@2 bb2@2 bb2 ~@5", R: "ab2@2 ab2 ~@3 f2@2 ab2@2 ab2 ~@5",
  S: "gb2 ~ db2@2 gb2 ~ db2@2 gb2 ~ db2@2 gb2 ~ db2@2", T: "f2@2 f2 ~@5 f2@2 f2 ~@5",
})).s("gm_electric_bass_pick").gain(0.38)

// drums · kick
const kick = s("bd").struct("<~@5 A@12 B@2 C D A@36 B@2 C D A@24>".pickRestart({
  A: "x!2 ~@6", B: "x!4", C: "x!2 ~@2 x!2 ~@2", D: "x!2 ~@2 x ~@3",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@20 [~@10 x ~ x ~ x!2] [~ x]!24 ~@15 [~@10 x ~ x ~ x!2] [~ x]!24>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~
  [x!4]!19
  [x!3 ~]
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!24
  [x!4]!15
  [x!3 ~]
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!24
>`).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@17
  [~ x ~ x ~ x ~ x]!3
  [~ x ~ x ~@4]
  [~ x ~ x]!24
  ~@12
  [~ x ~ x ~ x ~ x]!3
  [~ x ~ x ~@4]
  [~ x ~ x]!24
>`).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@5 x ~@39 x ~@39>").gain(0.3)

stack(trumpet, oboe, orchestral_harp, string_ensemble_1, bass, kick, snare, hihat, open_hat, crash)

More by Nobuo Uematsuarr. notfge