Strudelify

Video Killed the Radio Star

Buggles

KeyD♭ majorTempo133 bpm
0:00/0:00
// Video Killed the Radio Star — Buggles
// 133 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): OVERDRIVE, OVERDRIVE.
setcpm(133/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 · piano · "A.PIANO 2"
const piano = note(`<
  A B C D A E F G@2 H I H I H I H I H I H I H I H I H I J@4 K L M N H I H I H I H I H I J@4 K L K L M O M N P Q R Q S T
  A E F U V J@4 W X W X W X K Y@3 H I H I H I H I J@12 Z@6
>`.pickRestart({
  A: "~@7 bb5@9, gb3@15 ~, ~ bb3@7, ~ eb4@3, ~@3 [bb4,eb5,gb5]@5", // Ebm
  B: "~@7 ab5@9, f3, ~ ab3@7, ~ db4@3, ~@3 [ab4,db5,f5]@5", // Db
  C: "~@7 gb5@8 ~, eb3@15 ~, ~@2 bb3@13 ~, ~@4 db4@11 ~, ~@6 [gb4,bb4,db5]@9 ~", // Gb
  D: "~@2 f5@13 ~, [f3,c4,db4,f4], ~ [ab4,c5]@15", E: "~@7 ab5@9, f3, ~ ab3@7, ~ db4@3, ~@3 [db5,f5]@5",
  F: "~@7 gb5@9, eb3@15 ~, ~@2 bb3@13 ~, ~@4 db4@11 ~, ~@6 [gb4,bb4,db5]@9 ~", G: "[eb3,ab3,c4,eb4,ab4,c5,eb5]/2",
  H: "[f3,db4,f4,ab4,f5] ~ [f3,f4,ab4,eb5] ~ [f3,db4,f4,ab4,db5] ~ [gb3,eb4] ~ [gb3,eb4] ~ [gb3,eb4,db5] ~ [gb3,eb4,eb5] ~ [ab3,eb4,ab4,eb5] ~, ~@3 [gb4,bb4,eb5]@2 [gb4,bb4] ~ db5", // Db Fm7 Db Ebm Ebm7 Ebm Ab5 Ebm …
  I: "[ab3,eb5] ~ [ab3,eb4] ~ [ab3,eb4,eb5] ~ [ab3,eb4,eb5] ~ [ab3,eb4,ab4] ~ [ab3,eb4,ab4] ~ [ab3,ab5]@2 gb3@2, ~@4 c5 db5 [eb4,ab4,eb5]@2", // Ab5 Ab Ab5
  J: "[[ab3,db4,f4,ab4,db5]@3 ~ [ab3,db4,f4,ab4]@3 ~ [ab3,db4,f4,ab4,db5] ~ [ab3,db4,f4,ab4]@3 ~ [bb3,db4,gb4,ab4,db5]@5 ~ [bb3,db4,gb4,ab4]@2 ~@2 [bb3,db4,gb4,ab4,db5] ~ [bb3,db4,gb4,ab4]@2 ~@2 [ab3,db4,f4,ab4,db5]@5 ~ [ab3,db4,f4,ab4]@3 ~ [ab3,db4,f4,ab4,db5] ~ [ab3,db4,f4,ab4]@3 ~ [bb3,db4,gb4,ab4,db5]@5 ~ [bb3,db4,gb4,ab4]@3 ~ [bb3,db4,gb4,ab4,db5] ~ [bb3,db4,gb4,ab4]@6]/4", // Db Gb Db Gb
  K: "[db4,f4,ab4]@7 ~ [c4,eb4,ab4]@7 ~", L: "[bb3,db4,gb4]@13 ~@3",
  M: "~@4 [ab3,db4,eb4,ab4]@3 ~ [ab3,db4,eb4,ab4] ~ [ab3,db4,eb4,ab4]@3 ~ [db4,eb4,ab4] ~, ~@7 ab3", // Absus4 Dbsus2
  N: "~@4 [bb3,c4,db4,f4]@3 ~ [bb3,c4,db4,f4] ~ [bb3,c4,db4,f4]@2 ~@2 [bb3,c4,db4,f4] ~", // Bbm
  O: "~@4 [bb3,c4,db4,f4]@3 ~ [bb3,c4,db4,f4] ~ [bb3,c4,db4,f4]@2 ~@2 [bb3,c4,db4,f4]@2", // Bbm
  P: "[gb4,bb4,d5,eb5] ~ [gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [f4,ab4,db5] ~", // Ebm Ab Db
  Q: "[f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [gb4,ab4,db5] ~ [gb4,ab4,db5] ~ [gb4,ab4,db5] ~ [gb4,ab4,db5] ~ [gb4,ab4,db5] ~", // Db Gbsus2
  R: "[gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [f4,ab4,db5] ~", // Ebm Ab Db
  S: "[gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [a4,c5,eb5,f5] ~", // Ebm Ab F7
  T: "[a4,c5,eb5,f5] ~ [a4,c5,eb5,f5] ~ [a4,c5,eb5,f5] ~ [bb4,db5,f5]@10", // F7 Bbm
  U: "ab2 eb2 ab1 bb2 f2 bb1 gb2 db2, [eb3,ab3,c4,eb4]@3 ~@5", V: "gb1@2 bb2@2 f2@2 bb1@2 gb2@2 db2@2 ab2@2 bb1 ~",
  W: "[db4,f4,ab4]@7 ~ [c4,eb4,ab4]@6 ~@2", X: "[bb3,db4,gb4]@15 ~",
  Y: "[~@2 [ab3,bb3,db4,gb4]@2 ~@2 [ab3,bb3,db4,gb4]@41 ~]/3", // Gb
  Z: "[[ab3,db4,f4,ab4,db5]@3 ~ [ab3,db4,f4,ab4]@3 ~ [ab3,db4,f4,ab4,db5] ~ [ab3,db4,f4,ab4]@3 ~ [bb3,db4,gb4,ab4,db5]@5 ~ [bb3,db4,gb4,ab4]@2 ~@2 [bb3,db4,gb4,ab4,db5] ~ [bb3,db4,gb4,ab4]@2 ~@2 [ab3,db4,f4,ab4,db5]@5 ~ [ab3,db4,f4,ab4]@3 ~ [ab3,db4,f4,ab4,db5] ~ [ab3,db4,f4,ab4]@3 ~ [bb3,db4,gb4,ab4,db5]@5 ~ [bb3,db4,gb4,ab4]@3 ~ [bb3,db4,gb4,ab4,db5] ~ [bb3,db4,gb4,ab4]@3 ~ [bb3,db4,gb4,ab4]@34]/6", // Db Gb Db Gb
})).s("gm_piano").gain(0.32)

// chords · piano · "A.PIANO 2" · soft notes
const piano_soft = note(`<
  ~@3 A ~ B ~ C@2 D E D E D E D E D E D E D E D E D E ~@8 D E D E D E D E D E ~@19 B ~@17 D E D E D E D E ~@18
>`.pickRestart({
  A: "[bb2,ab3]", B: "~@5 ab4@10 ~", C: "ab2/2", D: "~@2 db4 ~@13", E: "[eb4,ab4] ~ [ab4,eb5] ~ ab4 ~ ab4 ~@9",
})).s("gm_piano").gain(0.2)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  ~@23 A B C B D E D E F G H I A B A B A B A B A B D E D E F G F G H I H I J K L K M N O P Q R S D E D E F G F G F G T
  U@3 ~@8 D E D E D E D E D E D E D E D V@3
>`.pickRestart({
  A: "f1@3 ~@3 gb1 ab1 gb1@4 ~@2 f1 gb1", B: "ab1 ~ ab1@2 f1@2 gb1@2 ab1 ~ ab1@2 f1@2 ab1 ~",
  C: "f1@4 ~@2 gb1 ab1 gb1@4 ~@2 f1 gb1", D: "db2!8", E: "gb1!8", F: "db2!4 c2!4", G: "bb1!8",
  H: "ab1!2 ab2 ab1!2 ab2 ab1 ab2", I: "bb1!2 bb2 bb1!2 bb2 bb1 bb2", J: "gb1 ~@2 ab1 ~@3 f1", K: "~@6 gb1 ~ gb1@6 ~@2",
  L: "gb1@3 ~@3 ab1@2 ~@6 f1@2", M: "gb1@4 ~@2 ab1@3 ~@5 a1@2", N: "~@6 bb1@9 ~", O: "gb2@7 ~", P: "ab2@7 ~",
  Q: "eb3@13 ~@3", R: "ab2 eb2 ab1 bb2 f2 bb1 gb2 db2", S: "gb1 bb2 f2 bb1 gb2 db2 ab2 bb1", T: "ab1!8",
  U: "[gb1 ~ gb1@2 ~@2 gb1@42]/3", V: "[gb1!6 ~ gb1@17]/3",
})).s("gm_electric_bass_pick").gain(0.44)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note("<~@31 A B C D ~@6 E@4 ~@4 A B A B C D C D ~@15 A B A B A B ~@8 F@2 G@2 ~@18>".pickRestart({
  A: "[f5,ab5,db6,f6]@7 ~ [eb5,ab5,c6,eb6]@7 ~", B: "[db5,gb5,bb5,db6]@15 ~", C: "~@8 bb5@7 ~, [db5,eb5,ab5]@15 ~",
  D: "[c5,db5,f5]@7 ~", E: "[[ab4,db5,f5]@4 ~@2 [gb4,bb4,eb5]@3 ~ [gb4,bb4,db5]@2 ~@2 [ab4,c5,db5]@4 ~@14]/2",
  F: "[f5 ~ eb5 ~ db5 ~ eb5@3 ~ db5@2 ~@8 c5@3 ~ [ab4,c5] ~ [bb4,db5] ~ [c5,eb5]@3 ~, ~@14 db5@9 ~@9]/2", // Ab Bbm Cm
  G: "[f5 ~ eb5 ~ db5 ~ eb5@4 db5@3 ~@7 c5@3 ~ [ab4,c5] ~ [bb4,db5] ~ [c5,eb5]@3 ~, ~@7 db5@4 ~@5]/2", // Ab Bbm Cm
})).s("gm_epiano1").gain(0.24)

// chords · flute
const flute = note("<~@15 A ~@7 A ~ A ~ B@4 ~@2 C@2 ~@6 A ~ A ~ B@4 ~@4 C@4 ~@11 B@4 ~@18 B@14 D@4>".pickRestart({
  A: "ab4@2 db5 bb4@2 bb4 ~@2",
  B: "[[db4,f4]!2 [db4,f4]@2 [db4,f4]@2 [db4,f4] [db4,f4]@2 [db4,gb4] [bb3,db4]@2 [bb3,db4]@2 ~@2]/2", // Db Gb5 Bbm
  C: "[db4@6 bb3@2 db4@2 f4@4 db4@11 ~@7]/2",
  D: "[[db4,f4]!2 [db4,f4]@2 [db4,f4]@2 [db4,f4] [db4,f4]@2 [db4,gb4] [bb3,db4]@2 [bb3,db4]@20]/4", // Db Gb5 Bbm
})).s("gm_flute").gain(0.19)

// bass · fretless bass · "FRETLESS"
const bass_2 = note("<~@3 A B C D E@2 ~@54 F G H ~@42>".pickRestart({
  A: "db4@5 ~ c4@6 bb3@3 ~", B: "gb3@15 ~", C: "f3@7 ~", D: "eb2@7 ~", E: "[ab1@7 ~]/2", F: "[gb2,db3]@15 ~",
  G: "[ab2,db3]@7 ~", H: "eb3@7 ~",
})).s("gm_fretless_bass").gain(0.27)

// other · ocarina
const ocarina = note("<~@18 A B C D@2 ~@19 E ~ E ~@63>".pickRestart({
  A: "~@10 [ab4,c5] [bb4,db5] [c5,eb5] c5 db5 eb5", B: "ab5@14 bb5 ~",
  C: "~@2 eb5@2 db5 ~ bb4@2 c5@2 db5@2 eb5 ~ ab4 bb4",
  D: "[ab4 bb4 [ab4,bb4] ab4 bb4 [ab4,bb4] ab4 [ab4,bb4] ab4@23 ~, ~@8 bb4 ~@23]/2", // Absus2
  E: "~@2 db5 ~ c5 ~ bb4 ~ db5 db5@2 ~ c5 ~ bb4 ~, ~@9 eb5 ~@6",
})).s("gm_ocarina").gain(0.24).pan(0.8)

// other · french horn · "FR.HORN"
const french_horn = note("<~@36 A B@2 C@2 ~@67>".pickRestart({
  A: "~@3 ab3", B: "[ab4@29 ~ gb4@2]/2", C: "[f4@2 gb4@2 ab4@2 db4@25 ~]/2",
})).s("gm_french_horn").gain(0.22).pan(0.3)

// other · music box
const music_box = note(`<
  ~@57
  [~@2 eb6 ~ bb6 ~ ab6@2 ~@2 gb6@2 ~@2 f6@2]
  [~@2 db6@2 ~@2 bb5 ~@9]
  [~@2 eb6 ~ bb6 ~ ab6@2 ~@2 gb6@2 ~@2 f6@2]
  [~@2 gb6 ~ ab6 ~ db6@3 ~@7]
  [~@2 eb6 ~ bb6 ~ ab6@3 ~ gb6@2 ~@2 f6@2]
  [~ eb6 ~ db6@2 ~@3]
  ~@45
>`).s("gm_music_box").gain(0.38)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@57 A B A C A D ~@3 E F ~@40>".pickRestart({
  A: "~@2 eb4 ~ bb4 ~ ab4@3 ~ gb4@3 ~ f4@2", B: "~@2 db4@3 ~ bb3@9 ~", C: "~@2 gb4@2 ab4 ~ db4@9 ~",
  D: "~@2 eb4@3 ~ db4@8 ~@2", E: "[ab3,c4,eb4]@5 ~ [bb3,db4,f4]@5 ~ [gb3,bb3,db4]@4",
  F: "~@2 [bb3,db4,f4]@5 ~ [gb3,bb3,db4]@4 [ab3,c4,eb4]@3 ~", // Bbm Gb Ab
})).s("gm_electric_guitar_jazz").gain(0.38)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@19 A B A B A B A B C ~ C ~ D E ~@2 A B A B A B A B A B C ~ C ~ D E D F G H G I ~@11 C ~ C ~ D E D E D E J K@3 ~@4 A
  B A B C ~ C ~ C ~ C ~ C ~ C ~ C ~ C L@3
>`.pickRestart({
  A: "ab6 ~ db6 ~ ab5 ~ [eb6,bb6] ~ eb6 ~ bb5 ~ ab6 ~ db6 ~", B: "ab5 ~ ab6 ~ db6 ~ ab5 ~ c6 ~ db6 ~ eb6 ~ ab5 ~",
  C: "ab6 gb6 f6 eb6 db6 c6 bb5 ab5", D: "[db4,f4,ab4] [c4,eb4,ab4]", E: "[bb3,db4,gb4]", F: "[bb3,db4,gb4]@14 c6 db6",
  G: "eb6 ab6", H: "f6@14 c6 db6", I: "f6@15 ~", J: "[db4,f4,ab4,f6] [c4,eb4,ab4,ab6]", K: "[ab3,bb3,db4,db6]/3",
  L: "[~@7 [ab3,bb3,db4]@17]/3", // Bbm7
})).s("gm_string_ensemble_1").gain(0.27).pan(0.3)

// other · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~@4 A B C D@2 ~@19 E ~ E ~@15 E ~ E ~@14 A B C ~@3 E ~ E ~@19 E ~ E ~ E ~ E ~ E ~ E ~ E ~ E ~@2
>`.pickRestart({
  A: "~@3 [eb6,bb6]@5, gb4, ~ bb4@7, ~ eb5@3", B: "~@3 [db6,ab6]@5, f4, ~ ab4@7, ~ db5@3",
  C: "~@6 [bb5,gb6]@9 ~, eb4, ~ gb4@7, ~ bb4@3", D: "[ab4,c5,eb5,c6,ab6]/2", E: "gb5@7 ~",
})).s("gm_string_ensemble_1").gain(0.11).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@17 A@16 B@2 A@18 B@4 A@6 C@3 D E A@11 F ~@6 A@19 G ~@2>".pickRestart({
  A: "x!4", B: "x!8", C: "x", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x ~ x ~", F: "~ x ~ x ~@4", G: "x ~ x ~ x!2 ~ x",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct(`<
  ~@23 A@3 B A@5 C A D ~@6 A@3 E A@7 F A@3 G A@5 B ~@3 H I A@3 C A@7 J ~@9 J A@3 K A@3 L A@3 ~ A@3 ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~@3", C: "~@4 x ~@2 x!2 ~@7", D: "~@2 x ~ x ~ x!2", E: "~@4 x ~@7 x ~@2 x",
  F: "~ x ~ x!5", G: "~@4 x ~@5 x!3 ~@3", H: "x ~@2 x ~@2 x ~", I: "~ x ~@6", J: "x", K: "~@4 x ~@6 x!3 ~@2",
  L: "~ x!2 ~@2 x!2 ~",
})).gain(0.44)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@23 A B A C D@5 E ~@8 A B A ~ D@7 F ~@3 C ~@3 G ~ H ~@3 I J ~@21 C D@3 K D@7 L D@3 M ~@2
>`.pickRestart({
  A: "~@6 x!3 ~@7", B: "~@2 x!2 ~@2 x ~", C: "~@7 x", D: "x!8", E: "x ~@6 x", F: "x", G: "~@5 x!2 ~", H: "~@13 x!2 ~",
  I: "~ x ~@2", J: "~@3 x!5", K: "x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x", L: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
  M: "x ~@2 x ~@4",
})).gain(0.27)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A@14 B C@2 D B C@7 E@6 B C@2 D B C@7 F@3 G H I H I H J ~@5 B C@10 ~@7 E@3 ~ B C@2 K B C@3 B C@3 B C@2 K ~@2
>`.pickRestart({
  A: "~@5 x!3", B: "~ x!3", C: "x!4", D: "x!2 ~@2", E: "~@5 x ~ x", F: "~@3 x ~@3 x", G: "~@3 x ~@4", H: "~ x",
  I: "x!2", J: "x", K: "x!3 ~",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@26 A ~@5 B ~ C ~@9 A ~@15 D ~ E ~@3 F G ~@3 H ~@17 I ~@3 H ~@7 J ~@3 K ~@2
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@2 x ~@7 x!3 ~@3", C: "~@11 x ~@4", D: "~@5 x!2 ~", E: "~@9 x!2 ~@5", F: "~ x ~@2 x!2 ~ x",
  G: "x ~ x ~@2 x!3", H: "~@7 x", I: "~@6 x ~ x ~ x!3 ~@3", J: "~@4 x ~ x ~@5 x!2 ~@2", K: "~ x ~@6",
})).gain(0.38)

// drums · open hat
const open_hat = s("oh").struct("<~@23 A@3 B ~@14 A@3 B ~@12 C D C D C D ~@45>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~@3 x ~@3 x", D: "~@3 x ~@4",
})).gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<~@71 [~@5 x!2 ~] ~@17 [~@3 x ~@12] ~@11 [x ~@2 x ~@4 x ~@2 x ~@4] ~@6>").gain(0.44)

// drums · crash
const crash = s("cr").struct("<~@27 A ~@17 A ~@22 A ~@10 B ~@10 A ~@3 A ~@3 A ~@3 A ~@2 C ~@2>".pickRestart({
  A: "x", B: "~ x ~ x ~@4", C: "~@5 x ~ x",
})).gain(0.38)

// drums · ride
const ride = s("rd").struct("<~@3 [x ~@2 x ~@2 x ~] x!4 ~@55 x!3 ~@42>").gain(0.33)

stack(
  piano, piano_soft, bass, epiano1, flute, bass_2, ocarina, french_horn, music_box, electric_guitar_jazz,
  string_ensemble_1, string_ensemble_1_soft, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride
)