Strudelify
Living Next Door To Alice cover art

Collections

Living Next Door To Alice

Smokie

KeyA majorTempo124 bpm
0:00/0:00
// Living Next Door To Alice — Smokie
// 124 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · "FRETLESS"
const bass = note(`<
  ~@20 A@2 B C D E F G H@2 B C I J F G K A L C M E F N K A L C M E F N A@2 B C D E F G H@2 B C I J F G K A L C M E F N K
  A L C O@2 P A@2 B C D E F G H@2 B C I J Q R S T@3 U@2 ~
>`.pickRestart({
  A: "a2@5 ~ a2@2 e2@4 a2@2 e2@2", B: "d2@4 ~@2 d2 ~ a1@4 d2 ~ a1@2", C: "d2@5 ~ d2 ~ a1@3 ~ d2 ~ d#2@2",
  D: "e2@4 ~@2 e2@2 b1@3 ~ e2@2 b1 ~", E: "e2@5 ~ e2 ~ b1@3 ~ e2 ~ g#2@2", F: "a2@4 ~@2 a2@2 e2@3 ~ a2@2 b1 ~",
  G: "e2 ~ e2@2 d2@4 c#2@4 b1@3 ~", H: "a1@5 ~ a2@2 e2@4 a2@2 e2@2", I: "e2@4 ~@2 e2@2 b1@3 ~ e2@2 d#2 ~",
  J: "d2@5 ~ d2 ~ a1@3 ~ d2 ~ f#2@2", K: "a2@5 ~ a2@2 e2@4 ~@2 e2@2", L: "d2@4 ~@2 d2 ~ a1@4 ~@2 a1@2",
  M: "e2@4 ~@2 e2@2 b1@3 ~@3 b1 ~", N: "e2@2 e2@2 d2@4 c#2@4 b1@3 ~", O: "e2/2", P: "~ e2 f#2 g#2",
  Q: "a2@4 ~@2 a2@2 e2@3 ~ a2@2 a1 ~", R: "a2@4 ~@2 a2@2 e2@3 ~ a1@4", S: "e2", T: "[~@2 d2@19 ~ a2@25 ~]/3",
  U: "[~ a1@31]/2",
})).s("gm_fretless_bass").gain(0.38)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@67 A@6 B@2 C@7 D ~@15 E@5 F@3>".pickRestart({
  A: "[e3@2 f#3@2 g#3@2 a3@2 b3@2 c#4@2 d4@2 ~@2 [c#4,e4]@17 ~@7 f#4@4 e4@3 ~ [d4,f#4]@16 ~@8 b4@4 ~@4 [e4,g#4]@16, ~@15 [e3,a3]@18 ~@7 c#4@7 [f#3,a3]@18 ~@7 f#4@7 b3@15 ~@2, ~@19 a4 ~@4, ~@39 g#3@7 ~@2]/6", // C#m D E A5 F#m
  B: "[~@8 c#5@4 b4@3 ~ [c#4,a4]@11 ~@3 g#3@2, ~@8 g#4@7 [a3,e4]@12 ~@5]/2", // F#m A5
  C: "[e3@2 f#3@2 g#3@2 a3@2 b3@2 c#4@2 d4@2 ~@3 e4@17 ~@4 a3 ~ [c#4,f#4]@4 e4 ~@4 f#4@20 ~@3 b4@4 ~@4 g#4@30 ~@2, ~@15 e3@19 ~@12 f#3@18 ~@14 g#3@32 ~@2, ~@16 [a3,c#4]@19 ~@13 d4@20 ~@4 f#4@7 [b3,e4]@31 ~@2, ~@48 a3@17 ~@11 a4@4 ~@32]/7", // F#5 A E5
  D: "~ e3 f#3 g#3",
  E: "[~@17 e4@17 ~ d4@9 ~@17 c#5@2 b4@2 ~ a4@2 b4@2 a4 ~@3 f#4@3 e4 ~@2, ~@15 g#3@19 a3@17 ~@9 b4@2 ~@11 a4@5 ~@2, ~@16 b3@18 ~@26 e5@5 ~ d5@4 ~@3 e4@2 ~@5]/5",
  F: "[~@3 a4@14 ~@7, ~ e4@32 ~@15, ~ b4@5 ~@42, ~ e5@16 ~@7]/3",
})).s("gm_acoustic_guitar_steel").gain(0.33)

// chords · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note("<~@79 A ~@18 B@4 ~ C@3>".pickRestart({
  A: "~@6 d4 ~@9", B: "[~@15 e3@18 ~@14 c#4@4 ~@13, ~@33 [d3,f#3]@19 ~@12]/4", C: "[~@3 c#5@14 ~@7]/3",
})).s("gm_acoustic_guitar_steel").gain(0.16)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@20 A@4 B@2 C@2 A@4 D E C@2 ~@16 A@4 B@2 C@2 A@4 D E C@2 ~@15 A@4 B@2 C@2 A@4 D E F@2 ~@7
>`.pickRestart({
  A: "[[c#4,e4] [d4,f#4], a3@63 ~]/4", B: "[[b3,g#4], e4@15 ~]/2", C: "[[a3,c#4] [g#3,b3], e4]/2", D: "[b3,e4,g#4]",
  E: "[a3,d4,f#4]", F: "[a3,c#4,e4]/2",
})).s("gm_pad_warm").gain(0.12)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A@4 B@2 C@2 D@2 E ~@2 F C@2 D@2 E ~@7 G H I@2 J@2 K L M N O@2 P Q@3 R S ~ T U V W@3 ~@7 G H X@2 J@2 K L M N ~@8 Y@2
  Z@4 AA AB@2 AC@2 AD@2 AE@2 I@2 J@2 K L AF@2 AG@7
>`.pickRestart({
  A: "[a4@29 ~@3]/4", B: "[a4@5 f#4 e4 d4]/2", C: "[d4@5 ~@3]/2", D: "[e4@19 d4@4 c#4@5 b3@4]/2", E: "a3@15 ~",
  F: "~ f#4 e4 d4", G: "~@8 [a3,a4]@7 ~", H: "[b3,b4] [e3,e4]", I: "[c#5@31 ~, e4 ~@31]/2",
  J: "[[f#4,d5]@19 ~ [f4,c#5]@4 [f#4,d5]@4 [g4,d#5]@4]/2", K: "[g#4,e5]", L: "d5@8 c#5@7 ~, f#4",
  M: "[d4,b4] [c#4,a4]@7", N: "b4@3 ~", O: "[c#6@2 a5@4 b5 c#6]/2", P: "a5 f#5", Q: "[d6@14 ~ b5@8 g#5@17 a5@4 b5@4]/3",
  R: "e6@7 ~", S: "~ [g#3,e4] [a3,f#4] [g#3,e4]", T: "~@7 [b3,g#4]@4 [c#4,a4]@5", U: "[a3,f#4]@7 ~",
  V: "~@2 d3@5 c#3@4 ~ b2@4", W: "[e3@18 ~ d3@5 c#3@4 b2@3 a2@15 ~@2]/3", X: "[[e4,c#5]@31 ~]/2", Y: "c#6/2",
  Z: "[d6@31 e6@23 ~@10]/4",
  AA: "~@4 [g#3,e4] [a3,f#4] [b3,g#4] [c#4,a4] [d4,b4] [e4,c#5] [f#4,d5] [g#4,e5] [a4,f#5] [b4,g#5] [c#5,a5] [d5,b5]", // C#m D E F#m G C#m D C#m …
  AB: "[e5@20 [a5,c#6]@4 ~ d6@3 [c#6,e6]@4, c#6@19 ~@5 b5@4 ~@4]/2", AC: "[a5@15 d5@16 ~, f#5]/2",
  AD: "[[e5,g#5]@31 ~]/2", AE: "[[c#5,e5]@8 b5@4 a5@3 ~@9 [e3,e4]@8, ~@8 [a3,a4]@7 c#6@5 b5@12, ~@2 [b3,b4] ~]/2",
  AF: "[[d4,b4] [c#4,a4]@15]/2", // G F#m
  AG: "[[b3,e4]@18 d5@10 c#5@9 ~@28 b5@5 ~ a5@27 ~@14, ~@18 [d4,f#4,a4]@19 ~ a3@59 ~@15, ~@39 a2@59 ~@14, ~@64 e6@6 c#6@27 ~@15]/7", // E5 D
})).s("gm_string_ensemble_2").gain(0.23)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@51 A B@2 C D E@2 F ~@47>".pickRestart({
  A: "[e3,e4] [f#3,f#4] [g#3,g#4] [f#3,f#4] [g#3,g#4] [a3,a4] [g#3,g#4] [a3,a4] [b3,b4] [a3,a4] [b3,b4] [c#4,c#5] ~ [e4,e5] [f#4,f#5] [g#4,g#5], ~@6 [d4,d5] ~", // E F# G# F# G# A G# A …
  B: "[[a4,a5]@5 [g#4,g#5] [a4,a5] [b4,b5]]/2", C: "[d5,d6]", D: "[f#4,f#5]", E: "[[g#4,g#5]@6 [f#4,f#5] [g#4,g#5]]/2",
  F: "[e4,e5]@15 ~", // E
})).s("gm_string_ensemble_1").gain(0.18)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_3 = note(`<
  A@2 B@2 C@2 D@2 E@2 F G C@2 D@2 E@2 F G H@2 I J K L H K H@2 I J K I H K H@2 I J K L H K H@2 I J K L H K H@2 I J K L H
  K H@2 I J K I H K C@2 D@2 E@2 F G C@2 D@2 ~@3 H@2 I J K L H K H@2 I J K I H@2 ~@7
>`.pickRestart({
  A: "[a3 ~ e4 ~@5 a3 ~ e4 ~@4 [e3,a4], a2@3 e4 e3@3 e4, e3@4 e3@3 a4@8 ~, ~ a3@4 c#4@4 a3@2 e4@2 [a3,c#4]@3, ~@3 e4@2 a3@3 a2@8]/2", // A5 A
  B: "[a3 ~ e4 ~@5 a3 ~ e4 ~@4 [e3,a4], e3@4 e3@3 a4@7 e4@2, a2 ~ a3@8 c#4@12 e4@4 [a3,c#4]@6, ~@3 e4@3 e4@2 e3 a3@3 e3@3 ~, ~@5 a3@3 a2@8]/2", // A5 A
  C: "[a3 ~ e4 ~@5 a3 ~ e4 ~@4 [e3,a4], a2@6 e4@2 e3 a3@2 e4@2 [a3,c#4]@3, e3@4 e3@3 a4@7 e4@2, ~ a3@4 c#4@7 e3@3 ~, ~@3 e4@2 a3@3 a2@8]/2", // A5 A
  D: "[a3 ~@13 d4 f#4, d3@12 d4@2 f#4@4 a3@4 f#4@4 a3@5 ~, d4@8 f#3@12 a4@11 ~, ~@2 a3@4 f#4@4 a3@6 d3@15 ~, ~ a4@3 d4@2 f#3@2]/2",
  E: "[~@2 e4 ~@7 e4 ~@3 e4 g#4, [e2,b2]@31 ~, e4@4 ~@2 e4@6 e4@4 e3@15 ~, ~ b3@4 b3@3 e4 b3@3 g#3@4, ~@8 g#3@6 g#3@8 e4@4 b3@5 ~]/2", // E5
  F: "a3 ~ e4 ~@3 e4 a4, a2@15 ~, e3!2, ~@2 a3@8 [a3,c#4]@5 ~, ~@3 e4@3 ~@2", // A
  G: "b3 ~ e4 ~@3 e4 g#4, [e2,e3]@15 ~, e4@2 ~ e4@3 ~@2, ~ b3@4 b3@3, ~ g#3", // E
  H: "a3@2 e4@2 [a3,c#4,e4]@2 a3 ~ a3@2 e4@2 [a3,c#4]@2 [a3,c#4,e4]@2, [e2,a2] a2, e3!4, ~@6 [c#4,e4]@4 ~@2 e4 ~@3", // A A5 C#m
  I: "a3@2 f#4@2 [a3,d4,f#4]@2 a3 ~ a3@2 f#4@2 [a3,d4]@2 [a3,d4,f#4]@2, d3 a2, [a2,f#3] f#3!3, ~@6 [d4,f#4]@4 ~@2 f#4 ~@3", // D D5 D
  J: "a3@2 f#4@2 [a3,d4,f#4]@2 a3 ~ a3@2 f#4@2 [a3,d4]@2 [a3,d4,f#4]@2, d3!2, f#3!4, ~@6 [d4,f#4]@4 ~@2 f#4 ~@3", // D D5 D
  K: "g#3@2 e4@2 [g#3,b3,e4]@2 g#3 ~ g#3@2 e4@2 [g#3,b3]@2 [g#3,b3,e4]@2, [e2,b2]@2 e3!2, e3!2 b2@2, ~@6 [b3,e4]@4 ~@2 e4 ~@3", // E G#m E E5
  L: "g#3@2 e4@2 [g#3,b3,e4]@2 g#3 ~ g#3@2 e4@2 [g#3,b3]@2 [g#3,b3,e4]@2, b2!2, e3!4, ~@6 [b3,e4]@4 ~@2 e4 ~@3", // E G#m E E5
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@20 A@59 B C ~@2 A@15 B C ~@6>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x", C: "x",
})).gain(0.59)

// drums · rim
const rim = s("rim").struct("<~@20 A@7 B A@15 B A@7 B A@7 B A@15 B A@3 C ~@3 A@7 B A@8 ~@7>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@2 x ~@2 x!2 ~",
})).gain(0.59)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@27 A ~@15 B ~@7 C ~@7 A ~@15 B ~@14 A ~@7 D ~@7>".pickRestart({
  A: "~ x ~ x!2 ~@2 x", B: "~@3 x", C: "~ x ~ x ~@3 x", D: "~ x ~@6",
})).gain(0.33)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@20 A@3 B A@3 C ~@7 D A@11 B A@3 C A@3 B A@3 C A@3 B A@3 D A@12 ~@3 E A@2 B A@3 C ~@15
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x!7 ~", D: "~ x!6 ~", E: "~ x!7",
})).gain(0.33)

// drums · low tom
const low_tom = s("lt").struct("<~@27 A ~@23 A ~@7 A ~@30 A ~@7 B ~@7>".pickRestart({
  A: "~@5 x!2 ~", B: "~@5 x!3",
})).gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@27 A ~@7 A ~@15 A ~@7 A ~@7 A ~@12 B ~@9 A ~@8 B ~@6>".pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@83 x ~@22>").gain(0.26)

// drums · ride
const ride = s("rd").struct("<~@28 [x!8]!7 x ~@55 [x!8]!7 [x!7 ~] ~@7>").gain(0.26)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, pad_warm, string_ensemble_2, string_ensemble_1,
  acoustic_guitar_steel_3, kick, rim, rim_soft, hihat, low_tom, open_hat, crash, ride
)

More by Smokie