Strudelify

Tifa's Theme

Nobuo Uematsu

KeyF majorTempo110 bpm
0:00/0:00
// Tifa's Theme — Nobuo Uematsu
// 110 bpm, 12/8, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (12/8 at bar 1, 6/8 at bar 43) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6111483; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 47 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/6)

// 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 · epiano1 · "Piano"
const epiano1 = note(`<
  A B C D E F@2 G H I J G K L M N O P@2 Q R S T@2 U V I W X Y Z AA AB AC AD@2 AE AF S AG@4 AH@4
>`.pickRestart({
  A: "~ a5@11 g5@11 ~, [bb3,d4,bb4,d5], ~ g4@23", B: "~ g5@2 a4@3 [c5,f5]@13 ~ a4@4, [a3,c4], [g4,c5] ~@7, ~ f4@23",
  C: "~ g4 g4@2 a4@2 ~@3 a4@2 g4, [eb3,bb3] [eb3,g3], a4 ~@5 bb4@3 ~@3, ~ db4@11 ~ [bb3,db4]@11", // Eb5 Eb Bbm
  D: "~@2 f4@15 ~ d4@4 f4@2, [d3,f3], d4@17 ~@7, g4 ~@11, ~ [a3,c4]@23", // Dm Am
  E: "~@5 d4@3 f4 a4 f4@2, [g2,d3], [bb3,g4]@5 ~@3, d4@5 ~@7, ~ f3@23", // G5 Eb
  F: "[~ a4@11 [e4,g4]@11 ~ [d4,f4]@11 ~ [c4,e4]@6 c5@2 a5@2 g5@2, [c3,bb3]@47 ~, [c4,f4] ~@3]/2", // Em Dm C C7 F5
  G: "a5@4 c5@13 ~ c5@2 a5@2 g5@2, [g3,a3,c4]@23 ~", H: "a5@4 db5@13 ~ db5@2 eb5@2 db5@2, [f3,bb3,db4]@23 ~",
  I: "[g3,a3,c4,c5]@23 ~", J: "[f3,bb3,db4]@9 ~@9 c5@2 a5@2 g5@2, ~@10 [e3,g3,c4]@13 ~",
  K: "a5@4 c6@13 ~ a5@2 f5@2 e5@2, [g3,a3,c4]@23 ~", L: "[f3,bb3,d4]@11 ~ d4@6 c4@6, d5@23 ~, ~@12 [gb3,a3]@11 ~",
  M: "[g3,bb3,d4]@17 ~ d5@2 bb5@2 a5@2, ~@3 [gb3,a3,c4]", N: "bb5@4 d5@13 ~ d5@2 bb5@2 a5@2, [f3,bb3,d4]@23 ~",
  O: "bb5@4 g5@13 ~ g5@2 f5@2 g5@2, [g3,bb3,e4]@23 ~", P: "[[a3,c4,e4]@23 ~ [a3,c4,eb4]@22 a5@2, a5@11 ~]/2",
  Q: "a5 g5@2 g5@2 a5 bb5@3 a5@2 g5, [eb3,bb3,db4]@23 ~, ~@12 g3@11 ~", // Eb7
  R: "~@2 f5@15 ~ d5@4 f5@2, [d3,f3], g5 ~@11, ~ [a3,c4]@23", S: "g5@17 ~ d5@2 a5@2 f5@2, [d3,f3,g3,b3]@23 ~",
  T: "[[f3,a5]@11 ~ [d3,g3,g5]@11 ~ [c3,f3,f5]@11 ~ e5@6 c5@2 a5@2 g5@2, bb3@23 ~, ~@36 [c3,e3]@11 ~]/2", // F G5 F5 C
  U: "a5@2 c5@15 ~ c5@2 a5@2 g5@2, [g3,a3,c4]@23 ~", V: "a5@2 db5@15 ~ db5@2 eb5@2 db5@2, [f3,bb3,db4]@23 ~",
  W: "[f3,bb3,db4]@9 ~ [e3,ab3,c4]@2 ~@6 c5@2 a5@2 ab5@2", X: "a5@2 c5@15 ~ c5@2 a5@2 ab5@2, [g3,a3,c4]@23 ~",
  Y: "a5 c6@4 db6@4 a5 f5 e5, [g3,a3,c4]@9 ~ [g3,a3,db4]@13 ~", // Am7 A7
  Z: "[f3,a3,c4]@11 ~ db4@6 c4@6, d5@23 ~, ~@12 [e3,a3]@11 ~", // F A5
  AA: "[ab3,b3]@9 ~ [f3,bb3]@2 ~@6 d5@2 bb5@2 a5@2, d3@5 ~@4 [gb3,a3,c4]@3", // Abm Bb5 Gbdim
  AB: "bb5@2 d5@15 ~ d5@2 bb5@2 a5@2, [f3,bb3,d4]@23 ~", AC: "bb5@2 g5@15 ~ g5@2 f5@2 g5@2, [g3,bb3,e4]@23 ~",
  AD: "[[a3,c4,e4]@23 ~@21 a5@4, a5@7 ~, ~@24 [a3,c4,eb4]@23 ~]/2", // Am Adim
  AE: "a5 g5@3 a5@2 bb5@4 a5 g5, [eb3,bb3,db4]@23 ~, ~@12 g3@11 ~", // Eb7
  AF: "~@2 f5@17 ~ d5@2 f5@2, [d3,f3], g5 ~@11, ~ [a3,c4]@23", // Dm Am
  AG: "[[f3,a5]@11 ~ [d3,g3,g5]@11 ~ [d3,f3,f5]@11 ~ [c3,e3,e5]@11 ~ [bb2,d3,d5]@9 ~@21 f4@6 g4@6 c4@6, bb3@55 ~@3 [f2,c3]@25 ~@13, ~@58 c5@15 [g3,a3]@23, ~@72 f3@23 ~, ~@12 c4 ~@3]/4", // F G5 Dm C Bb F5 Gsus2
  AH: "[~ bb4@11 ~@18 e3@6 ~@12 f2@11 ~ [f3,g3,a3,c4,f4]@23 ~@13, f4@17 ~@31, f3@29 ~@7 [f3,bb3,d4,f4]@23 ~@37, [bb3,d4]@12 [a3,c4,a4]@23 ~@61, ~@24 c2@11 ~@61]/4", // F Bb Am
})).s("gm_epiano1").gain(0.3)

// bass · electric bass pick · "Contrabaixo"
const bass = note("<~@7 A B A C A D E F B G H I J K L M N A O A P A D Q R B G S T J K L M N U@2 ~@4>".pickRestart({
  A: "a1@5 f1@6 a1", B: "bb1@5 g1@6 bb1", C: "bb1@5 c2@4 g1@3", D: "c2@5 a1@6 c2", E: "bb1@2 d2 c2",
  F: "bb1@5 g1@4 a1@3", G: "c2@5 e2@4 g2@3", H: "f2@5 f1@6 f1", I: "f2 eb2 d2 f2", J: "eb2@5 g1@6 eb2",
  K: "d2@5 f1@6 c2", L: "d2@5 g1@6 d2", M: "c2 bb1", N: "a1 g1", O: "bb1@5 g1@6 ab1", P: "bb1@3 bb1@2 c2 ~@6",
  Q: "d2@2 db2 c2", R: "b1@5 bb1 ~@3 a1@3", S: "f2@5 f1@7", T: "f2 eb2 d2 c2", U: "[f1@5 c2@13 ~@6]/2",
})).s("gm_electric_bass_pick").gain(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@7 A@16 B A@3 ~ A@3 ~ A@9 B ~@5>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.3)

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

// drums · low tom
const low_tom = s("lt").struct("<~@23 [~@3 x] ~@3 [~@3 x] ~@3 [~@3 x] ~@15>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@7 A B@15 C A B@2 D B@3 D B@7 E F G ~@5>".pickRestart({
  A: "~@2 x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x", C: "x ~ x!2 ~ x!2 ~@5", D: "x ~@4 x ~@6",
  E: "x ~ x!2 ~@2 x ~ x!2 ~@2", F: "x ~ x!2 ~@2 x ~@2 x ~@2", G: "x ~ x!2 ~@8",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 [~@3 x] ~@40>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A ~@16 A ~@2 B ~@3 B ~@15>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.3)

// drums · splash
const splash = s("cr").struct("<~@41 [~@5 x ~@6] ~@5>").gain(0.3)

stack(epiano1, bass, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, splash)

More by Nobuo Uematsu