Strudelify

Silent Running

Mike + The Mechanics

KeyD minorTempo133 bpm
0:00/0:00
// Silent Running — Mike + The Mechanics
// 133 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 166 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
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.

// bass · synth bass 1 · "Bass Synt" · D
const bass = note("<~ [[d1,d2]@2 ~@4 [d1,d2] ~@9]!164 [[d1,d2] ~@5 [d1,d2] ~@9]>").s("gm_synth_bass_1").gain(0.44)

// chords · epiano2 · "E. Piano"
const epiano2 = note(`<
  ~ A B C@2 A B C@2 A D E@2 A B F@2 A D G@2 A B H@2 A B G@2 A B I@2 A B C@2 A B C@2 A D C@2 A B E@2 A B G@2 A B J@2 A D
  K@2 A B I@2 A D C@2 A D E@2 A B C@2 A D C@2 A B L@2 A B C@2 M N C@2 A B C@2 A B O@2 P B Q@2 A B L@2 A B C@2 A B C@2 A
  B C@2 M D I@2 M B I@2 A B C@2 A B C@2 A B C@2 A B I@2 A B C@2 R B C@2 A B C@2 A D C@2 A D I@2 S
>`.pickRestart({
  A: "[a3,d4,f4]@15 ~", B: "[g3,c4,e4]@15 ~", C: "[[f3,bb3,d4]@15 ~]/2", D: "[g3,c4,e4]@7 ~", E: "[[f3,bb3,d4]@7 ~]/2",
  F: "[[f3,bb3,d4]@27 ~@5]/2", G: "[[f3,bb3,d4]@12 ~ [g3,c4,e4]@3]/2",
  H: "[[f3,bb3,d4]@18 ~@4 [a3,c4,f4] ~@3 [g3,c4,e4]@5 ~]/2", I: "[[f3,bb3,d4]@29 ~@3]/2",
  J: "[[f3,bb3,d4]@19 ~@3 [a3,c4,f4] ~@3 [g3,c4,e4]@5 ~]/2", K: "[[f3,bb3,d4]@28 [g3,c4,e4]@3 ~]/2",
  L: "[[f3,bb3,d4]@24 ~@2 [g3,c4,e4]@5 ~]/2", M: "[a3,d4,f4]@7 ~", N: "[g3,c4,e4]",
  O: "[[f3,bb3,d4]@25 ~ [g3,c4,e4]@6]/2", P: "[a3,d4,f4]", Q: "[[f3,bb3,d4]@20 ~@2 [a3,c4,f4] ~@3 [g3,c4,e4]@5 ~]/2",
  R: "[a3,d4,f4]@15 ~, g3 ~@15", S: "[d1,d2,d3,a3,d4] ~@2 [d1,d2,d3,a3,d4] ~@4",
})).s("gm_epiano2").gain(0.3).pan(0.8)

// other · piccolo · "Whistle"
const piccolo = note(`<
  A B C D@2 E F@3 B G H@2 E I@3 ~@15 A B C J@2 E K@3 L@2 D@2 E I@3 ~@15 A B C J@2 E M@3 N@2 D@2 E O P@2 ~@31 A B C J@2 E
  Q@3 R C J@2 E S@3 A T@2 U@2 V@3 W X@2 Y@2 Z@3 AA ~ AB@2 E AC@3 W AA W AD@2 AE@3 R AF AG@2 ~
>`.pickRestart({
  A: "~@6 c6 d6", B: "f6@3 d6@5", C: "~@6 c5 d5", D: "[f5@4 d5@4 c5@2 d5@11 ~@7 c6@2 d6@2]/2",
  E: "f6@2 d6@2 c6 d6 f5 g5", F: "[a5@4 g5@4 c6@2 a5@4 f5@8 d5@13 ~@9 c6@2 d6@2]/3", G: "~@12 c5 ~ d5@2",
  H: "[f5@4 d5@4 c5@2 d5@10 ~@8 c6 ~ d6@2]/2", I: "[a5@4 g5@4 c6@2 a5@4 f5@8 d5@15 ~@11]/3",
  J: "[f5@2 d5@2 c5 d5@5 ~@4 c6 d6]/2", K: "[a5@4 g5@4 c6@2 a5@4 f5@8 d5@13 ~@9 c6@2 d6 ~]/3",
  L: "[f6@6 d6@13 ~@9 c5 ~ d5@2]/2", M: "[a5@4 g5@4 c6@2 a5@4 f5@8 d5@14 ~@8 c6@2 d6 ~]/3",
  N: "[f6@3 d6@7 ~@4 c5 d5]/2", O: "a5@2 g5@2 c6 a5@3", P: "[c6@3 d6@4 f6@4 a6@5]/2",
  Q: "[a5@2 g5@2 c6 a5@2 f5@4 d5@7 ~@4 c6 d6]/3", R: "f6@6 d6@9 ~", S: "[a5@4 g5@3 ~ c6@2 a5@4 f5@8 d5@14 ~@12]/3",
  T: "[f6@6 d6@13 ~@9 c6@2 d6@2, ~@6 e6 ~@25]/2", U: "[g6@4 f6@3 g6 [e6,f6]@2 d6@14 ~@4 f5@2 g5 ~]/2",
  V: "[a5@4 g5@4 c6@2 a5@4 f5@8 d5@13 ~@13]/3", W: "~@12 c6@2 d6 ~", X: "[f6@6 d6@13 ~@9 c6@2 d6 ~, ~@6 e6 ~@25]/2",
  Y: "[g6@4 f6@3 g6 e6@2 d6@14 ~@4 f5@2 g5@2, ~@8 f6 ~@23]/2",
  Z: "[a5@4 g5@4 c6@2 a5@4 f5@8 d5@15 ~@11, ~@22 e5 ~@25]/3", AA: "f6@5 e6 d6@10",
  AB: "[g6@4 f6@3 g6 [e6,f6]@2 d6@14 ~@8]/2", AC: "[a5@4 g5@4 c6@2 a5@4 f5@7 e5 d5@16 ~@10]/3",
  AD: "[g6@4 f6@3 g6 f6@2 e6@2 d6@11 ~@9]/2", AE: "[a5@4 g5@4 c6@2 a5@4 f5@7 ~ d5@12 ~@10 c6@2 d6 ~]/3", AF: "g6@7 ~",
  AG: "[a6@29 ~@3]/2",
})).s("gm_piccolo").gain(0.43).pan(0.9)

// chords · acoustic guitar steel · "Acc.Guita"
const acoustic_guitar_steel = note(`<
  ~ A B C@3 B D@2 E B F@2 A B G@2 H@2 F@2 A B I@3 B J@3 B K@2 A B K@2 A B L@2 A M N@3 B D@2 A O P@3 B Q@3 B Q@3 B K@2 A
  B F@2 A B F@2 A B F@2 A B R@4 S@2 T@4 U V@3 W@4 X Y@4 B Z@3 B N@3 B AA@3 B F@2 X B AB@2 AC@2 F@2 X AD AE@2 AF@4 X B
  S@2 A AD AG@2 AH@4 AI@4 X AJ@3 U AK@5 AL@3 AM AN@2 AO
>`.pickRestart({
  A: "[a3,d4,f4]@15 ~", B: "[g3,c4,e4]@15 ~", C: "[[f3,bb3,d4]@29 ~@3 [d4,f4]@15 ~, ~@31 a3@16 ~]/3",
  D: "[~@8 g1 a1 c2 a1@3 ~@2, [f3,bb3,d4]@15 ~]/2", E: "~ f4@14 ~, [a3,d4]@15 ~", F: "[[f3,bb3,d4]@29 ~@3]/2",
  G: "[~@8 g1 a1 c2 a1@3 ~@2, [f3,bb3,d4]@29 ~@3]/2", H: "[~ f4@14 ~ e4@15 ~, [a3,d4]@14 ~ [g3,c4]@16 ~]/2",
  I: "[[f3,bb3,d4]@25 ~@7 f4@15 ~, ~@31 [a3,d4]@16 ~]/3", J: "[[f3,bb3]@23 ~@9 f4@15 ~, d4@26 ~@5 [a3,d4]@16 ~]/3",
  K: "[[f3,bb3,d4]@15 ~]/2", L: "[~@8 g1 a1 c2 a1@3 ~@2, [f3,bb3,d4]@31 ~]/2", M: "~ e4@15, [g3,c4]@15 ~",
  N: "[[f3,bb3,d4]@29 ~@3 [d4,f4]@15 ~, ~@31 a3@15 ~@2]/3", O: "[g3,c4,e4]",
  P: "[[f3,bb3,d4]@23 ~@9 [d4,f4]@16, ~@31 a3@16 ~]/3", Q: "[[f3,bb3,d4]@7 ~ [d4,f4]@4, ~@31 a3@16 ~]/3",
  R: "[[f3,bb3,d4]@29 ~@3 [d4,f4]@15 ~ [c4,e4]@15 ~, ~@31 a3@14 ~@2 g3@15 ~@2]/4", S: "[[f3,bb3,d4]@7 ~]/2",
  T: "[[a3,d4,f4]@15 ~ [c4,e4]@15 ~@17 g1@2 a1@2 c2@2 a1@7 ~@3, ~@15 g3@14 ~@2 f3@31 ~@2, ~@16 [bb3,d4]@15 ~]/4", // Dm C Bb
  U: "~ f4@15, [a3,d4]@15 ~", V: "[[g3,c4,e4]@14 ~@2 [bb3,d4]@29 ~@3, ~@5 f3@10 ~]/3",
  W: "[[a3,d4,f4]@15 ~ [c4,e4]@15 ~@17 g1@2 a1@2 c2@2 a1@7 ~@3, ~@15 g3@14 ~@2 f3@32 ~, ~ [bb3,d4]]/4", // Dm C Bb
  X: "[a3,d4,f4]@7 ~", Y: "[[g3,c4,e4]@15 ~ [bb3,d4]@28 ~@4 [d4,f4]@15 ~, ~@15 f3@28 ~@4 a3@16 ~]/4",
  Z: "[[f3,bb3,d4]@29 ~@3 [d4,f4]@16, ~@31 a3@16 ~]/3", AA: "[[f3,bb3,d4]@28 ~@4 [d4,f4]@15 ~, ~@31 a3@15 ~@2]/3",
  AB: "[~@16 g1@2 a1@2 c2@2 a1@9 ~, [f3,bb3,d4]@15 ~]/2", AC: "[~ f4@14 ~ [c4,e4]@15 ~, [a3,d4]@15 g3@15 ~@2]/2",
  AD: "[g3,c4,e4]@7 ~", AE: "[~@16 g1@2 a1@2 c2@2 a1@7 ~@3, [f3,bb3,d4]@31 ~]/2",
  AF: "[[a3,d4,f4]@15 ~ [c4,e4]@15 ~ [bb3,d4]@28 ~@4, ~@15 g3@15 ~ f3@29 ~@4]/4", AG: "[[f3,bb3,d4]@27 ~@5]/2",
  AH: "[[a3,d4,f4]@14 ~@2 [c4,e4]@15 ~ [bb3,d4]@28 ~@4, ~@15 g3@14 ~@2 f3@29 ~@4]/4", // Dm C Bb
  AI: "[[a3,d4,f4]@15 ~ [c4,e4]@15 ~ [bb3,d4]@29 ~@3, ~@15 g3@14 ~@2 f3@29 ~@4]/4", // Dm C Bb
  AJ: "[[g3,c4,e4]@7 ~ [bb3,d4]@14 ~@2, ~@15 f3@29 ~@4]/3", // C Bb
  AK: "[[g3,c4,e4]@14 ~@2 [bb3,d4]@29 ~@3 f4@15 ~ [c4,e4]@15 ~, ~@15 f3@30 ~@2 [a3,d4]@15 ~ g3@15 ~@2]/5", // C Bb C D5
  AL: "[[f3,bb3,d4]@27 ~@5 [d4,f4]@14 ~@2, ~@31 a3@14 ~@3]/3", AM: "[c4,e4,g4]@7 ~", AN: "[[d4,f4,a4]@11 ~@5]/2",
  AO: "[d1,d2] ~@2 [d1,d2] ~@4", // D
})).s("gm_acoustic_guitar_steel").gain(0.42).pan(0.1)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A B C@2 A B D@2 A B D@2 A B D@2 ~@16 A B D@2 A B D@2 A B D@2 A B D@2 ~@16 A B D@2 A B D@2 A B D@2 A B D@2 A B D@2 A
  B D@2 A B D@2 A B D@2 ~@16 A B C@2 A E D@2 A B D@2 A B D@2 A B D@2 A B D@2 A B D@2 A B D@2 A B D@2 A B D@2 A B D@2 A B
  D@2 F G H@2 I
>`.pickRestart({
  A: "[a3,d4,f4]", B: "[g3,c4,e4]", C: "[[f3,bb3,d4]@31 ~]/2", D: "[f3,bb3,d4]/2", E: "[g3,c4,e4]@15 ~",
  F: "[d3,a3,d4,f4]", G: "[c3,e4,g4], c4@7 ~", H: "[[bb2,d4,f4,a4]@15 ~]/2", I: "[d3,a3,d4]@2 ~@4 [d3,a3,d4]@3 ~@7",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.2)

// other · overdriven guitar · "LeadGuita"
const overdriven_guitar = note("<~@81 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H I@3 ~@55 J K@2 ~ L@3 ~@5>".pickRestart({
  A: "[~@2 g5@5 f5@2 d5@2 c5@5]/2", B: "[~@2 g5@5 c6@2 a5@2 g5@5]/2", C: "[~@2 f5 e5 f5 e5@2 d5@2 c5@2 c5@5]/2",
  D: "[e5 a5 g5 e5@11 ~@2]/2", E: "d5/2", F: "[c5@5 ~ a4@18 ~@2 [ab4,a4]@2 c5@2 d5 ~]/2",
  G: "[f5@2 e5 f5 e5@2 c5 a4@4 e5@3 d5 c5]/2", H: "g4@15 ~", I: "[~@2 c5@9 ~]/3", J: "f5@3 e5@2 c5@3",
  K: "[d5@6 a5@25 ~]/2", L: "[e5@4 d5@2 c5@2 g4@4 c5@2 a4@23 ~@11]/3",
})).s("gm_overdriven_guitar").gain(0.36).pan(0.1)

// other · vibraphone · "Soft Bell"
const vibraphone = note(`<
  A B C D E F G@2 A H I J K L M@2 ~@16 A N O P@2 Q R@2 A B O S@2 T U@3 ~@15 E B C V@2 W M@2 A N X J A Y Z AA@2 AB AC
  AD@2 AB AC AE@2 AB AC AF@2 AB AG AD@2 ~@15 E AH@2 S@2 L AI@2 A N X AJ@2 AK AL@3 B X AM@2 AN AO@3 AP@2 AQ@2 AR AS@2 ~@4
  AT AU ~@6 AV AW ~@2 AX AY AZ BA@2 ~
>`.pickRestart({
  A: "~@6 [c6,c7] d6, ~@14 d7 ~", B: "[f6,f7]@3 [d6,d7]@5", C: "~@6 c5 [d5,d6], ~@12 c6 ~@3",
  D: "[f5,f6]@4 [d5,d6]@4 [c5,c6]@2 [d5,d6]@3 ~@3", E: "~@6 [c6,c7] [d6,d7]",
  F: "[f6,f7]@4 [d6,d7]@4 [c6,c7]@2 [d6,d7] ~ [f5,f6]@2 g5@2, ~@14 g6 ~", // F D C D F
  G: "[[a5,a6]@4 [g5,g6]@4 [c6,c7]@2 [a5,a6]@4 [f5,f6]@9 ~@9]/2", H: "[f6,f7]@3 [d6,d7]@3 ~@2",
  I: "~@6 c5 d5, ~@12 c6 ~ d6 ~", J: "[f5,f6]@2 [d5,d6]@2 [c5,c6] [d5,d6]@3", K: "~@6 c6 [d6,d7], ~@12 c7 ~@3",
  L: "[f6,f7]@4 [d6,d7]@4 [c6,c7]@2 [d6,d7] ~ [f5,f6]@2 [g5,g6] ~", // F D C D F G
  M: "[[a5,a6]@2 [g5,g6]@2 [c6,c7] [a5,a6]@2 [f5,f6]@8 ~]/2", N: "[f6,f7]@6 [d6,d7]@9 ~", O: "~@6 [c5,c6] [d5,d6]",
  P: "[[f5,f6]@2 [d5,d6]@2 [c5,c6] [d5,d6]@4 ~@5 [c6,c7] [d6,d7]]/2", // F D C D C D
  Q: "[f6,f7]@2 [d6,d7]@2 [c6,c7] d6 [f5,f6] [g5,g6], ~@10 d7 ~@5", // F D C F G
  R: "[[a5,a6]@2 [g5,g6]@2 [c6,c7] [a5,a6]@2 [f5,f6]@7 ~@2]/2", // A G C A F
  S: "[[f5,f6]@4 [d5,d6]@4 [c5,c6]@2 [d5,d6]@9 ~@9 [c6,c7]@2 [d6,d7]@2]/2", // F D C D C D
  T: "[f6,f7]@4 [d6,d7]@4 c6@2 [d6,d7] ~ [f5,f6]@2 [g5,g6]@2, ~@8 c7 ~@7", // F D F G
  U: "[[a5,a6]@2 [g5,g6]@2 [c6,c7] [a5,a6]@2 [f5,f6]@10 ~@7]/3", // A G C A F
  V: "[[f5,f6]@2 [d5,d6]@2 [c5,c6] [d5,d6]@5 ~@4 c6 [d6,d7], ~@28 c7 ~@3]/2", // F D C D
  W: "[f6,f7]@4 d6!2 ~@2 [c6,c7]@2 [d6,d7] ~ [f5,f6]@2 [g5,g6]@2, ~ d7 ~@2", X: "~@6 [c5,c6] d5, ~@14 d6 ~",
  Y: "[f6,f7]@4 [d6,d7]@4 [c6,c7]@2 d6@2 [f5,f6]@2 [g5,g6] ~, ~@10 d7 ~@5", Z: "[a5,a6]@2 [g5,g6]@2 [c6,c7] [a5,a6]@3",
  AA: "[[c6,c7]@3 [d6,d7]@4 [f6,f7]@4 [a6,a7]@4 ~]/2", AB: "[f6,f7]@7 ~", AC: "[e6,e7]@7 ~", AD: "[[d6,d7]@11 ~@5]/2",
  AE: "[[d6,d7]@15 ~]/2", AF: "[[d6,d7]@31 ~]/2", AG: "[e6,e7]@15 ~", AH: "[[f6,f7]@3 [d6,d7]@6 ~@5 [c5,c6] [d5,d6]]/2",
  AI: "[[a5,a6]@4 [g5,g6]@4 [c6,c7]@2 [a5,a6]@4 [f5,f6]@13 ~@5]/2", // A G C A F
  AJ: "[[f5,f6]@4 [d5,d6]@4 [c5,c6]@2 [d5,d6]@11 ~@7 [c6,c7]@2 d6@2, ~@30 d7 ~]/2", // F D C D C
  AK: "[f6,f7]@2 [d6,d7]@2 [c6,c7] d6 [f5,f6] g6, ~@10 d7 ~@3 g5 ~", // F D C F
  AL: "[[a5,a6]@2 [g5,g6]@2 [c6,c7] [a5,a6]@2 [f5,f6]@10 ~@5 [c6,c7] d6, ~@46 d7 ~]/3", // A G C A F C
  AM: "[[f5,f6]@4 [d5,d6]@4 [c5,c6]@2 [d5,d6]@9 ~@9 [c6,c7] ~ [d6,d7] ~]/2", // F D C D C D
  AN: "[f6,f7]@2 [d6,d7]@2 [c6,c7] d6 [f5,f6] g5, ~@10 d7 ~@3 g6 ~", // F D C F
  AO: "[[a5,a6]@4 [g5,g6]@4 [c6,c7]@2 [a5,a6]@4 [f5,f6]@27 ~@3 [c6,c7]@2 [d6,d7]@2]/3", // A G C A F C D
  AP: "[[f6,f7]@6 [d6,d7]@13 ~@9 [c6,c7]@2 [d6,d7]@2]/2", // F D C D
  AQ: "[[g6,g7]@4 [f6,f7]@4 [e6,e7]@2 [d6,d7]@11 ~@7 [c6,c7]@2 [d6,d7]@2]/2", // G F E D C D
  AR: "[f6,f7]@4 [d6,d7]@4 [c6,c7]@2 [d6,d7] ~ [f5,f6]@2 [g5,g6]@2", // F D C D F G
  AS: "[[a5,a6]@4 [g5,g6]@4 [c6,c7]@2 [a5,a6]@4 [f5,f6]@15 ~@3]/2", AT: "[d5,d6]@3 [a5,a6]@3 [g5,g6]@2",
  AU: "[f5,f6] ~", AV: "[d6,d7]@5 ~ [a6,a7]@6 [g6,g7]@3 ~", AW: "[f6,f7]", AX: "~@6 c6 d6, ~@12 c7 ~ d7 ~",
  AY: "[f6,f7]@5 ~ [d6,d7]@8 ~@2", AZ: "[g6,g7]@5 ~ [f6,f7]@6 [c6,c7]@3 ~",
  BA: "[[g6,g7]@5 ~ [f6,f7]@6 [c6,c7]@13 ~@7]/2", // G F C
})).s("gm_vibraphone").gain(0.4).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x ~@4]!165>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~ A@15 B A@31 B A@47 B A@68 ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<[x!4] [x!8]!164 [x ~@2 x ~@4]>").gain(0.25)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(1.27)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@6 x!2",
})).gain(1.27)

stack(
  bass, epiano2, piccolo, acoustic_guitar_steel, string_ensemble_1, overdriven_guitar, vibraphone, kick, snare, hihat,
  congas, congas_2
)

More by Mike + The Mechanics