Strudelify

avatar the last airbender main theme

The Track Team

KeyD majorTempo70 bpm
0:00/0:00
// avatar the last airbender main theme — The Track Team
// 70 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 3, 3/4 at bar 4, 4/4 at bar 6, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/2274706; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 33 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/4)

// 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.

// other · timpani · "Kalimba"
const timpani = note("<~@12 A B C D E@2 F G E@2 H@2 ~ I@3 J K@4>".pickRestart({
  A: "d4 f#4@2 [a4,c#5]@5", B: "e4 g4@2 [b4,d5]@5", C: "f#4 a4@2 [d5,f#5]@5", D: "g4 b4@2 [e5,g5]@2 f#5 ~@2",
  E: "d5 c#5 a4 f#4 d5 c#5 a4 f#4", F: "g4@2 f#4@2 g4@2 d4@2 g4@2 f#4@2 c#4 d4 b3@2",
  G: "g4@2 f#4@2 g4@2 d4@2 g4@2 f#4@2 g4 f#4 d4 b3",
  H: "[g4@6 f#4@6 g4@6 a4@6 b4@7 a4@7 b4@7 c#5@7 d5@8 c#5@8 ~ d5@12 e5@12 ~@3]/2",
  I: "[~@15 b2@4 ~@4 f#2@4 ~@4 b2@4 ~@4 f#2@4 ~@5]/3", J: "~@33 f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~",
  K: "[f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2!3 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2 ~ f#2!2 f#2@7 ~@39 d2 d2@6 ~@41 d2@6 ~@12 d2@6 ~@12 d2@6 ~@9]/4",
})).s("gm_timpani").gain(0.25)

// other · acoustic guitar nylon · "Mandolin"
const acoustic_guitar_nylon = note("<~@23 A@3 ~@7>".pickRestart({
  A: "[~@15 [d5,f#5]@6 e5@2 f#5@4 a5@2 a5@2 a5@4 e5@2 f#5@2 c#5@4 ~@5]/3", // D
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// chords · violin
const violin = note("<A@5 B@4 C@3 D E F G H I J@2 H K L@8 ~ M@2>".pickRestart({
  A: "[~@11 [f#5,d6]@12 [d5,a5]@12 [a4,f#5]@7 [d4,f#4]@9 [f#4,a4]@9]/5", // D D5 D F#m
  B: "[[d4,c#5]@3 [c#4,a4]@4 [d4,f#4]@3 [f#4,a4]@3 [d4,f#4,e5]@3]/4", C: "[[f#4,a4]@11 ~ [a5,d6]@12]/3", D: "[a5,d6]",
  E: "[g5,e6]", F: "[f#5,d6]", G: "[e5,g5,e6]@7 ~", H: "f#4@3 a4", I: "c#5 a4", J: "[[g4,b4]@3 [a4,c#5]]/2",
  K: "f#5 c#5",
  L: "[~@63 b4@6 [c#5,c#6]@2 [d5,d6]@4 [e5,e6]@4 [f#5,f#6]@8 [c#5,a5,c#6]@8 [g5,d6]@16 [a5,e6]@16 ~, d5@31 ~@97, b4@23 ~@105, ~@52 b5@155 ~@177]/8", // C# D E F# F#m G5 A5
  M: "[~@3 [d4,d6,f#6]@24 ~@5]/2", // D
})).s("gm_violin").gain(0.2)

// chords · viola
const viola = note("<~@3 A@2 B@4 C@2 ~ D E D F G H I J K L M@2 ~ N@5 ~ O@2>".pickRestart({
  A: "[~@2 a3@3 f#3@3]/2", B: "[a3@3 f#3@4 a3@3 ~@3 a3@3, ~@5 f#3@3]/4", C: "[[d3,f#3]@3 ~]/2", D: "[f#4,a4]",
  E: "[e4,g4]", F: "g4@7 ~", G: "[f#3,a3]@3 a3, d4", H: "c#4 a3, [f#4,a4]", I: "d4@3 c#4, b3", J: "~ c#4, b3",
  K: "f#3@3 e3, d4", L: "[b3,d4]", M: "[b3@13 ~@11, g3@19 ~@29]/2",
  N: "[~@15 g3@8 f#3@8 [f#3,a3]@8 f#3@8 [g3,b3]@16 [a3,c#4]@16 ~, ~@15 e3@16 d3@16 ~@33]/5", // F#m G A
  O: "[~@15 [f#3,a3]@12 ~@5]/2", // F#m
})).s("gm_viola").gain(0.15)

// chords · cello · "Violoncello"
const cello = note("<~@3 A@2 B@4 C@2 ~@5 D E F G H I J ~@2 K@5 ~ L@2>".pickRestart({
  A: "[~@2 [d2,a3]@3 [f#2,f#3]@3]/2", B: "[[d2,a3]@3 [d2,f#3]@4 [d2,a3]@3 [f#2,f#3]@3 [d2,f#3,a3]@3]/4",
  C: "[[d2,d3,f#3]@3 ~]/2", D: "a2", E: "f#3", F: "d3@3 c#3", G: "[b2,d3]", H: "f#3@3 e3, [a2,d3]", I: "[d3,f#3,d4]",
  J: "[d3,g3] ~, b3@19 ~@5", K: "[~@15 [g2,b2]@8 f#2@8 [a2,a3]@8 [f#2,f#3]@8 [g2,b2]@16 c#3@16 ~]/5",
  L: "[~@21 a2@6 ~@5, ~@15 f#2@12 ~@5]/2",
})).s("gm_cello").gain(0.2)

// other · trumpet
const trumpet = note("<~@29 A@4>".pickRestart({
  A: "[~@7 f#4@8 f#4@8 b4@4 a4@4 f#4@28 ~@5]/4",
})).s("gm_trumpet").gain(0.4)

// other · epiano1 · "Electric Piano"
const epiano1 = note("<~@28 A@2 ~@3>".pickRestart({
  A: "[~@3 b3@4 c#4@4 d4@4 e4@4 f#4@12 ~]/2",
})).s("gm_epiano1").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@29 [~@15 x] ~@3>").gain(0.3)

// drums · china
const china = s("cr").struct("<~@25 [~@42 x!6] ~@7>").gain(0.25)

stack(timpani, acoustic_guitar_nylon, violin, viola, cello, trumpet, epiano1, kick, china)