Strudelify

Blinded With Science

Thomas Dolby

KeyE minorTempo129 bpm
0:00/0:00
// Blinded With Science — Thomas Dolby
// 129 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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 · synth bass 1 · "Bass"
const bass = note(`<
  A@4 B C@5 D@8 E F G H I J K J K J K J K J K J K J K J K J L M N C@5 O@8 I J K J K J K J K J K J K J L M N C@5 P@8 ~ Q
  R S T U T V W@2 X Y W@2 Z AA N AB@7 AC@6 AD@2
>`.pickRestart({
  A: "[e3@3 ~ d3@3 ~ b2@2 a2@2 g2@2 e2@5 ~ d2@3 ~ b1@2 a1@2 g1@2 e1@5 ~@3 d1@2 e1@4 ~@2 e1@7 ~ b0 ~ d1 ~ e1 ~ f#1 ~ g1@2]/4",
  B: "e1@4 ~@2 d1 ~ e1@4 ~@2 e1@2",
  C: "[~@6 d1 ~ e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 e1@6 ~@2 c1 ~ d1@4 ~@2 e1@6 ~@2 d1@2 e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 e1@2]/5",
  D: "[~@6 d1 ~ e1@4 ~@2 e1@6 ~@2 c1 ~ d1 ~ e1 ~ f1 ~ g1@6 ~@2 d1 ~ e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 g1@6 ~@2 g#1 ~ a1 ~ a1 ~ g#1 ~ g1@6 ~@2 c1 d1@2 ~ e1 ~ e3 ~ [e3,e4]@6 [d3,f#4]@4 g4@2 a2 ~ g2@2 g4@6 [d2,a4]@4 [b1,b4]@2 a1 ~ g1 ~ [e1,g#4,b4,e5]@2, ~@104 b2 ~@5 e2@4 ~@14]/8", // E D D5 B E
  E: "~@6 d1 ~ e1@3 ~@3 e1@2", F: "~@6 e1 ~ c1@3 ~ d1@3 ~", G: "e1@4 ~@2 e1@3 ~@5 d1 ~",
  H: "e1@4 ~@2 e1 ~ c1@3 ~ d1@3 ~", I: "e1 ~@2 d1 e1 ~@2 e1", J: "~@6 e1@2 b0@3 ~ d1@3 ~",
  K: "e1@3 ~@3 d1@2 e1@2 ~@4 e1@2", L: "e1@3 ~@3 d1@2 e1@2 ~@6", M: "e1 ~@2 b0 d1 e1 f#1 g1",
  N: "f#1@4 ~@2 d1 ~ e1@4 ~@2 e1@2",
  O: "[~@6 d1 ~ e1@4 ~@2 e1@6 ~@2 c1 ~ d1 ~ e1 ~ f1 ~ g1@6 ~@2 d1 ~ e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 g1@6 ~@2 g#1 ~ a1 ~ a1 ~ g#1 ~ g1@6 ~@2 c1 d1@2 ~ e1 ~ e3 ~ [e3,e4]@6 [d3,f#4]@3 ~ b2 ~ a2 ~ g2@2 g4@6 a4@4 [b1,b4]@2 a1 ~ g1 ~ [e1,g#4,b4,e5]@2, ~@52 g4@2 ~ e2@2 ~ d2 ~@5]/8", // E D B E
  P: "[~@6 d1 ~ e1@4 ~@2 e1@6 ~@2 c1 ~ d1 ~ e1 ~ f1 ~ g1@6 ~@2 d1 ~ e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 g1@6 ~@2 g#1 ~ a1 ~ a1 ~ g#1 ~ g1@6 ~@2 c1 d1@2 ~ e1 ~ e3 ~ e3@5 ~ d3@3 ~ b2 ~ a2 ~ g2@2 ~@6 d2@3 ~ b1@2 a1 ~ g1 ~ [e1,g#4,b4,e5]@2, ~@55 e2@4 ~@5]/8", // E
  Q: "~@10 d1 ~ d1@2 e1@2", R: "~@6 d1 ~ e1@2 ~@4 e1@2", S: "~@6 e1@2 c1@3 ~ d1@3 ~", T: "e1@2 ~@4 d1 ~ e1@2 ~@4 e1@2",
  U: "~@3 e1 c1 ~ d1 ~", V: "~@6 d1 ~ e1 ~ e1 ~ e1 ~ e1 ~", W: "g1 a1 ~@5 g1", X: "g1 a1 ~@4 a1 g1",
  Y: "~ g1 ~ g1 ~ g1 f#1 e1", Z: "g1 a1 ~@2 a1 ~@3", AA: "b1 ~ b1 ~@4 b0",
  AB: "[~@6 d1 ~ e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 e1@6 ~@2 c1 ~ d1@4 ~@2 e1@6 ~@2 d1@2 e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 e1@4 ~@4 d1 ~ e1@4 ~@2 e1@6 ~@2 c1 ~ d1 ~ e1 ~ f1 ~ g1@2]/7",
  AC: "[~@6 d1 ~ e1@4 ~@2 e1@5 ~@3 d1 ~ e1@4 ~@2 g1@6 ~@2 g#1 ~ a1 ~ a1 ~ g#1 ~ g1@6 ~@2 c1 d1@2 ~ e1 ~ e3 ~ [e3,e4]@6 [d3,f#4]@3 ~ b2 ~ a2 ~ g2@2 g4@4 ~@2 [d2,a4]@3 ~ [b1,b4]@2 a1 ~ g1 ~ [e1,g#4,b4,e5]@2, ~@36 g4@2 ~ e2@4 ~@5]/6", // E D D5 B E
  AD: "[~@6 d1@2 e1@2 ~@4 [e1,g#4,b4,e5]@5 ~@13]/2", // E
})).s("gm_synth_bass_1").gain(0.8)

// other · lead 8 bass lead · "Chords"
const lead_8_bass_lead = note("<A@2 ~@116>".pickRestart({
  A: "[e5@2 d5@2 b4 a4 g4 e4@3 d4@2 b3 a3 g3 ~]/2",
})).s("gm_lead_8_bass_lead").gain(0.59)

// chords · french horn · "Chords"
const french_horn = note(`<
  ~@4 A@10 B@2 C D E A@3 ~@20 A@10 B@2 C D ~@16 A@10 B@2 C D ~@2 A@6 F@2 G H F@2 I J A@10 B@2 C D K ~
>`.pickRestart({
  A: "~@2 [e4,f#4,g#4] ~@3 [e4,f#4,g#4] ~@3 [e4,f#4,g#4] ~@3 [e4,f#4,g#4] ~", // E
  B: "[~@2 [e4,f#4,g#4] ~@3 [e4,f#4,g#4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c4,d#4,g#4] ~ [b3,d4,g4]@10 ~@6 [g#4,b4,e5] ~]/2", // E A G# G E
  C: "~@4 [a4,d5] ~@3 [f#4,b4] ~ [e4,a4] ~ [d4,g4] ~ [b3,e4] ~", // D5 B5 A5 G5 E5
  D: "~@4 [a3,d4] ~@3 [f#3,b3] ~ [e3,a3] ~ [d3,g3] ~ e2 ~", E: "~@6 [e4,f#4,g#4] ~@3 [e4,f#4,g#4] ~@3 [e4,f#4,g#4] ~",
  F: "[g3,g4,d5] [a3,a4,c#5] ~@5 [g3,g4,d5]", G: "[g3,g4,d5] [a3,a4,c#5] ~@4 [a3,a4,c#5] [g3,g4,b4]",
  H: "~ [g3,g4,b4] ~ [g3,g4,b4] ~ [g3,g4,b4] [f#3,f#4,a4] [e3,e4,g4]", I: "[g3,g4,d5] [a3,a4,c#5] ~@2 [a3,a4,c#5] ~@3",
  J: "[b3,b4,d5] ~ [b3,b4,d5] ~ b4 ~@3", K: "~@3 d3 e3 ~@2 e3",
})).s("gm_french_horn").gain(0.41)

// bass · acoustic bass · "Guitar"
const bass_2 = note("<A@4 ~@114>".pickRestart({
  A: "[e3@4 d3@4 b2@2 a2@2 g2@2 e2@6 d2@4 b1@2 a1@2 g1 ~ e1@7 ~ d1 ~ e1@5 ~ e1@4 ~@14]/4",
})).s("gm_acoustic_bass").gain(0.8)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@4 A B C B D B D B@2 D B@2 ~@2 E F G H G I J K E@2 L K M I J N G O P K L Q R@2 S T U B V W X V W Y Z AA ~@2 G I E H
  AB E AC@2 J K G E AB K AD@2 AE W AF@5 AG@6 ~@3 J I J K AH AI AJ@2 AK AL AJ@2 AM AN AE W AO@6 AP@5 ~ AQ@2
>`.pickRestart({
  A: "e4 ~@5 d4 ~ e4 ~@5 e4 ~", B: "~@6 d4 ~ e4 ~@5 e4 ~", C: "~@6 d4 ~ e4@2 ~@2 b4 ~ e4 ~",
  D: "~@6 d4 ~ e4 ~@3 b4 ~ e4 ~", E: "~ [e4,b4] ~@2 [e4,b4]@4", F: "~ [e4,b4] ~@2 [e4,c#5] ~ [e4,d5]@2",
  G: "~@2 [e4,b4] ~@5 [e4,b4]@8", H: "~@2 [e4,b4]@2 ~@4 [e4,c#5]@2 ~@2 [e4,d5]@3 ~",
  I: "~@2 [e4,b4] ~@5 [e4,c#5] ~@3 [e4,d5]@4", J: "~@2 [e4,b4] ~@5 [e4,b4]@7 ~",
  K: "~@2 [e4,b4]@2 ~@4 [e4,c#5] ~@3 [e4,d5]@4", L: "~ [e4,b4] ~@2 [e4,b4]@3 ~", M: "~@2 [e4,b4] ~@5 [e4,b4]@6 ~@2",
  N: "~@2 [e4,b4] ~@5 [e4,c#5] ~@3 [e4,d5]@2 ~@2", O: "~@2 [e4,b4]@2 ~@4 [e4,b4] ~@3 [e4,b4] ~@3",
  P: "~@2 [e4,b4]@2 ~@4 [e4,b4]@3 ~@5", Q: "~@2 [e4,b4] ~@5 [e4,b4] ~@7",
  R: "[~@2 [e4,b4] ~@5 b4@2 e4 ~@3 [e4,b4]@6 ~@12, ~@8 e4 ~@23]/2", S: "e4 ~@5 d4@2 e4@2 ~@4 e4 ~",
  T: "~@3 d4 e4 ~@2 e4", U: "~@6 d4 ~ e4@2 ~@2 b4 ~ e4@2", V: "~@6 d4 ~ e4 ~@5 e4@2", W: "~@6 d4 ~ e4@2 ~@4 e4@2",
  X: "~@3 d4 e4 ~ b4 e4", Y: "~@6 d4 ~ e4@2 ~@4 e4 ~", Z: "~@6 d4 ~ e4 ~ e4 ~ e4 ~ d4 ~", AA: "~@14 e4 ~",
  AB: "~@2 [e4,b4]@2 ~@4 [e4,b4]@7 ~", AC: "[~@2 [e4,b4]@2 ~@4 [e4,b4]@4 ~@2 [e4,b4]@7 ~@11]/2",
  AD: "[~@2 [e4,b4]@2 ~@4 [e4,b4]@4 ~@2 [e4,b4]@7 ~ [e4,b4]@2 ~@4 [e4,b4]@2 ~@2]/2", AE: "e4@2 ~@4 d4 ~ e4 ~@5 e4@2",
  AF: "[~@6 d4 ~ e4@2 ~@2 b4@2 e4@4 ~@4 d4 ~ e4@2 ~@4 e4@5 ~@3 d4@2 e4 ~@5 e4@6 ~@2 d4@2 e4@2 ~@4 e4@6 ~@2 d4 ~ e4@2 ~@2 b4@2 e4@2]/5",
  AG: "[~@6 d4@2 e4@3 ~@3 e4@6 ~@2 d4 ~ e4@2 ~@4 e4@6 ~@2 d4@2 e4@3 ~@3 e4@7 ~ d4 ~ e4 ~ e4 ~ e4 ~ d4@6 ~@8 d4 ~ e4@6 ~@12]/6",
  AH: "~@2 [e4,b4]@2 ~@4 [e4,b4]@5 ~@3", AI: "~@2 [e4,b4] ~@5 [e4,b4]@2 ~@2 [e4,b4]@2 ~@2", AJ: "g4 a4 ~@5 g4",
  AK: "g4 a4 ~@4 a4 g4", AL: "~ g4 ~ g4 ~ g4 f#4 e4", AM: "g4 a4 ~@2 a4 ~@3", AN: "b4 ~ b4 ~@5",
  AO: "[~@6 d4 ~ e4@2 ~@2 b4@2 e4@4 ~@4 d4 ~ e4@2 ~@4 e4@5 ~@3 d4@2 e4 ~@5 e4@6 ~@2 d4@2 e4@2 ~@4 e4@6 ~@2 d4 ~ e4@2 ~@2 b4@2 e4@4 ~@4 d4@2 e4@3 ~@3 e4@2]/6",
  AP: "[~@6 d4 ~ e4@2 ~@4 e4@6 ~@2 d4@2 e4@3 ~@3 e4@7 ~ d4 ~ e4 ~ e4 ~ e4 ~ d4@6 ~@8 d4 ~ e4@6 ~@12]/5",
  AQ: "[~@6 d5 ~ e5 ~@5 e5@4 ~@14]/2",
})).s("gm_electric_guitar_clean").gain(0.56)

// other · pan flute · "Panflute"
const pan_flute = note(`<
  ~@12 A B ~@9 C D@2 ~@5 E@3 ~@16 A B ~@5 C D@2 ~@5 E@3 ~@12 A B ~@16 F G@3 ~@8 A B ~@6
>`.pickRestart({
  A: "~@8 f#5@3 ~ c#5@4", B: "f#4@5 ~@11", C: "~@7 g#4", D: "[~ g#4 a4 b4 d5@2 b4 d5@2 b4 ~@6]/2",
  E: "[~@7 g#4@2 g#4 a4 b4 d5@2 b4 d5@2 b4 ~@6]/3", F: "~ e5 g5 a5 a5@2 g5 e5",
  G: "[a5@4 g5@2 e5@2 b5@2 a5@2 g5@2 e5@4 d5@4 b4@4 a4@2 g4@2 e4@8 b3@7 ~@3]/3",
})).s("gm_pan_flute").gain(0.8)

// other · violin · "Panflute"
const violin = note("<~@86 A B A C A D@3 ~@24>".pickRestart({
  A: "~ b4 d5 a5 g#5@2 f#5 e5", B: "d5 e5 c#6 b5@3 ~@2", C: "d5 e5 f#5 e5@3 ~@2",
  D: "[d5 e5 c#6 b5@3 a5 g#5@3 f#5 e5@2 d#5@2 d5@2 c5 c#5 a5 g5 e5 d5 c#5]/3",
})).s("gm_violin").gain(0.8)

// other · orchestra hit · "Orch Hit/ Strings"
const orchestra_hit = note("<~@17 A ~@37 B ~@28 C B ~@28 D E A ~>".pickRestart({
  A: "~@7 e5", B: "~@2 a4 ~ b4 ~@2 e5", C: "~@7 g4", D: "~@7 a4", E: "~@2 b4 ~ d5 ~@2 e5",
})).s("gm_orchestra_hit").gain(0.8)

// other · string ensemble 1 · "Orch Hit/ Strings"
const string_ensemble_1 = note("<~@25 A B A C ~@4 A B A C A B A D@2 ~@17 A B A C ~@4 A B A E@2 ~@46>".pickRestart({
  A: "~@2 [e2,e5] [f2,f5]", B: "[d3,d6]@14 [b2,b5] ~", C: "[d2,d5]@14 [e2,e5] ~",
  D: "[d5@4 c5@3 b4@2 e4@5 ~@2, d2@7 ~@9, ~@8 c2@4 ~@2 b1@13 ~@5]/2",
  E: "[d5@8 c5@6 [b1,b4]@13 ~@5, d2@7 ~@9, ~@2 c2 ~@5]/2", // B
})).s("gm_string_ensemble_1").gain(0.72)

// other · string ensemble 1 · "Orch Hit/ Strings" · soft notes
const string_ensemble_1_soft = note("<~@78 A@6 ~@24 B@2 C@4 ~@4>".pickRestart({
  A: "[~@16 a6@10 ~@2 [a5,e6,a6]@11 [g5,d6,g6]@5 ~@4, ~@4 e6@22 [g5,d6,g6]@3 ~@19]/6", B: "[~ e6@3]/2",
  C: "[a6@10 ~@2 [a5,e6,a6]@11 [g5,d6,g6]@5 ~@4, ~@10 [g5,d6,g6]@3 ~@19]/4", // A5 G5
})).s("gm_string_ensemble_1").gain(0.4)

// other · melodic tom · "Deep Snare"
const melodic_tom = note("<[c3 ~@15] [~@2 b2 ~ b2 ~ a2 ~ g2 ~ f2 ~ e2 ~ c2 ~] [~@6 c2 ~ e2 ~ g2 ~ b2 ~ c2 ~] ~@115>")
  .s("gm_melodic_tom").gain(0.56).pan(0.3)

// chords · synth drum · "Toms"
const synth_drum = note("<A B ~@87 C ~@4 D@3 ~ D@2 ~ E ~@14 F ~>".pickRestart({
  A: "[c2,d2,d#2,e2,f2] ~@15",
  B: "~@2 [c3,d3,e3] ~ [b2,c3,d3] ~ [a2,b2,c3] ~ [f2,g2] ~ [c2,d2] ~ [g1,a1,b1] ~ [c1,d1,e1] ~", C: "~@10 d3!3 ~ b2 ~",
  D: "~@10 d5!2 d#5 ~@3", E: "[d5,d#5] ~@3 [a2,d5] ~@11", F: "~@6 a2 ~ a2 ~@5 f2 ~",
})).s("gm_synth_drum").gain(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@2 A@20 B A@63 ~ C A D A@4 E@3 A E@2 A F A@14 G ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@6", C: "~@7 x", D: "~ x ~ x ~ x!3", E: "~@2 x ~@3 x ~@3 x!3 ~ x ~", F: "x!4 ~ x ~ x",
  G: "~@3 x!2 ~@2 x",
})).gain(0.8)

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

// drums · hihat
const hihat = s("hh").struct("<~ A B@2 A@18 B@20 A@14 B@16 A@14 ~ C B D B@3 E B@8 A@14 F ~>".pickRestart({
  A: "x!4", B: "x!8", C: "~@5 x!3", D: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", E: "x!4 ~ x ~ x", F: "~@3 x ~@4",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  A B C@12 D C@3 ~@3 B ~@6 B ~@12 B C@10 D C@3 ~@6 B ~@7 B@2 C@10 D C@2 E ~ B C@13 F C@10 D C@2 G H ~
>`.pickRestart({
  A: "x", B: "~@5 x!3", C: "~ x ~ x", D: "~@2 x ~@2 x!3", E: "~@2 x ~@4 x", F: "x ~ x ~@2 x!3", G: "~@2 x ~@3 x!2",
  H: "~@7 x",
})).gain(0.8)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@37 [~ x!2 ~ x!2 ~ x] ~@80>").gain(4.06)

stack(
  bass, lead_8_bass_lead, french_horn, bass_2, electric_guitar_clean, pan_flute, violin, orchestra_hit,
  string_ensemble_1, string_ensemble_1_soft, melodic_tom, synth_drum, kick, clap, snare, hihat, ride_bell, cabasa
)

More by Thomas Dolby