Strudelify
Somewhere Tonight cover art

1986 · Fahrenheit

Somewhere Tonight

Toto

KeyB minorTempo133 bpm
0:00/0:00
// Somewhere Tonight — Toto
// 133 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 116 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 12 ms behind the beat; the grid follows it, so its parts stay together.
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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D@3 C E@3 C E@3 C F@3 G@2 H@2 I@2 J K L@2 M@2 J K N O P K J Q P K J Q P K J Q P K J R L@2 S@2 I@2 J K L@2 S@2 J
  K N T P K J Q P K J Q P K J Q P K J R C E@3 C E@3 C E@3 C F@3 P K J Q P K U V P K J Q P K J R N W
>`.pickRestart({
  A: "[e2,e3,g3,b3,d4] [f#2,f#3,a3,d4]", B: "f#4@12 [a2,a3,c#4,f#4,a4]@11 ~, [g2,g3,b3,d4]@7 ~@5",
  C: "g2@2 ~@2 g2@2 d3@2 ~@2 d3 ~ c#3@2 ~@2 c#3 ~ a2@3 ~ e2@2",
  D: "[~@18 [b3,d4]@2 ~@3 f#3@44 ~@5, ~@10 a3 ~@25, ~@21 [b3,d4]@46 ~@5]/3", // Bm
  E: "[~@9 [b3,d4] a3 ~ f#3@22 ~@2, ~@11 [b3,d4]@23 ~@2]/3", // Bm
  F: "[~@10 a3 ~ f#3@18 ~@6, ~@9 d4 ~@26, ~@19 b3@2 ~ [b3,d4]@37 ~@13]/3", G: "[[a3,b3,d4,f#4]@15 ~]/2",
  H: "[[a3,c#4,f#4]@43 ~@5]/2", I: "[[g3,b3,d4,f#4]@23 ~]/2", J: "[g3,b3,d4,f#4]@23 ~", K: "[a3,c#4,f#4]@23 ~",
  L: "[[a3,b3,d4,f#4]@47 ~]/2", M: "[[a3,c#4,f#4]@15 ~]/2", N: "~@3 b3 d4 e4 f#4 d4 e4 b3 d4 a3", O: "b3 ~@11",
  P: "[a3,b3,d4,f#4]@23 ~", Q: "[f#3,a3,d4]@11 ~ [e3,a3,c#4]@11 ~", R: "[f#3,a3,d4]@12 [e3,a3,c#4]@11 ~",
  S: "[[c#4,f#4]@47 ~, a3@15 ~]/2", T: "b3 ~@5 [a#3,e4,f#4,a4]@17 ~",
  U: "~@4 [d5,d6]@2 d#5 ~@3 [b4,b5]@2, [g3,b3,d4,f#4], ~@4 [b4,b5]@10 ~@2 [d5,d6]@7 ~, ~ [e5,e6]", // D B Gmaj7 B D E
  V: "f5 ~@2 f#6 f#5@2 f#6 ~ f#6 ~ f#6 ~ [e3,a3]@12, [f#3,a3,d4]@11 ~ c#4@10 ~@2, ~ f#6@2 ~ f#6 ~@19, ~@2 f#5@2 ~@2 f#5@4 ~ [f#5,f#6]@6 ~@7", // A5 D F#
  W: "~@5 [a4,b4,e5] ~@6", // Asus2
})).s("gm_piano").gain(0.41)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A B C D A B C D A B C D A E@3 F G H I J K L M F G N I J O P ~ Q R J S Q R J S Q R J S Q R J S F G H I J K L M F G
  N I J O P T Q R J S Q R J S Q R J S Q R J S A B U@2 A B C D A B C D V E@3 Q R J S Q R J S Q R J S Q R J S P W
>`.pickRestart({
  A: "g1@2 ~@2 g1 ~ d2@2 ~@2 d2 ~ c#2@2 ~@2 c#2 ~ a1@3 ~ e1@2", B: "~@22 a#1 ~", C: "b1@6 c#2@5 ~ d2@5 ~ e2@4 a#1 ~",
  D: "b1@2 c#2@2 d2@2 c#2 ~", E: "[~@18 b1@2 a1 ~ b1@32 ~@18]/3", F: "~@6 b1@3 ~ b1@2 d2@3 ~ d2@2 f#2@4 b2@2",
  G: "~@10 a1@2 b1@6 f#2@3 ~ f#2@2", H: "~@10 a1@2 c#2@5 ~ f#2@4 a2@2", I: "~@12 f#2@6 e2@2 d2 ~ b1 ~, ~@12 e2 ~@11",
  J: "e1@6 b1@6 e2@3 ~ e2@2 ~@6", K: "f1@6 e2@3 ~ e2@2 ~@12", L: "g1@5 ~ g1@5 ~ e2@5 ~ d2@6, ~@12 d#2 ~@11",
  M: "a1@4 ~@2 a1@5 ~ f#2@6 e2@3 ~@3", N: "~@2 a1 c#2@2 ~ a2@3 f#2@3", O: "~@6 a1@6 f#2@5 ~ d2@2 ~@4",
  P: "~@3 b1 d2 e2 f#2 d2 e2 b1 d2 a1", Q: "b1@3 d2@3 f#2@3 b2@2 ~", R: "~@4 a1@2 c#2@6 f#2@6 e2@2 d2@2 b1 ~",
  S: "d1@6 a1@5 ~ a1@6 e2@5 ~", T: "b1 ~@2 a1@9", U: "[b1@6 c#2@5 ~ d2@5 ~ e2@4 b1@6 ~@2 c#2@6 d2@6 c#2@3 ~@3]/2",
  V: "g1@2 ~@2 g1@2 d2@2 ~@2 d2 ~ c#2@3 ~ c#2@2 a1@4 e1@2", W: "~@5 b1 ~@6",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@3 A@3 ~ B@3 ~ B@3 ~ C@3 D E F@4 G H D E I@3 J ~@5 K ~@3 L ~@3 L ~@3 M N O P@2 Q@2 G H D R S@2 T J ~@5 K ~@3 U ~@3 L
  ~@3 M ~ V@3 ~ W@3 ~ W@3 ~ B@3 X ~ Y M Z ~ Y ~ Z ~ Y AA AB ~ Y M ~@2
>`.pickRestart({
  A: "[~@9 [b3,d4] [a3,c#4] [b3,d4]@16 ~@9]/3", B: "[~@18 [b3,d4]@2 [a3,c#4]@2 [b3,d4]@37 ~@13]/3",
  C: "[~@18 [f#3,b3]@2 [e3,a3]@2 [f#3,b3]@47 ~@3]/3", D: "[d4,f#4,b4]@10 [d4,f#4,b4] ~@13", E: "~ [d4,f#4,b4]",
  F: "[[c#4,f#4,a4]@47 ~ a4@6 g4@42, ~@47 [b3,d4]@48 ~]/4", G: "[a3,b3,d4,f#4]", H: "[a3,c#4,f#4]",
  I: "[~@8 a4 g4@3, [c#4,f#4,a4]@47 d4@25, ~@46 b3@25 ~]/3", J: "[a3,b3,d4,f#4]@11 ~",
  K: "~@4 [f#3,a3,d4]@10 ~@2 [e3,a3,c#4]@7 ~", L: "~@4 [f#3,a3,d4]@7 ~ [e3,a3,c#4]@11 ~",
  M: "[f#3,a3,d4]@6 [e3,a3,c#4]@5 ~", N: "[d4,f#4,b4]@8 ~@2 [d4,f#4,b4] ~@13", O: "~@2 [d4,f#4,b4]",
  P: "[c#4,f#4,a4]/2", Q: "[a4 g4@7, [b3,d4]]/2", R: "~@10 [d4,f#4,b4] ~@13",
  S: "[[c#4,f#4,a4]@34 [c#4,f#4,a4] ~@13]/2", T: "a4 g4@3, [b3,d4]", U: "~@12 [e3,a3,c#4]@11 ~",
  V: "[~@18 [b3,d4]@2 [a3,c#4]@2 [b3,d4]@47 ~@3]/3", W: "[~@9 [b3,d4] [a3,c#4] [b3,d4]@25]/3",
  X: "~@6 [d4,f#4,b4]@3 ~ [d4,f#4,b4] ~@13", Y: "[b3,d4,f#4]", Z: "~@6 [d4,f#4,b4]@3 ~ [d4,f#4,b4] ~@7 [d4,f#4,b4] ~@5",
  AA: "~@3 [f#3,a3,d4]@4 ~@2 [e3,a3,c#4]@2 ~", AB: "~@6 [d4,f#4,b4]@3 ~ [f#4,b4] ~@7 [d4,f#4,b4] ~@5",
})).s("gm_electric_guitar_clean").gain(0.15)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<~@4 A@2 ~@2 B C ~@2 B C ~@70 B C ~@2 B C ~@2 B C ~@22>".pickRestart({
  A: "[~@9 [d5,f#5]@2 ~ [e5,g5]@3 f#5@2 ~@4 [d5,f#5]@2 ~ g5@3 f#5@2 ~@4 [d5,f#5]@2 ~ [e5,g5]@3 [d5,f#5] ~@8, ~@15 d5 ~@7 e5@4 d5 ~@20]/2", // D Em D Em D
  B: "~@5 [d5,f#5] [e5,g5]@2 f#5 ~@2 [d5,f#5], ~@16 d5 ~@7", // D Em D
  C: "[e5,g5]@4 f#5@2 ~@4 [d5,f#5]@2 [e5,g5]@4 [d5,f#5] ~@7, ~@4 d5 ~@19", // Em D Em D
})).s("gm_lead_3_calliope").gain(0.21).pan(0.7)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@3 A@3 ~ B@3 ~ B@3 ~ C@3 D@4 E@2 F@2 G@4 H I ~@2 F@2 J K F@2 J K L@3 K L@3 K G@4 E@2 M@6 H N ~@2 L@3 K L@3 K L@3 K
  L@3 O ~@2 P@2 ~ Q@3 ~ Q@3 ~ B@3 R@4 S@3 K T@3 U@4 K ~@2
>`.pickRestart({
  A: "[~@22 [b3,d4,f#4]@47 ~@3]/3", B: "[~@22 [b3,d4,f#4]@49 ~]/3", C: "[~@11 [b3,d4,f#4]@16 ~@9]/3",
  D: "[[b3,d4] [a3,c#4], f#4@15 ~]/4", E: "[g3,b3]/2", F: "[[b3,d4] [a3,c#4], f#4]/2",
  G: "[[b3,d4] [a3,c#4], f#4@23 ~]/4", H: "[g3,b3]", I: "[a3,c#4,f#4]@23 ~", J: "[b3,d4,f#4]",
  K: "[f#3,a3,d4] [e3,a3,c#4]", L: "[[b3,d4] [a3,c#4] [b3,d4], f#4@11 ~]/3",
  M: "[[b3,d4] [a3,c#4] [b3,d4]@2 [a3,c#4]@2, f#4@47 ~]/6", N: "[a3,c#4,f#4]@5 ~", O: "[f#3,a3,d4]@12 [e3,a3,c#4]@11 ~",
  P: "[[b3,d4,f#4]@23 ~]/2", Q: "[~@23 [b3,d4,f#4]@48 ~]/3",
  R: "[~ [b3,d4]@22 ~ [a3,c#4]@24 d4@24 [f#3,a3,d4]@12 [e3,a3,c#4]@12, ~ f#4@65 ~@30, ~@4 b3@3 ~]/4", // Bm A D A
  S: "[[b3,d4]@23 ~ [a3,c#4]@24 [b3,d4]@24, f#4@67 ~@5]/3", T: "[[b3,d4]@23 ~ [a3,c#4]@23 ~ [b3,d4]@24, f#4@67 ~@5]/3",
  U: "[[f#3,a3,d4]@12 [e3,a3,c#4]@11 ~ b3@24 [a3,c#4]@24 [b3,d4]@24, ~@23 d4@25 ~@48, ~@4 f#4@11 ~]/4", // D A Bm
})).s("gm_synth_strings_1").gain(0.15)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@2 A B@2 ~ A B@2 ~ C B@2 ~ C ~@19 D E ~@2 F G ~@2 H I J ~ K L M ~@17 D E ~@2 F G ~@2 H I J ~ K L M ~ C ~@3 C ~@3 C
  ~@3 C ~@3 N O M P Q O J ~ Q K R ~ Q S Q ~@3
>`.pickRestart({
  A: "g2@2 ~ g2@2 d3@2 ~@2 d3@2 c#3@2 ~@2 c#3@2 ~ a2@4 e2@2", B: "[~@18 b2@2 a2@2 b2@9 ~@17]/2",
  C: "g2 ~ g2 d3 ~ d3 c#3 ~ c#3 a2@2 e2", D: "~@6 b3 ~@5 a3@4 b3 ~@5 a3 ~", E: "~@4 a3 ~ b3 ~@5 a3@3 ~ b3 ~@7",
  F: "~@4 e3 ~ b3@2 ~@5 a3@3 b3 ~@7", G: "~@4 e3 ~ b3 ~@3 e3 ~ a3 ~@3 a3 ~ d4@3 ~@3",
  H: "~@6 b3 ~@6 a3@2 ~ b3 ~@5 b3 ~", I: "~@6 b3 ~@5 a3 ~@3 b3 ~@7", J: "~@4 e3 ~ b3 ~@5 a3@3 ~ b3 ~@7",
  K: "~@6 b3@2 ~@4 a3@3 ~ b3 ~@5 b3 ~", L: "~@4 e3 ~ b3 ~@3 e3 ~ b3@2 ~@4 d4@4 b3 ~", M: "~@6 b3 ~@5 a3@3 ~ b3 ~@7",
  N: "~@4 e3 ~ b3@2 ~@4 a3@3 ~ b3 ~@5 b3 ~", O: "~@4 e3 ~ a3@2 ~@2 e3 ~ b3@2 ~@4 d4@3 ~ b3 ~",
  P: "~@16 e3 ~ a3@3 ~ b3 ~", Q: "~@4 e3 ~ b3 ~@3 e3 ~ a3@3 ~ b3 ~@5 b3 ~", R: "~@4 e3 ~ d4@5 ~ b3@3 ~@3 a3@3 ~ b3 ~",
  S: "~@4 e3 ~ a3 ~@3 e3 ~ b3@2 ~@4 d4@4 b3 ~",
})).s("gm_electric_guitar_muted").gain(0.38).pan(0.3)

// other · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@34 A ~@7 A@2 B ~@3 C ~@17 A ~@7 A@2 B ~@3 C ~@18 D E ~@2 D F ~@2 G D ~@2 D ~@4
>`.pickRestart({
  A: "~@4 a3 ~@19", B: "~@11 e3 ~@12", C: "~@4 e3 ~@6 e3 ~@12", D: "~@16 e3 ~@7", E: "~@4 e3 ~@5 e3 ~@13",
  F: "~@10 e3 ~@13", G: "~@4 e3 ~@3 a3 ~ e3 ~@13",
})).s("gm_electric_guitar_muted").gain(0.21).pan(0.3)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@34 A B C D A B C D A B C D A B C E ~@16 A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "[d6,f#6,b6]", B: "[c#6,e6,a6]", C: "[b4,d5,f#5]", D: "[f#4,a4,d5] [e4,a4,c#5]",
  E: "[f#4,a4,d5]@6 [e4,a4,c#5]@5 ~", // D A
})).s("gm_rock_organ").gain(0.11).pan(0.9)

// other · piano · "A.PIANO 1"
const piano_2 = note("<~@32 A B ~@30 A C ~@48 A D>".pickRestart({
  A: "~@3 [b2,b3] [d3,d4] [e3,e4] [f#3,f#4] [d3,d4] [e3,e4] [b2,b3] [d3,d4] [a2,a3]", B: "[b2,b3] ~@7",
  C: "[b2,b3]@3 ~@3 [e4,a4]@16 ~@2", D: "~@10 [b2,b3,b4]@3 ~@11",
})).s("gm_piano").gain(0.19)

// chords · piano · "A.PIANO 1" · Bm D5 Bm F#m
const piano_3 = note("<[[b3,d4] [a3,d4]] [[b3,d4,f#4]@12 [a3,c#4,f#4,a4]@11 ~] ~@114>").s("gm_piano").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@2 A@13 B ~@2 A@14 ~@2 A@16 C A@13 ~ D A@29 B ~@2 A@16 ~@2>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "~ x!3", D: "~ x ~@4",
})).gain(0.54)

// drums · rim
const rim = s("rim").struct("<~@2 A@13 ~@3 A@14 ~ B ~@16 A@14 ~@18 A@13 ~@21>".pickRestart({
  A: "~ x", B: "~@2 x!2 ~@8",
})).gain(0.54)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@72 [~@11 x] [~@4 x!2 ~@2 x ~@15] ~@30 [~@11 x] [~@4 x!2 ~@2 x ~@15] ~@10>")
  .gain(0.05)

// drums · low tom
const low_tom = s("lt").struct("<~@32 [~@3 x ~ x ~@3 x ~@2] ~@31 [~@3 x ~ x ~@3 x ~@2] ~@49 [~@3 x ~ x ~@3 x ~@2] ~>")
  .gain(0.54)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B A@3 B A@3 B A@3 ~@3 A B A B A B A B A B A B A@2 C ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A@2 C ~ A@3 B A B A@3 B A B A B A@3 B A@3 B A@3 D A@3 ~@3 A@3 B A B A@3 B A B A B A@2 C ~
>`.pickRestart({
  A: "~@3 x ~@2 x ~@2 x ~ x", B: "~ x ~ x ~ x ~ x ~@3 x", C: "x", D: "~ x ~@3 x ~ x ~@3 x",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C D C@3 D C@3 D C@3 E ~@2 C D C D C D C D C D C D C@2 ~@2 C D C D C D C D C D C D C D C D F D C D C D C D C D C D
  C@2 ~@2 C@3 D C D C@3 D C D C D C@3 D C@3 D C@3 G C@3 E ~@2 C@3 D C D C@3 D C D C D C@2 ~@2
>`.pickRestart({
  A: "~@5 x ~@12 x ~@5", B: "~@6 x ~@10 x ~@6", C: "x ~ x ~@2 x ~@2 x ~@3", D: "x ~@2 x", E: "x!2 ~ x ~ x ~@6",
  F: "~@2 x ~@2 x ~@2 x ~@3", G: "x!2 ~ x",
})).gain(0.27)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A B ~@14 C B ~@30 C D ~@30 A ~@17 C ~>".pickRestart({
  A: "~@23 x", B: "~@11 x ~@12", C: "~@6 x ~@4 x", D: "~@8 x!2 ~@2",
})).gain(0.32)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@16 [~@21 x!2 ~] [~@9 x!2 ~@13] ~@15 [~@9 x!2 ~@13] ~@62 [~@21 x!2 ~] ~@19>")
  .gain(0.16)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~@3 A ~@3 A ~@3 B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 B ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@11 x", B: "~@6 x ~@4 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@17 A ~@14 B C ~@30 B D ~@31 E ~@16 B ~>".pickRestart({
  A: "x ~ x ~ x ~ x ~@5 x!2 ~ x ~ x ~@6", B: "~@4 x!2", C: "~@6 x!4 ~@2", D: "~@6 x!2 ~@4", E: "x!3 ~@3 x ~",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@11 A ~@3 B ~@26 C ~@22 D ~@7 B ~@21 B ~ E ~@3 B ~@3 B ~@2 F B ~@3 B ~ G>".pickRestart({
  A: "~ x", B: "~@11 x", C: "x", D: "~ x ~@2", E: "~@3 x", F: "~@8 x ~@2 x", G: "~@5 x ~@6",
})).gain(0.43)

// drums · ride
const ride = s("rd").struct("<[x ~@11 x ~@8 x ~ x] [x!2] ~@9 [~ x] ~@104>").gain(0.54)

// drums · congas
const congas = s("conga:13").struct(`<
// … 48 more lines

More by Toto