Strudelify
KeyF majorTempo80 bpm
0:00/0:00
// Welcome Horizons (New Horizons Main Theme) — Yasuaki Iwata Yumi TakahashiShinobu Nagata Sayako DoiMasato OhashiAnrrenged by Arthen
// 80 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 16, 4/4 at bar 16) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6078053; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 38 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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.

// chords · epiano1 · "Piano"
const epiano1 = note("<A@2 B@2 C@2 D@2 E@2 F G H I J K@6 L M@2 N@2 O@4 P@8>".pickRestart({
  A: "[~@4 a4@4 f4@4 d5@4 c5@8 a4@4 f4@8 db5@4 ~ [e3,ab3]@23, [c3,g3,a3]@15 ~ [bb2,f3,a3]@11 ~ [bb2,f3,a3]@11 ~ [bb2,c5]@24]/2", // E Am7 Bbmaj7 Bbsus2
  B: "[~@4 a4@4 f4@4 d5@4 c5@8 a4@4 ~@8 d4@4 ~@8 [f3,a3,db4]@15 ~, [c3,g3,a3]@15 ~ [c3,f3,a3]@15 ~ [d3,f3,a3]@15 ~@17, ~@28 f4@8 ~@4 g4@23 ~]/2", // Faug Am7 F Dm
  C: "[f4@4 g4@4 a4@4 ~@8 e5@4 f5@4 ~@4 [g3,c4,e4]@15 ~ [bb3,c4,ab4]@15 ~, [f3,a3,c4]@15 ~ [f3,bb3,d4]@15 ~@33, ~@6 d5@4 ~@4 c5@17 ~]/2", // C Fm F Bb
  D: "[~@4 a4@4 f4@4 d5@4 c5@8 a4@4 ~@8 d4@4 ~@8 [bb2,db3,a3]@15 ~, [c3,g3,a3]@15 ~ [c3,eb3,a3]@15 ~ [bb2,d3,a3]@15 ~@17, ~@28 f4@8 ~@4 g4@23 ~]/2", // Bbm Am7 Adim Bbmaj7
  E: "[f4@4 g4@4 a4@4 [bb2,f3,bb3,d5]@4 ~@4 e5@4 f5@4 ~@16 [eb4,f4]@19 ~, [c3,f3,a3]@11 ~@17 c5@34 ~@2, ~@16 [c3,f3,ab3]@15 ~]/2", // Bb Ebsus2 F Fm
  F: "~@12 [c4,eb4]@19 ~, [c3,eb3,g3]@15 ~", G: "~@12 [eb4,f4]@15 ~ [f3,ab3,db4]@4, [c3,f3,ab3]@27 ~@5",
  H: "~@12 [eb3,g3,c4]@19 ~", I: "~ a4 f4 d5 c5 a4 f4 d4, [d3,g3,bb3]@15 ~", J: "~@8 gb4 g4@22 ~",
  K: "[a4@8 f4@8 [f3,g3,d4,d5]@8 c5@11 ~@13 d5@4 [f3,g3,c4]@15 ~@9 f5@4 e5@4 d5@4 c5@11 ~ f4@4 f4@8 d5@4 [f3,g3,c4]@15 ~@9 f5@4 e5@4 d5@4 e5@11 ~ a4@4 a4@8 db5@4 [gb3,a3,d4,b4]@11 ~, ~@24 [f3,a3,c4]@15 ~ [f3,bb3,d4]@11 ~@17 [f3,bb3,c4]@19 ~ [f3,a3,c4]@15 ~ [f3,bb3,d4]@11 ~@17 [f3,bb3,c4]@19 ~ [ab3,a3,db4]@15 ~ [gb3,a3,d4]@11 ~@13, ~@36 f4@11 ~@5 c5@19 ~@45 c5@19 ~@57]/6", // G7 Fsus2 Bm7 F Bb Fsus4 F Bb …
  L: "[e3,a3,d4,a4]@2 ab4 a4 b4 db5@2 e5, ~@8 [d3,f3,b3]@11 ~ [d3,gb3,a3]@11 ~", // Dsus2 Bdim D
  M: "[[d3,g3,a3,a5]@23 ~ a5@8 g5@4 a5@8 a5@4 f5@4 d6@4 c6@4 a5@4, ~@24 [e3,a3,db4]@11 ~ [f3,a3,c4]@28]/2", // Dsus4 A F
  N: "[f5@4 d5@16 ~ f5 ~ gb5 g5@27 ~@5 a4@3 ~ f4@3 d5, ~@2 [f3,g3,bb3]@23 ~ [c3,g3,a3]@6]/2", // Gm7 Am7
  O: "[~@3 c5@7 a4@3 ~@7 d4@3 ~@8 [f3,a3,db4]@13 ~ f4@3 ~ g4@3 a4@3 ~@8 e5@3 ~ f5@3 ~@4 [g3,c4,e4]@13 ~ [g3,bb3,c4,e4]@13 ~@5 a4@3 f4@3 ~ d5@3 c5@7 ~ a4@3 f4, ~@3 [c3,f3,a3]@13 ~ [d3,f3,a3]@13 ~@15 [f3,a3,c4]@13 ~@2 [f3,bb3,d4]@13 ~@29 [c3,g3,a3]@13 ~ [c3,eb3,a3]@12, ~@13 f4@7 ~@4 g4@20 ~@12 d5@7 ~@7 c5@30 ~@28]/4", // Faug C C7 F Dm F Bb Am7 …
  P: "[~@6 d4@3 ~@8 [bb2,db3,a3]@13 ~ f4@3 ~ g4@3 a4@3 ~ [bb2,f3,bb3]@3 ~@4 e5@3 f5@3 ~@15 [eb4,f4]@17 ~@12 [c4,eb4]@17 ~@11 [eb4,f4]@13 ~ [f3,ab3,db4]@3 ~@4 a4@3 ~ f4@3 ~ d5@3 c5@3 ~ a4@3 f4@3 ~ d4@3 ~@7 gb4 g4@47 ~@28, ~@3 [bb2,d3,a3]@13 ~@15 [c3,f3,a3]@10 ~@19 [c3,f3,ab3]@27 ~ [c3,eb3,g3]@27 ~ [c3,f3,ab3]@24 ~@40 [d3,f3,g3,bb3]@47 ~@29, ~@10 g4@20 ~@12 d5@7 ~@7 c5@30 ~@170]/8", // Bbm Bb5 Ebsus2 Cm Ebsus2 Db Bbmaj7 F …
})).s("gm_epiano1").gain(0.3)

// bass · electric bass pick · "Contrabaixo"
const bass = note("<A@2 B C D E F G H I J K L M ~ N O P O Q@2 R S@4 T@8 U V@3>".pickRestart({
  A: "[f2@4 d2@3 db2@3 c2@6]/2", B: "f2 eb2", C: "d2 db2", D: "c2 d2", E: "c2@2 c3 e2", F: "f2@3 c2 a1@3 e2",
  G: "bb1@3 f2 db2@2 eb2 db2", H: "c2@2 f2 g2 ~@4", I: "db3@3 db2@5", J: "eb3@3 eb2@5", K: "db3@3 db2@4 eb2",
  L: "~@3 ab2@5", M: "c2", N: "~@2 c2 a1", O: "f2 c2 bb1@2 d2 c2@3", P: "e2 d2@3 c2 bb1 a1@2",
  Q: "[e2 d2@3 f2 d2 db2@3 e2 d2@2 gb2 e2@3]/2", R: "a2@2 f2@2 b2 gb2@2 a2", S: "[g2@6 a1@3 bb1@8 c2@12 f2@3]/4",
  T: "[~@3 eb2@14 d2@14 db2@14 c2@14 ~ d2@14 c2@14 c3@4 bb2@3 a2@4 g2@3 f2@4 f2@3 f2@4 c2@3 a1@4 a1@4 a1@3 e2@4 bb1@3 bb1@4 bb1@3 f2@4 db2@3 db2@4 eb2@4 db2@3 c2@4 c2@3 f2@4 g2@4 ~@14 db2@3 db2@4 db2@3 db2@4 db2@3 db2@4 db2@3 db2@4 eb2@4 eb2@3 eb2@4 eb2@3 eb2@4 eb2@3 eb2@4 eb2@3 db2@4 db2@4 db2@3 db2]/8",
  U: "~@3 db3@3 db3@4 db3@3 eb2@4 ~@15", V: "[~@13 c2@57 ~@26]/3",
})).s("gm_electric_bass_pick").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 A@3 B C D E@3 F G ~@2 H I J I J I K ~@7 L M N M L ~@4>".pickRestart({
  A: "x!2", B: "x", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~@2 x", E: "x ~@2 x ~@4", F: "x ~@2 x ~@3 x", G: "~@3 x ~@4",
  H: "~@3 x", I: "~ x!2 ~@2 x ~@2", J: "~ x ~@3 x!2 ~", K: "~@2 x ~@2 x ~@2", L: "~@6 x ~@6 x ~@6 x ~@7 x ~@3",
  M: "~@3 x ~@6 x ~@6 x ~@6 x ~@6 x", N: "~@3 x ~ x ~@8 x ~",
})).gain(0.3)

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

// drums · snare
const snare = s("sd").struct("<~@5 A ~@19 B ~@2 C D E F G H I ~@3>".pickRestart({
  A: "~@15 x!2 ~@15", B: "~@12 x!2 ~@18", C: "~@3 x", D: "~@10 x ~@6 x ~@6 x ~@5 x ~",
  E: "~ x ~@4 x ~@6 x ~@6 x ~@5 x ~@3 x ~", F: "~@3 x ~@27 x", G: "~@6 x ~@6 x ~@6 x ~@7 x ~@3",
  H: "~@3 x ~@6 x ~@6 x ~@6 x ~@6 x", I: "~@3 x ~ x ~@26",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@2 A B C D C A E C@2 F ~@3 G C B C@3 H ~ I ~ J K L M N O P Q R ~@4>".pickRestart({
  A: "x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", B: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@4", C: "x!8",
  D: "x ~@2 x ~@4 x ~@3 x ~@19", E: "x ~@2 x ~@4 x ~@23", F: "x!7 ~", G: "~@6 x!2", H: "x!5 ~@3", I: "x",
  J: "~@20 x ~@2 x ~@4 x ~@3", K: "~@3 x ~@6 x ~@6 x ~@6 x ~@6 x", L: "~@6 x ~@2 x ~@3 x ~@2 x ~@3 x ~@2 x ~@4 x ~@3",
  M: "~@3 x ~@6 x ~ x ~@4 x ~ x ~@12", N: "~@6 x ~@2 x!2 ~@2 x ~@3 x ~@2 x ~@2 x!2 ~@3 x ~@2 x",
  O: "~@3 x ~ x!2 ~@3 x ~@2 x ~@3 x ~ x!2 ~@3 x ~@3 x ~@2 x", P: "~ x ~ x ~@2 x ~@21 x ~ x!2",
  Q: "~@3 x ~@2 x ~@3 x ~@2 x ~@3 x ~@2 x ~@3 x ~ x ~ x ~@2 x",
  R: "~@3 x ~@2 x ~@3 x ~@2 x ~@3 x ~@2 x ~@2 x!2 ~@3 x ~@2 x",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@14 x [~ x!2 ~] ~@13 [~@3 x ~@28] ~@4 [~@13 x ~@18] ~@3>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@3 B ~@7 C D E ~@5 D ~@3 F ~@2 G ~@5 H ~@3>".pickRestart({
  A: "~@3 x", B: "~@5 x!2 ~", C: "x ~@28 x ~ x", D: "~@31 x", E: "x ~@14 x ~@16", F: "~@17 x ~@14", G: "~@28 x ~@2 x",
  H: "~@5 x!2 ~@9",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A B ~ C ~ A D ~@2 B ~ E ~ F ~ B ~@3 F G ~@2 H I J K ~@9>".pickRestart({
  A: "~ x ~@6", B: "~@7 x", C: "~ x ~@5 x", D: "~ x ~ x ~@4", E: "~@3 x ~@4", F: "~@5 x ~@2", G: "~@3 x",
  H: "~@24 x ~@6 x", I: "~@6 x ~@6 x ~@6 x ~@7 x ~@3", J: "~@3 x ~@6 x ~@6 x ~@6 x ~@6 x", K: "~@6 x ~@6 x ~@6 x ~@11",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~ A ~@10 B ~ C D ~@5 C ~@3 E ~@2 A ~@5 F ~@3>".pickRestart({
  A: "~@23 x ~@8", B: "~@3 x", C: "~@29 x ~@2", D: "~@13 x ~@18", E: "~ x", F: "~@6 x ~@2 x ~@22",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@12 A B C ~@7 D E ~@7 F ~@2 G ~@3>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x", C: "~ x ~@2", D: "x", E: "~ x ~@6", F: "~@5 x ~@10", G: "~@13 x ~@18",
})).gain(0.3)

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