Strudelify

Telstar

Tornados

KeyA majorTempo142 bpm
0:00/0:00
// Telstar — Tornados
// 142 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A@3 B C D E F G H E F G I J K L M E L N I E F G H E F G I J K L M E L N O E L P@2 E L P@2 E L P@2 E L P@2 E F G H E F
  G I J K L M E L N O E L P@2 E L P@2 Q R S T U V S T U E W X Y Z S T U V AA@9 AB
>`.pickRestart({
  A: "f#2 c#2 f#2 c#2", B: "g2 d2 g2 d2", C: "g#2 d#2 g#2 d#2", D: "a2@4 e2@4 e2@3 ~ e2@4", E: "a2@2 e2 f#2 a2@2 e2 a2",
  F: "f#2@4 c#2@2 e2 ~ f#2@4 c#2@2 f#2@2", G: "d2@2 a1 b1 d2@2 a1 d2", H: "e2@2 b1 c#2 e2@2 f#2 e2",
  I: "e2@2 b1 c#2 e2@2 b1 e2", J: "c#2@2 g#1 b1 c#2@2 g#1 b1", K: "c#2@2 g#1 b1 c#2@2 e2 f2",
  L: "f#2@2 c#2 e2 f#2@2 c#2 f#2", M: "d2@2 a1 b1 e2@2 b1 e2", N: "b1@2 f#1 a1 b1@2 f#1 b1",
  O: "e2@4 d2@4 c#2@4 b1@3 ~", P: "d2@2 a1 d2 e2@2 b1 e2", Q: "a2@3 ~ e2@2 f#2@2 a2@4 e2@2 f#2@2",
  R: "a2@2 ~ a1@2 a#1@2 ~ b1@2 ~ c2@2 c#2@3", S: "d3@2 a2 b2 d3@2 a2 d3", T: "b2@4 f#2@2 a2 ~ b2@4 f#2@2 b2@2",
  U: "g2@2 d2 e2 g2@2 d2 g2", V: "a2@2 e2 f#2 a2@2 b2 a2", W: "f#2@2 c#2 e2 f#2@2 c#2 e2",
  X: "f#2@2 c#2 e2 f#2@2 a2 a#2", Y: "b2@2 f#2 a2 b2@2 f#2 b2", Z: "g2@2 d2 e2 a2@2 e2 a2", AA: "d2@2 a1 b1 d2@2 a1 b1",
  AB: "d2@2 a1 b1 d2@2 a1 ~",
})).s("gm_fretless_bass").gain(0.29)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@38 A B C@2 D E F@2 A B C@2 D E G H ~@16 A B C@2 D E G H ~@28>".pickRestart({
  A: "e5 e5@2 e5!3 f#5@2", B: "e5@2 a4 b4", C: "[c#5@3 b4@3 c#5@2 e4@15 ~ a4@4 b4@4]/2",
  D: "c#5@2 ~ c#5@3 b4@2 c#5@5 d5@3", E: "c#5@7 ~ c#5@4 b4@4", F: "[a4@3 b4@3 c#5@2 ~ b4@15 c#5@4 d5@4]/2",
  G: "a4@3 b4@3 c#5@2 ~ b4@7", H: "e4@3 g#4@2 e4@3 d5@8",
})).s("gm_electric_guitar_jazz").gain(0.61).pan(0.3)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@6 A@3 B A@3 B C@4 D@4 A@3 B A@3 B C@4 D@4 E@3 F@4 G E@3 F@4 G A@3 B A@3 B C@4 D@4 E@3 F@4 G H I J@3 K J@3 K L@4 M@3
  K N@4 O@6
>`.pickRestart({
  A: "[e4 ~ d4, a4, c#4@2 ~, ~ f#4@2]/3", B: "[e4,g#4,b4]",
  C: "[[e4,g#4]@32 ~@15 d4@8 ~ [e4,g#4,b4]@8, c#4@3 ~, ~@4 [f#4,a4]@3 ~]/4", // E F#m
  D: "[e4 ~ d4 [e4,g#4], [c#4,a4]@31 b4@32 ~, ~ f#4@2 ~]/4", // E F#m
  E: "[e4@16 ~@15 d4@8 ~ [e4,g#4,b4]@8, a4@13 ~@3, c#4@31 ~@17, ~@16 f#4@25 ~@7]/3", // E
  F: "[[d4,f#4,a4]@8 [g#4,b4]@8 ~@32 d4@7 ~ e4@8, ~@8 e4@23 f#4@24 [g#4,b4]@9, ~@2 a4@5 ~, ~ c#4@2 ~]/4", // D G#m
  G: "[d4,f#4,a4] [e4,g#4,b4]", H: "[c#4,e4,a4]", I: "~@2 a3@3 a#3@2 b3@3 c4@3 c#4@2 ~",
  J: "[a4 ~ g4, d5, f#4@2 ~, ~ b4@2]/3", K: "[a4,c#5,e5]",
  L: "[[a4,c#5]@32 ~@15 g4@8 ~ [a4,c#5,e5]@8, f#4@3 ~, ~@4 [b4,d5]@3 ~]/4", M: "[a4 ~ g4, [f#4,d5]@2 ~, ~ b4@2]/3",
  N: "[[f#4,a4,d5] ~, d4@63 ~]/4", O: "[[d4,f#4,a4]@91 ~@5]/6",
})).s("gm_synth_strings_1").gain(0.2).pan(0.6)

// chords · vibraphone
const vibraphone = note(`<
  A@2 B C D E F G H I J K L M N O P Q F R S T J P U M J R V W O X P Y J R Z AA ~@17 P U M J R V W O X P Y J R Z AA ~@11
  AB AC AD AE AF AG AH AI G AJ AK AL AB AC AD AE ~@9
>`.pickRestart({
  A: "[f#4,c#5,f#5]@7 ~", B: "[f#4,c#5,f#5]@15 ~", C: "[g4,d5,g5]@15 ~", D: "[d#5,g#5]@3 ~, g#4@15 ~",
  E: "[a4,e5,a5]@7 ~ [e4,b4,e5]@6 ~@2", F: "[c#5,e5,a5]@7 ~", G: "[c#5,f#5,a5]@13 ~@3", H: "[a4,d5,f#5]@7 ~",
  I: "[b4,e5,g#5]@13 ~@3", J: "[c#5,e5,a5]@13 ~@3", K: "[a4,c#5]@3 ~, f#5@7 ~", L: "[f#4,a4]@15 ~, d5@7 ~@9",
  M: "[g#4,b4,e5]@3 ~", N: "[g#4,c#5,e5]@7 ~", O: "[g#4,c#5,e5]@13 ~@3", P: "[a4,c#5,f#5]@3 ~",
  Q: "[d5,f#5]@8 [b4,e5,g#5]@5 ~@3, a4@3 ~@5", R: "[a4,c#5,f#5]@13 ~@3", S: "[b4,d5,f#5]@3 ~",
  T: "[b4,g#5]@3 ~, e5@5 ~@3", U: "[f#4,a4]@13 ~@3, d5@11 ~@5", V: "[f#4,d5]@13 ~@3, a4@15 ~", W: "[g#4,b4,e5]@13 ~@3",
  X: "[g#4,c#5,e5]@3 ~", Y: "[a4,d5,f#5]@7 ~ [g#4,b4,e5]@5 ~@3", Z: "[b4,d5,f#5]@13 ~@3", AA: "[b4,e5,g#5]@3 ~",
  AB: "[f#5,b5,d6]@13 ~@3", AC: "[d5,g5,b5]@7 ~", AD: "[e5,a5,c#6]@13 ~@3", AE: "[f#5,a5,d6]@13 ~@3",
  AF: "[d5,f#5]@3 ~, b5@7 ~", AG: "[b4,d5]@15 ~, g5@7 ~@9", AH: "[c#5,e5,a5]@3 ~", AI: "[c#5,f#5,a5]@7 ~",
  AJ: "[d5,f#5,b5]@3 ~", AK: "[g5,b5]@8 [e5,a5,c#6]@5 ~@3, d5@3 ~@5", AL: "[f#5,d6]@7 ~",
})).s("gm_vibraphone").gain(0.2).pan(0.6)

// chords · orchestral harp · "HARP"
const orchestral_harp = note("<~@38 A@16 ~@16 A@8 ~@28>".pickRestart({
  A: "[~@17 a5@13 ~@3 a5@7 ~@8 e5@12 ~@5 [e5,a5]@12 ~@4 a5@10 ~@6 f#5@8 ~@7 e5@12 ~@4, ~@15 [f#4,a4]@15 ~ [d4,a4,d5]@9 ~@6 [b3,g#4]@14 ~@4 [a4,c#5]@13 ~@3 f#5@11 ~@5 [a4,d5]@8 ~@7 b4@12 ~@5, ~@16 [c#5,f#5]@14 ~@2 f#5@9 ~@6 [e4,b4]@14 ~@2 e4@13 ~@3 [f#4,a4,c#5]@12 ~@4 [d4,f#4]@9 ~@7 [b3,e4,g#4]@14 ~@3]/8", // A5 F#m D5 E A D5 F#5 E5 …
})).s("gm_orchestral_harp").gain(0.26).pan(0.4)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@6 A B C D A B C D E@2 B F A B G D A B C D A B C D E@2 B F A B G D A B F@2 A B F@2 A B F@2 A B F@2 A B C D A B C D
  E@2 B F A B G D A B F@2 A B F@2 H I J K L M J K L M N@2 K O J K L M J@9 P
>`.pickRestart({
  A: "[e3,a3,c#4,e4]@4 [a3,c#4]@2 [a3,c#4,e4]@4 [a3,c#4,e4]@2 [c#4,e4] ~ [a3,c#4,e4]@2, [e2,a2], ~ e3@2 e3, ~@4 e4 ~@7 a3@2 ~@2", // A C#m A A5
  B: "[f#3,a3,c#4,f#4]@4 [a3,c#4]@2 [a3,c#4,f#4]@4 [a3,c#4,f#4]@2 [c#4,f#4] ~ [a3,c#4,f#4]@2, [f#2,c#3], ~ f#3@2 f#3, ~@4 f#4 ~@7 a3@2 ~@2", // F#m A F#m F#5 F#m F#5
  C: "[d3,a3,d4,f#4]@4 [a3,d4]@2 [a3,d4,f#4]@4 [a3,d4,f#4]@2 [d4,f#4] ~ [a3,d4,f#4]@2, a2, ~ d3@2 d3, ~@4 f#4 ~@7 a3@2 ~@2", // D D5 D
  D: "[e3,g#3,b3,e4]@4 [g#3,b3]@2 [g#3,b3,e4]@4 [g#3,b3,e4]@2 [b3,e4] ~ [g#3,b3,e4]@2, [e2,b2], ~ e3@2 e3, ~@4 e4 ~@7 g#3@2 ~@2", // E G#m E E5 E E5
  E: "[c#3,g#3,c#4,e4]@4 [g#3,c#4]@2 [g#3,c#4,e4]@4 [g#3,c#4,e4]@2 [c#4,e4] ~ [g#3,c#4,e4]@2, g#2, ~ c#3@2 c#3, ~@4 e4 ~@7 g#3@2 ~@2", // C#m C#5 C#m
  F: "[d3,a3,d4,f#4]@2 [a3,d4] [a3,d4,f#4] [e3,g#3,b3,e4]@2 [g#3,b3] [g#3,b3,e4], a2 [e2,b2], ~ d3 ~ e3, ~@4 f#4 ~@7 e4 ~@3", // D D5 D E G#m E E5
  G: "[d3,b3,d4,f#4]@4 [b3,d4]@2 [b3,d4,f#4]@4 [b3,d4,f#4]@2 [d4,f#4] ~ [b3,d4,f#4]@2, b2, ~ d3@2 d3, ~@4 f#4 ~@7 b3@2 ~@2", // Bm D Bm
  H: "[e2,a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@2 ~ e4@2 [e2,a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@2 ~ e4@2, ~@5 [a2,e3,a3,c#4]@3 ~@5 [a2,e3,a3,c#4]@3", // A
  I: "[e2,a2,e3,a3,c#4,e4]@3 a2@2 a#2@3 b2@2 ~ c3@2 c#3@2 ~", // A
  J: "[a3,d4,f#4,a4]@4 [d4,f#4]@2 [d4,f#4,a4]@4 [d4,f#4,a4]@2 [f#4,a4] ~ [d4,f#4,a4]@2, [a2,d3], ~ a3@2 a3, ~@4 a4 ~@7 d4@2 ~@2", // D F#m D D5
  K: "[b3,d4,f#4,b4]@4 [d4,f#4]@2 [d4,f#4,b4]@4 [d4,f#4,b4]@2 [f#4,b4] ~ [d4,f#4,b4]@2, [b2,f#3], ~ b3@2 b3, ~@4 b4 ~@7 d4@2 ~@2", // Bm D Bm B5 Bm B5
  L: "[g3,d4,g4,b4]@4 [d4,g4]@2 [d4,g4,b4]@4 [d4,g4,b4]@2 [g4,b4] ~ [d4,g4,b4]@2, d3, ~ g3@2 g3, ~@4 b4 ~@7 d4@2 ~@2", // G G5 G
  M: "[a3,c#4,e4,a4]@4 [c#4,e4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@2 [e4,a4] ~ [c#4,e4,a4]@2, [a2,e3], ~ a3@2 a3, ~@4 a4 ~@7 c#4@2 ~@2", // A C#m A A5 A A5
  N: "[f#3,c#4,f#4,a4]@4 [c#4,f#4]@2 [c#4,f#4,a4]@4 [c#4,f#4,a4]@2 [f#4,a4] ~ [c#4,f#4,a4]@2, c#3, ~ f#3@2 f#3, ~@4 a4 ~@7 c#4@2 ~@2", // F#m F#5 F#m
  O: "[g3,d4,g4,b4]@2 [d4,g4] [d4,g4,b4] [a3,c#4,e4,a4]@2 [c#4,e4] [c#4,e4,a4], d3 [a2,e3], ~ g3 ~ a3, ~@4 b4 ~@7 a4 ~@3", // G G5 G A C#m A A5
  P: "[a3,d4,f#4,a4]@2 [d4,f#4] [d4,f#4,a4]@2 ~@3, [a2,d3]@3 ~, ~ a3@2 ~, ~@4 a4 ~@11", // D D5
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A@13 B A@3 B A@3 B A@3 B A@7 B A@3 B A@3 B A@7 B A@7 B A@7 B A@3 B A@3 B A@13 B A@3 B A@14
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3",
})).gain(0.69)

// drums · snare
const snare = s("sd").struct("<A@6 B A@31 B A@7 B A@23 B A@8 C B A@11 B A@3 B A@5 B A@2 D>".pickRestart({
  A: "x!16", B: "~ x!15", C: "x", D: "x!15 ~",
})).gain(0.46)

// drums · clap
const clap = s("cp").struct("<~@79 [~@3 x ~ x ~@2 x ~@2 x ~ x ~@2] ~@26>").gain(0.61)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[~ x ~ x]!79 ~ [~ x ~ x]!26>").gain(0.69)

// drums · crash
const crash = s("cr").struct("<~@6 A ~@31 A ~@7 A ~@23 A ~@9 A ~@11 A ~@3 A ~@5 A ~@3>".pickRestart({
  A: "x",
})).gain(0.38)

stack(
  bass, electric_guitar_jazz, synth_strings_1, vibraphone, orchestral_harp, acoustic_guitar_steel, kick, snare, clap,
  pedal_hat, crash
)