Strudelify
Somewhere Other Than the Night cover art

1992 · The Chase

Somewhere Other Than the Night

Brooks Garth

KeyD majorTempo71 bpm
0:00/0:00
// Somewhere Other Than the Night — Brooks Garth
// 71 bpm, 4/4, key D 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, 2/4 at bar 6, 4/4 at bar 6) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 60 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(71/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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "Bass Gt"
const bass = note(`<
  ~ A@5 ~@7 B C@2 D E F G H I J K L M N O P Q ~ R S T U V W X F G Y I J K L M N O P Z AA O AB AC AD AE AF AG@2 ~
>`.pickRestart({
  A: "[~@15 d3@33 b2@32 d3@24 ~@4 e3@2 d3@2 ~ a2@33 ~@14, ~@107 f#3@2 ~@51]/5", B: "~@7 a2",
  C: "[d2@15 ~ f#2@15 ~@13 d3@4 g2@12 ~@4, ~@31 g2@16 ~@17]/2", D: "d3@15 ~ d3@13 ~@3", E: "a2@3 e3 a2@2 a#2@2",
  F: "b2@12 ~@4 a2@13 ~@3", G: "g2@5 ~ g2 ~ g2@4 ~@4", H: "d2@7 ~ d2@6 ~@2", I: "a1@3 ~@9 a1@4 a1@4 ~@12",
  J: "a1@3 ~@29", K: "g2@2 ~ g2 a2@2 ~ a2", L: "d2@3 ~ d2@2 f#2@2", M: "g2@3 g2 a2@3 a2", N: "d2 ~ d3 c#3",
  O: "b2@2 ~ b2 a2@3 a2", P: "g#2@2 ~ g#2 g2@2 f#2@2", Q: "e2@2 ~ e2 a2@3 ~", R: "b2",
  S: "d3@12 ~@2 e3 d3, ~@27 f#3@2 ~@3", T: "~ a2@31", U: "b2@13 ~@2 g2@13 ~@4", V: "d3@9 ~@3 d3@2 ~@2 d3@10 ~@6",
  W: "f#2@3 ~ b2@2 a2@2", X: "g2@9 ~@3 d2@2 ~@2 g2@11 ~@5", Y: "e2@10 ~@2 e2@2 ~@2 e2@11 ~@5", Z: "e2@2 ~ e2 a2@2 ~ a2",
  AA: "d3@3 a2 d3@2 c#3@2", AB: "g#2 ~@3", AC: "~@4 e2@2 ~ e2", AD: "a2@12 ~@4 c3@9 ~@3 c3@2 ~@2",
  AE: "c3@3 ~ c3@3 ~ b2@4 ~@2 b2 ~", AF: "b2@5 ~@3 b2@5 ~@3 a2@8 ~@4 a2@3 ~", AG: "[~ a2@6 ~@3 a2@5 ~@4 d2@36 ~@9]/2",
})).s("gm_acoustic_bass").gain(0.12)

// chords · acoustic guitar steel · "Accoustic Gt"
const acoustic_guitar_steel = note(`<
  ~ A@2 ~@3 B C D E F G H I J K L M ~ N ~@4 O ~@5 P ~@13 O ~@5 Q ~@3 R@2 S@2 ~@2
>`.pickRestart({
  A: "[~@5 f#4 ~@2, ~ d3@2 ~, ~@5 a3@7 ~@4, ~@3 d4@3 ~@2, ~@2 e4 ~]/2", B: "~ b3 ~ g3, b2@8 g2@7 ~, ~ f#3@3 ~ d3@3",
  C: "~@4 e4 f#4 ~@2 a3@5 ~@3, a2@4 ~ e4@8 ~@3, ~@2 a3@4 d4@7 ~@3",
  D: "~ c#3 f#3 a3 [f#3,f#4] [d3,d4] [b2,b3] d4, f#2 ~", E: "g3@3 ~@13",
  F: "~@3 f#4 ~@2 d4 f#4, a3 b2, ~ d4@3 ~ a3@3, ~ e4 ~@2", G: "~@2 g3 ~ g4@3 ~, g2@3 ~, ~ d3@5 ~@2, ~@3 b3@3 ~@2",
  H: "~@2 b3 ~@3 g3@2, b2 g2, ~ f#3@3 ~ d3@3, ~@3 d4@2 ~@3", I: "a2 e3 ~@6",
  J: "~@3 d4 ~@2 f#4 d4, d3@4 ~ a3@3, ~ a3@3 f#3@4, ~ f#4 ~@2",
  K: "~@5 d4 ~ g3, d3@7 ~, ~ g3@6 ~, ~@2 b3@2 g4@3 ~, ~@3 d4@2 ~ b3@2",
  L: "~@2 f#4 d4 ~@2 f#4 d4, d3 ~ d3@2, ~ f#3@3 ~ f#3@3", M: "~@2 d4 e4 c#4@2 ~@2, a2 ~, ~ d3@3 ~@4",
  N: "~@4 d4@4 b3@4 ~@3 g3@9 ~@8, g3@12 a3@13 ~@7", O: "~@4 a4@4 f#4@4 ~@4 a3@11 ~@5, ~@12 d4@11 ~@9",
  P: "~@3 f#4, d3, ~ a3@7, ~ d4@3, ~ e4", Q: "d3", R: "[~@16 [g2,c3,e3,g3]@21 ~@10 [d2,f#2,d3,f#3]@14 ~@3]/2",
  S: "[~@16 [c#2,a2,c#3,e3]@25 ~@23]/2", // A
})).s("gm_acoustic_guitar_steel").gain(0.06)

// chords · acoustic guitar nylon · "Nylon-str. Gt"
const acoustic_guitar_nylon = note("<~@2 A@2 ~@16 B C@2 ~@7 D E F ~@7 G ~@19>".pickRestart({
  A: "[~@10 a3@2 f#3@2 d3@2 ~@8 g3@15 ~ g3@2 f#3@2 e3@2 d3@2 a2@15 ~, ~@8 b2@11 ~@13, ~@20 d3@19 ~@25]/2",
  B: "~ d4 f#4 d4 ~ d4 e4 d4, a3@7 ~ a3@6 ~@2",
  C: "[~@4 d4@2 ~@2 d4@4 e4@4 d4@4 e4@4 d4@4 e4@3 ~ e4@4 ~@28, a3@35 ~@29]/2", D: "~@13 a3 f#3 d3",
  E: "~@8 g3@15 ~ g3@2 f#3@2 e3@2 d3@2, b2@11 ~@5, ~@4 d3@19 ~@9", F: "a2@15 ~@17", G: "a3@7 ~@9",
})).s("gm_acoustic_guitar_nylon").gain(0.05)

// other · piano
const piano = note(`<
  ~@3 A B@2 C ~@2 D ~@3 E ~@3 F G H ~ I J K L K M N O P ~@2 Q R@2 ~@2 S T H ~ I J K L K M N U V ~ N W ~ X@2 Y Z@3
>`.pickRestart({
  A: "~@3 [d4,f#4]", B: "[[e4,g4]@4 [f#4,a4]@4 ~@8 e4@8 ~@6 d5 c#5, ~@5 a3@7 ~@4, ~@25 b3@24 ~@15, ~@7 d4@5 ~@4]/2",
  C: "b4@9 ~@23", D: "~@4 d3 f#3 g3 c4 b3@8", E: "~@2 d4 [e4,a4] [c#4,e4]@3 ~", F: "~@2 c#4 e4", G: "b3@7 ~ a3@7 ~",
  H: "g3@5 ~@3", I: "[a1,a2]@10 ~@2 [a1,a2]@2 ~@2 [a1,a2]@3 ~ [a1,a2]@2 ~@2 [a1,a2]@2 ~@2 [a1,a2]@2 ~@2",
  J: "[a1,a2]@3 ~@29", K: "g2@5 ~ g2@2 a2@5 ~ a2@2", L: "d2@9 ~@3 d2@4 f#2@8 a2@8", M: "d2@12 a1@3 ~ d2@7 c#2@8 ~",
  N: "b2@12 b2@4 a2@10 ~@2 a2@3 ~", O: "g#2@5 ~ g#2@2 g2@4 f#2@4", P: "e2@4 a2@3 ~", Q: "~@9 f#4@7 g4@8 a4@8",
  R: "[~@2 a4@3 ~@3, ~ a3@9 ~@6, ~ d4@4 ~@3, ~@3 e4@7 ~@6]/2", S: "~@4 d3 ~ g3 c4 b3@7 ~, ~@5 e3@5 ~@6",
  T: "~@8 a3@7 ~", U: "g#2@10 ~@2 g#2@4 [g2,g3]@7 ~ f#2@3 ~ g2@4, ~@23 f#3@4 g3@5", V: "[e2,e3]@5 ~@3 a2@6 ~@2",
  W: "g#2@5 ~ g#2@2 ~@8",
  X: "[a2@12 ~@4 g2@8 ~@4 g2@3 ~@8 f#5@8 ~ d5@6 ~ d5@5 f#2@2 ~@2, ~@24 d5@7 e5@9 ~@24, ~@32 g2@15 f#2@11 ~@6]/2",
  Y: "e5@2 f#5@2 [e2,d5]@2 g3 f#3, f#2@7 ~@5 b5@4, ~@14 e2 ~", // E7
  Z: "[~ [e2,e3,g5]@9 [c#2,c#3,e5]@9 d2@49 ~@28, ~@19 d3@37 ~@40, ~@19 d5@16 ~@61]/3", // Em C#m
})).s("gm_piano").gain(0.16)

// other · string ensemble 2 · "Sl Strings"
const string_ensemble_2 = note("<~ A@4 ~@26 B C@2 ~@26>".pickRestart({
  A: "[~@8 a5@28 g5@4 f#5@21 ~@3]/4", B: "~@3 g5", C: "[f#5@21 ~@11]/2",
})).s("gm_string_ensemble_2").gain(0.09)

// other · violin
const violin = note("<~@4 A@2 ~@26 B@3 ~@25>".pickRestart({
  A: "[~ g4@24 ~@7]/2", B: "[~@3 g4@8 ~@5]/3",
})).s("gm_violin").gain(0)

// other · string ensemble 1 · "Strings 1"
const string_ensemble_1 = note("<~@22 A ~ B C@4 ~ D@4 E@2 F@2 G H@3 I ~ B C@4 ~@3 J@2 K@5 ~>".pickRestart({
  A: "a5", B: "f#5", C: "[[b4,g5] a4 d5@5 ~, ~ a5@2 ~@5]/4", D: "[a5@56 g5@7 f#5@45 ~@20]/4",
  E: "[f#4@16 g4@15 a4@32 ~]/2", F: "[[f#2,c#4]@15 [b2,f#4]@8 ~ a2@7 ~ g2@32, ~@23 e4@8 d4@27 ~@6]/2",
  G: "[d2,d4]@15 ~ f#2@16, ~@15 f#4@16 ~", H: "[g4@24 f#4@7 e4@17 g4@15 a4@14 ~@2 a4@5 c#5@3 e5@4 g5@4 a5, g2 ~@2]/3",
  I: "a5 a5@3", J: "[~ [g3,b3]@2 g4]/2", K: "[a4@15 ~ a5@135 ~@9]/5",
})).s("gm_string_ensemble_1").gain(0.06)

// other · string ensemble 1 · "Strings 2"
const string_ensemble_1_2 = note("<~@23 A B C@2 ~ D E ~@13 F G H@2 ~ D I J K L@2 M@5 ~>".pickRestart({
  A: "~ d6@15 c#6@16", B: "f#5@2 f#4 a4", C: "[g4 a4@3]/2", D: "~@2 b4 a4", E: "g4@16 a4@15 ~", F: "[g4,g5] [a4,a5]",
  G: "f#4@23 ~ a4@8, f#5", H: "[[g4,g5] [a4,a5]@3]/2", I: "g4@8 f#4@4 g4@4 a4@15 ~",
  J: "d5@6 ~@2 d5@4 e5@4 f#5@7 e5@8 ~", K: "~@4 d5@4 c#5@4 d5@5 ~@3 d5@4 c#5@4 d5@4",
  L: "[~@20 g3@4 f#3@4 g3@4 d4@15 ~@5 g3@4 f#3@3 g3@5, b4@21 ~@11]/2", M: "[d4@3 a4@27 ~@2]/5",
})).s("gm_string_ensemble_1").gain(0.12)

// other · pad new age · "Fantasia"
const pad_new_age = note("<~@3 A B C ~@26 D E ~@20 F@3 G@2 ~>".pickRestart({
  A: "~@3 d5", B: "e5@2 f#5@2 ~ a4 b4 d5, ~@2 a5 ~", C: "e5@17 ~@15", D: "~ d5 e5 f#5", E: "~ a4 b4 d5 e5@4, a5 ~@3",
  F: "[~@16 a4@31 ~ a4@31 ~ g4@16]/3", G: "[~ e4@9 c#4@9 d4@39 ~@6]/2",
})).s("gm_pad_new_age").gain(0.06)

// drums · kick
const kick = s("bd").struct("<~@14 A ~@5 B C D B@7 ~@4 A ~@5 B E D B@9 D ~ A B@2 F ~@2>".pickRestart({
  A: "~ x", B: "x!2", C: "x ~@2 x!2 ~@2 x", D: "x", E: "x!8", F: "~ x ~@18 x ~@11",
})).gain(0.12)

// drums · rim
const rim = s("rim").struct("<~@15 A ~ A B@4 ~@13 A ~ A B@4 ~@18>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.12)

// drums · snare
const snare = s("sd").struct("<~@22 A B@7 ~@11 B C B@9 D ~ E B@2 F ~@2>".pickRestart({
  A: "x", B: "~ x ~ x", C: "x ~@7 x!2 ~@6", D: "~ x ~@2", E: "~@3 x", F: "~@5 x ~@4 x ~@5",
})).gain(0.12)

// drums · low tom
const low_tom = s("lt").struct("<~@46 A ~@3 B ~@3 C ~@2 D ~@2>".pickRestart({
  A: "~@5 x ~ x", B: "~@3 x", C: "~@13 x ~ x ~@16", D: "~@9 x ~@4 x ~@17",
})).gain(0.12)

// drums · hihat
const hihat = s("hh").struct("<A B ~@12 C D@7 E D@7 ~@4 C D@7 E D@8 C F G H I@2 J ~@2>".pickRestart({
  A: "~@17 x ~@6 x ~@7", B: "x!2 ~@2", C: "~ x!7", D: "x!8", E: "x", F: "~@4 x ~@3 x ~@3 x ~@3 x ~@6 x ~@7 x",
  G: "~@2 x ~@3 x!2", H: "x ~@3 x!2 ~ x", I: "x!2 ~ x!3 ~ x", J: "~ x ~@4 x ~@8 x ~@16",
})).gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A B ~@18 A C B ~@2 D ~@2 E F ~@3 G ~@2 H ~@2>".pickRestart({
  A: "~@16 x ~@2 x ~@3 x ~@3 x ~@4", B: "x", C: "x ~@25 x ~@2 x ~ x", D: "~@3 x ~@4", E: "~@13 x!2 ~", F: "~@3 x!3 ~@2",
  G: "~@3 x ~ x!2 ~@9", H: "~@5 x ~@26",
})).gain(0.12)

// drums · open hat
const open_hat = s("oh").struct("<~@54 [~@3 x] [~ x ~ x]!2 [~@5 x ~@10] ~@2>").gain(0.12)

// drums · high tom
const high_tom = s("ht").struct("<~@42 [~@25 x ~ x ~@2 x ~] ~@6 [~@3 x] ~@4 [~ x ~@2] ~@5>").gain(0.12)

// drums · crash
const crash = s("cr").struct("<~@22 A ~ B A ~@16 A C B A ~@7 D E D F G ~@2>".pickRestart({
  A: "x", B: "~@2 x!2", C: "~ x ~@30", D: "~ x", E: "x!2", F: "~@3 x!2 ~@3", G: "x ~@18 x ~@12",
})).gain(0.12)

// drums · ride
const ride = s("rd").struct("<~@21 A ~ B@2 C B@3 D ~@11 A ~ B@2 C B@3 D ~ E F ~ A G H I ~@2>".pickRestart({
  A: "~@16 x ~@7 x ~@6 x", B: "x!4", C: "x ~@7 x ~@6 x ~@8 x ~@7", D: "x ~@7 x ~@7 x ~@14 x", E: "~ x!3", F: "x!2 ~@2",
  G: "~@8 x ~@6 x ~@8 x ~@3 x ~@3", H: "x ~ x ~ x ~ x!2", I: "~ x ~@8 x ~@8 x ~@12",
})).gain(0.12)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_nylon, piano, string_ensemble_2, violin, string_ensemble_1,
  string_ensemble_1_2, pad_new_age, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride
)

More by Brooks Garth