Strudelify

We're All Alone

Boz Scaggs

KeyG majorTempo60 bpm
0:00/0:00
// We're All Alone — Boz Scaggs
// 60 bpm, 4/4, key G 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 7, 4/4 at bar 8, 2/4 at bar 15, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 63 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/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 · fretless bass · "bass-2"
const bass = note(`<
  ~@3 A B C D E F G H I J K L M N O P Q R S T U V W I J K L M N O P Q R S T X Y Z AA AB AC AD AE AF AG AH AI Q R S T X Y
  X Y Z AJ AK AL@2
>`.pickRestart({
  A: "~ g2", B: "b1 e2", C: "g1 c2", D: "b1 a#1", E: "a1@2 d2 c2", F: "b1@4 e2@3 b1", G: "a1!2", H: "d2 d1", I: "g2 b1",
  J: "e2 g1", K: "c2 b1", L: "a#1 a1", M: "d2 c2 b1@2", N: "e2@3 b1 a1@4", O: "a1 d2", P: "d1@2 g1!2", Q: "a1!2 b1!2",
  R: "b1@2 b1 d#2 e2@2 e2@2", S: "g1@2 a1 b1 c2@4", T: "b1!2 a#1!2", U: "a1!2 d2 e1", V: "g1 a1", W: "b1@4 a1@2 d1 d2",
  X: "a1!2 d2 c2", Y: "b1!2 e2!2", Z: "a1!4", AA: "d1 a1 d2 d1", AB: "g1!2 a1!2", AC: "b1@2 b1@2 b1@2 b1 d#2",
  AD: "e2@2 e2@2 g1@2 a1 b1", AE: "c2@2 b1!2", AF: "a#1!2 a1!2", AG: "d2 e1 g1@2", AH: "a1 b1",
  AI: "a1@2 d1 d2 g1@2 g1@2", AJ: "g1!2", AK: "~ b1@25 c2@9 f#1@3 f#1@10", AL: "[~ g1@25 ~@22]/2",
})).s("gm_fretless_bass").gain(0.37)

// chords · acoustic guitar nylon · "guit-3"
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F G H I J K@2 L M N O P@2 Q R S T U V W K@2 L M N O P@2 Q R S T X Y Z AA AB AC AD AE AF AG AH AI Q R S T X
  Y X AJ@2 AK AL AM@2
>`.pickRestart({
  A: "~@14 d3@3 g3@6 b3, ~@10 g2@7 ~@7, ~@21 a#3@25 ~@2, ~@22 d4@25 ~, ~@23 g4@25",
  B: "~ c4@3 ~ d4@3 e4@3 f4@6 g4@5 ~@7 g3@6 b3@12 ~, ~@22 b2@15 ~@11, ~@23 [c4,d4]@24 ~, ~ g4", // Csus2
  C: "b3 c4 d4 ~@3 b4@2 [b3,d4,g4]@2 d3@2 g3@2 d3@2, a2 e3 b3@2 ~@4, ~@3 a4@2 d#4@2 ~@9", // G
  D: "[e3,a3,b3]@2 c4 [d#3,a3,b3] a3 ~ a3 [e3,g3] e3@2 ~@2 [e3,g3]@3 b3, ~@4 d#3@2 ~ b2@3 b2@4 ~@2, ~@5 b3@2 ~ g3@4 ~@4", // Esus4 B7 Em
  E: "a3 ~@3 g4@2 f4@2 g3@2 e3@2 ~@2 e4@2, [b2,f3] ~@3, ~ g3@3 ~@4 c4@4 [g3,c4]@4, ~ [b3,d4]@2 ~ e4@3 ~", // Bdim C5 Bm
  F: "[g3,b3,d4]@2 f#4 [b3,d4,g4] [b3,d4,g4]@4 [g3,a#3,c#4]@2 c#4 [a#3,c#4,f#4] g4@2 g4@2, ~@3 [b3,c#4]", // G Gdim F# Bsus2
  G: "[e3,g3]@2 c3@2 [e3,g3]@2 g4@2 f#4@2 e4@2 [f3,a3,d4]@2 c4 [f3,a3,d4], c4@3 ~ [a3,c4]@2 ~@2", // Em Dm Am
  H: "[f3,a3]@2 d3@2 [f3,a3]@2 d3@2 [d3,g3]@2 b2@2 [d3,g3]@2 ~ b3, d4 ~", // F G5
  I: "b3 c4 c4@6 [e3,g3]@2 c3@2 [e3,g3]@2 ~ b3, [e3,g3] ~@3", // Em
  J: "b3 a3 b3@2 ~@2 c3@2 [e3,g3]@2 c3@2 [e3,g3]@2 c3@2, [c3,e3]@3 ~@5, ~ a3@3", // Em C
  K: "[[b3,d4,g4]@2 d3@2 g3@2 d3@2 [e3,a3,b3]@2 c4 [d#3,a3,b3] a3 ~ a3 [e3,g3] e3@2 ~@2 [e3,g3]@3 b3 a3 ~@3 g4@2 f4@2, ~@12 d#3@2 ~ b2@3 b2@4 ~@2 [b2,f3]@4 ~@4, ~@13 b3@2 ~ g3@4 ~@5 g3@3 ~@4, ~@13 [b3,d4]@2 ~]/2", // G Esus4 B7 Em Bdim Bm
  L: "g3@2 e3@2 ~@2 e4@2 [g3,b3,d4]@2 f#4 [b3,d4,g4] [b3,d4,g4]@4, e4@3 ~@5, c4 [g3,c4] ~@2", // G C5
  M: "[g3,a#3,c#4]@2 c#4 [a#3,c#4,f#4] g4@2 g4@2 [e3,g3]@2 c3@2 [e3,g3]@2 g4@2, ~@2 [b3,c#4]@2 c4@3 ~", // Gdim F# Em Bsus2
  N: "f#4@2 e4@2 [f3,a3,d4]@2 c4 [f3,a3,d4] [f3,a3]@2 d3@2 [f3,a3]@2 d3@2, [a3,c4] ~ d4@2", // Dm F Am
  O: "[d3,g3]@2 b2@2 [d3,g3]@2 ~ b3!2 c4 c4@6, ~@2 [e3,g3] ~", // G5 Em
  P: "[[e3,g3]@2 c3@2 [e3,g3]@2 ~ b3!2 a3 b3@2 ~@2 c3@2 [e3,g3]@2 c3@2 [e3,g3]@2 c3@2 [d3,g3,b3]@6 d4 [c4,e4,f#4], ~@4 [c3,e3]@3 ~@9, ~@3 a3@3 ~@2]/2", // Em G F#m7b5 C
  Q: "d4 f#4@2 g4@2 f#4@2 [g3,b3,g4] [g3,b3,d4]@6 g4@2, [c4,e4]@3 ~@5", // G C
  R: "f#4 f#4@2 [a3,d#4,g4] g4@2 f#4@2 e4@6 g4@2, [a3,d#4]@3 ~ [a3,d#4]@4 [g3,b3]@8", // Am7b5 Adim G
  S: "[b3,d4,f4]@6 g4@3 [b3,a4]@5 [b3,a4]@6 g4@4 [g3,c4]@12 [g3,c4]@12, ~@3 f4@5 e4@8", // Bdim B7 C5
  T: "d4 f#4@2 [b3,d4,g4] [b3,d4,g4]@4 c#4 f#4@2 [a#3,c#4,g4] g4@2 g4@2, [g3,b3]@3 ~@5 [g3,a#3]@3 ~ [a#3,c#4]@4", // G Gdim G Gm A#m
  U: "[e3,g3,c4]@8 g4@2 f#4@2 e4 f#4@2 [b3,d4,g4], ~@8 [a3,c4]@4 [a3,c4]@3 ~", V: "[b3,d4,g4]@8 b3 c4 d4 g4 g4@2 a4@2",
  W: "c4@4 b3@4 b3 c4 d4 g4 g4@2 a4@2, [d4,g4] ~", X: "[e3,g3,c4]@8 f#4@2 e4 d4 e4@2 e4@2, ~@2 [a3,c4] [f#3,a3]",
  Y: "e4 d4@2 a4 [b3,d4,g4]@4, [f#3,a3]@3 ~@5", Z: "[a3,c4,g4]@6 ~ e4", AA: "e4@3 d4@3 e4@6 d4@35 b3, [g3,c4]",
  AB: "[d3,g3,d4]@6 ~ [c4,e4,f#4] d4 f#4@2 g4@2 f#4@2 [g3,b3,g4], b3@23 ~ [c4,e4]@18 ~@6, ~@3 d4 ~@4", // G5 F#m7b5 G C
  AC: "[g3,b3,d4]@6 g4@2 f#4 f#4@2 [a3,d#4,g4] g4@2 f#4@2, ~@8 [a3,d#4]@3 ~ [a3,d#4]@4", // G Am7b5 Adim
  AD: "e4@18 g4@6 [b3,d4,f4]@6 g4@3 [b3,a4]@5 [b3,a4]@6 g4@4, [g3,b3]@8 ~@3 f4@5", // Bdim B7 G
  AE: "[g3,c4]@4 [g3,c4]@4 d4 f#4@2 [b3,d4,g4] [b3,d4,g4]@4, e4@8 [g3,b3]@3 ~@5", // C5 G
  AF: "c#4 f#4@2 [a#3,c#4,g4] g4@2 g4@2 [e3,g3,c4]@8, [g3,a#3]@3 ~ [a#3,c#4]@4 ~@8", // Gdim C Gm A#m
  AG: "g4@2 f#4@2 e4 f#4@2 [b3,d4,g4] [b3,d4,g4]@8, [a3,c4]@4 [a3,c4]@3 ~@9", // G Am
  AH: "b3 c4 d4 g4 g4@2 a4@2 c4@4 b3@4, ~ [d4,g4]", AI: "b3 c4 d4 g4 g4@2 a4@2 [d3,g3,b3]@6 d4 [c4,e4,f#4]",
  AJ: "[e4@2 d4@4 a4@2 [b3,d4,g4]@20 ~@3 e4, [f#3,a3]@3 ~@13]/2", // G F#m
  AK: "g2@6 d3@6 g3@12 b3@3 c4@3 ~ d4@3 g4@3 g4@6 a4@5, g4@24 a2@6 ~ d3@6 g3@11",
  AL: "~ b2@6 g3@6 b3@12 ~ [c3,e3]@3 [d3,f#3]@3 [e3,g3]@3 [f#3,a3]@3 [f#3,a3]@6 c4@4, c4@25 ~@23, ~ [d4,g4]@25 ~@22", // C D Em F#m G5
  AM: "[~@3 g4@50 ~@43, ~ b2@50 ~@45, ~ [d3,g3,b3,d4]@25 ~@22]/2", // G
})).s("gm_acoustic_guitar_nylon").gain(0.33).pan(0.4)

// chords · rock organ · "org-4"
const rock_organ = note(`<
  ~@3 A B@3 C D E@2 F G@8 H I J K L M N G@8 H I J O P Q R S T U V W X@4 H I J O P Y Z Q AA ~ AB@2
>`.pickRestart({
  A: "~@8 [g5,b5,d6]@7 ~", // G
  B: "[e6@12 d#6@12 ~ [g5,e6]@22 ~ [f5,g5,b5]@22 ~@3 e6@21 ~@2 d6@21 ~@2 [g5,a#5,c#6,e6]@24 ~, [f#5,a5,b5]@20 ~@4 b5@21 ~@2 d6@23 ~ g5@24 [g5,b5]@22 ~@27, ~@36 c6@11 ~@25]/3", // C G7 Gdim B7 G
  C: "[g5,a5,c6,e6]@21 ~@3 c6@19 ~@5, ~@23 [f#5,a5,d6]@21 ~@4", // Am7 D
  D: "[a5,b5,d6]@23 ~ [b5,d6,e6]@23 ~, f#5@19 ~@4 g5@23 ~@2", // Bm7 E7
  E: "[~ [g5,a5,c6,e6]@45 ~@2 d6@46 ~@2, ~@23 [f#5,a5]@23 ~@2, ~@47 c6@45 ~@4]/2", // Am7 F#m
  F: "[g5,b5,d6]@11 ~ e6@6 d#6@6, ~@6 [f#5,a5,b5]@5 ~", // G B7
  G: "[~ [g5,e6]@22 ~ [f5,g5,b5]@22 ~@3 e6@21 ~@2 d6@21 ~@2 [g5,a#5,c#6,e6]@24 ~ [g5,a5,c6,e6]@21 ~@3 c6@19 ~@5 [a5,b5,d6]@23 ~ [b5,d6,e6]@23 ~@2 [g5,a5,c6,e6]@45 ~@2 d6@46 ~@2 [g5,b5,d6]@22 ~ [g5,a5,c6,e6]@24 ~ [g5,b5,d6]@20 ~@4, b5@20 ~@3 d6@23 ~ g5@24 [g5,b5]@22 ~@50 [f#5,a5,d6]@21 ~@4 f#5@19 ~@4 g5@23 ~@48 [f#5,a5]@46 ~@76, ~@48 c6@22 ~@193 c6@45 ~@76]/8", // C G7 Gdim Am7 Bm7 E7 Am7 G …
  H: "[b5,d#6]@22 ~@2 [g5,b5,e6]@21 ~@3, [g5,a5]@3 ~@5", I: "[f5,g5,b5,d6]@23 ~@2 e6@20 ~@3, ~@6 [g5,c6]@5 ~",
  J: "[g5,b5,d6]@10 ~@2 [g5,a#5,c#6,e6]@11 ~", K: "[g5,a5,c6,e6]@21 ~@3 [f#5,a5,c6,d6]@19 ~@5",
  L: "[g5,b5,d6]@11 ~ [c6,e6]@12, ~@23 [g5,a5]@23 ~@2", M: "~ g5@20 ~@3 [c6,e6]@19 ~@5, [b5,d6]@22 ~ [g5,a5]@20 ~@5",
  N: "[g5,b5,d6]@7 ~ e6@4 d#6@4, ~@6 [f#5,a5,b5]@5 ~", O: "[g5,a5,c6,e6]@20 ~@4 [f#5,a5,c6,d6]@21 ~@3",
  P: "[f#5,a5,b5,d6]@21 ~@3 [g5,b5,d6,e6]@22 ~@2", Q: "[g5,a5,c6,e6]@43 ~@5",
  R: "[f#5,a5,c6,d6]@16 ~@2 [f#5,a5,c6,d6]@3 ~@3", S: "[g5,b5,d6] [g5,a5,c6,e6]",
  T: "[g5,b5,d6]@10 ~@2 [b5,d#6]@11 ~, ~@4 [g5,a5]@3 ~", U: "[g5,b5,e6]@21 ~@3 [f5,g5,b5,d6]@23 ~",
  V: "~ e6@20 ~@3 [g5,b5,d6]@20 ~@4, [g5,c6]@5 ~@7", W: "[g5,a#5,c#6,e6]@22 ~@2 [g5,a5,c6,e6]@21 ~@3",
  X: "[[f#5,a5,c6,d6]@19 ~@5 [g5,b5,d6]@22 ~@2 [c6,e6]@24 ~ g5@20 ~@3 [c6,e6]@19 ~@5 [g5,a5,c6,e6]@23 [g5,a5,c6,e6]@24 ~ [g5,b5,d6]@20 ~@4, ~@47 [g5,a5]@23 ~@2 [b5,d6]@22 ~ [g5,a5]@20 ~@77]/4", // D7 G C Am7 G Gsus2 Bm Gsus2
  Y: "[g5,a5,c6,e6]@25 [f#5,a5,c6,d6]@21 ~@2", Z: "~ [a5,b5]@18 ~@6 d6@22 ~, [f#5,d6]@21 ~@3 [g5,b5,e6]@22 ~@2",
  AA: "[g5,b5,d6]@11 ~", AB: "[~@3 [b5,d6]@50 ~@43, ~ g5@25 ~@22]/2",
})).s("gm_rock_organ").gain(0.14)

// other · string ensemble 1 · "string-5"
const string_ensemble_1 = note("<~@49 A@2 B C D E F@2 ~@6>".pickRestart({
  A: "[~@8 b4@6 d5 f#5@2 g5 f#5@3 g5@2 d5@7 g5@2]/2", B: "f#5 f#5@2 g5@3 f#5@2 e5@6 g5@2", C: "f5@2 g5 a5@3 g5@2 e5@8",
  D: "d5 f#5@2 g5@5 c#5 f#5@2 g5@3 g5@2", E: "c5@8 f#5@2 e5 d5 e5@2 e5@2", F: "[e5 d5@2 a5 g5@10 ~@2]/2",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.8)

// drums · rim
const rim = s("rim").struct("<[~@20 x ~@11 x ~@12 x ~@2] [~@3 x ~@12] ~@61>").gain(0.27)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B C@2 D C D C D C D B D B D B D B C D C D C D C D@2 B D B D B C D C D C D C D C D B D B D B D B C D C@2 D C D E
  F G H
>`.pickRestart({
  A: "~ x", B: "x ~@6 x!2 ~@7", C: "x ~@7 x ~@6 x", D: "x!2", E: "x ~@11 x ~@10 x", F: "~ x ~@24 x ~@21", G: "~ x ~@22",
  H: "~ x ~@10",
})).gain(0.27)

// drums · snare
const snare = s("sd").struct("<~@3 [~@3 x] [~ x ~ x]!55 [~@12 x ~@24 x ~@10] [~@13 x ~@24 x ~@9] [~ x ~@22] ~>")
  .gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@19 x!2 ~@27] ~@58 [~@2 x!2 ~@44]>").gain(0.27)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@62 [x!2 ~@22]>").gain(0.14)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ B C ~ C ~ C ~ C ~ B ~ B ~ B ~ B C ~ C ~ C ~ C ~ B ~ B ~ B ~ B C ~@2 C ~ C ~ C ~ B ~ B ~ B ~ B C ~@2 C ~ C ~@2
  D ~@2
>`.pickRestart({
  A: "~@5 x ~@10", B: "~@3 x ~@4", C: "~@7 x", D: "~@11 x",
})).gain(0.27)

// drums · crash
const crash = s("cr").struct("<~@3 [~ x] ~@57 [~ x ~@22] ~>").gain(0.21)

stack(
  bass, acoustic_guitar_nylon, rock_organ, string_ensemble_1, rim, kick, snare, low_tom, hihat, mid_tom, open_hat, crash
)

More by Boz Scaggs