Strudelify

Only the Lonely

Motels

KeyA♭ majorTempo117 bpm
0:00/0:00
// Only the Lonely — Motels
// 117 bpm, 4/4, key G# major. 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 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(117/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.

// chords · pad new age · "Main Pad2"
const pad_new_age = note(`<
  A@8 B@4 C@6 D@2 E F G@8 D@2 C@6 D@2 E F H@3 F G@8 D@2 C@6 D@2 E F H@3 F I@3 J@2 ~ K@8 ~@5
>`.pickRestart({
  A: "[ab1@3 [f3,bb3]@2 [g3,c4]@6 ~@5 ab1@3 ~@5 ab1@3 ~@5 ab1@3 [f3,bb3]@2 ~@3 ab1@3 [f3,bb3]@2 ~@3 f1@3 [g3,eb4]@2 ~@3 f1@3 [g3,eb4]@2 ab3@3, ~@6 eb2@10 ~@6 [eb2,f3,bb3]@10 ~@6 [eb2,f3,bb3]@10 ~@6 [eb2,f3]@10 ~@6 eb2@9 ~@7 eb2@10 ~@6 c2@9 ~@7 c2@9 ~, ~@26 [g3,c4]@12 ~@4 [g3,c4]@12 ~@4 [g3,c4]@12 ~@4 [g3,c4]@12 ~@4 [g3,c4]@11 ~@5 ab3@12 ~@10]/8", // Bb5 C5 Bb5 Cm Ebsus2 C5
  B: "[db2@3 [c4,g4]@2 ~@3 db1@3 [c4,g4]@2 ~@3 ab1@3 [f3,bb3]@2 ~@3 ab1@3 [f3,bb3]@2 [g3,c4]@3, ~@6 ab1@9 ~@7 ab1@9 ~@7 eb2@9 ~@7 eb2@10, ~@5 [db4,ab4]@6 ~@2 [db4,ab4]@6 ~@2 [g3,c4]@6 ~@5]/4", // C5 Bb5 C5 Db5 C5
  C: "[~@6 [f3,bb3]@4 [g3,c4]@12 [f3,bb3]@4 [g3,c4]@8 ~@4 [g3,eb4]@4 [ab3,eb4]@11 ~ [g3,eb4]@3 ~ [ab3,eb4]@8 ~@4 [c4,g4]@4 [db4,ab4]@11 ~ [c4,g4]@4 [db4,ab4]@6]/6", // Bb5 C5 Bb5 C5 Cm Ab5 Cm Ab5 …
  D: "[~@3 [f3,bb3]@2 [g3,c4]@6 [f3,bb3]@2 [g3,c4]@3]/2", E: "[bb3,ab4]@6 [eb4,g4] ~ [bb3,eb4,g4]@7 ~, eb4@5 ~@11",
  F: "ab4@3 g4@2 ab4@3 g4@3 eb4@5, ab3, db4@5 db4@11",
  G: "[~@6 [f3,bb3]@4 [g3,c4]@11 ~ [f3,bb3]@4 [g3,c4]@11 ~ [f3,bb3]@4 [g3,c4]@12 [f3,bb3]@4 [g3,c4]@8 ~@4 [g3,eb4]@4 [ab3,eb4]@11 ~ [g3,eb4]@3 ~ [ab3,eb4]@8 ~@4 [c4,g4]@4 [db4,ab4]@11 ~ [c4,g4]@4 [db4,ab4]@6]/8", // Bb5 C5 Bb5 C5 Bb5 C5 Bb5 C5 …
  H: "[~@6 [f3,bb3]@4 [g3,c4]@11 ~ [f3,bb3]@4 ~@6 [bb3,ab4]@6 [eb4,g4] ~ [bb3,eb4,g4]@7 ~, ~@26 [g3,c4]@11 ~@11, ~@32 eb4@5 ~@11]/3", // Bb5 C5 Bb5 Bb7 Eb C5
  I: "[~@6 [f3,bb3]@4 [g3,c4]@11 ~ [f3,bb3]@4 c4@6 [bb3,c4,eb4,g4]@6 [ab3,bb3,db4,f4]@10, ~@13 g3@6 ~@5]/3", // Bb5 C5 Bb5 Cm7 Bbm7
  J: "[ab3,bb3,db4,f4]/2", // Bbm7
  K: "[ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [ab2,f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@15, ~@6 ab2@9 ~@7 ab2@8 ~@8 ab2@8 ~@24 ab2@7 ~@9 ab2 ~@15 ab2@8 ~@18, ~@10 [g3,c4]@11 ~@5 [g3,c4]@11 ~@5 [g3,c4]@11 ~@5 [g3,c4]@12 ~@4 [g3,c4]@11 ~@5 [g3,c4]@11 ~@5 [g3,c4]@10 ~@12]/8", // Bb5 Bb7 Bb5 C5
})).s("gm_pad_new_age").gain(0.35)

// chords · pad new age · "Main Pad2" · soft notes
const pad_new_age_soft = note("<~ A ~ B ~@2 C@3 ~@6 D ~@11 D ~@7 D ~@15 D ~@7 D ~@23 E@5 ~>".pickRestart({
  A: "ab1@3 ~@5", B: "~@3 bb3@5", C: "[~@5 eb4@6 ~@2 eb4@5 ~@6]/3", D: "~@6 db4 ~@9",
  E: "[~@6 [f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [f3,bb3]@4 ~@6 ab2 ~@5 [ab2,f3,bb3]@4 [g3,c4]@6, ~@6 ab2@7 ~@9 ab2@8 ~@8 ab2@8 ~@8 ab2@8 ~@18, ~@10 [g3,c4]@11 ~@5 [g3,c4]@11 ~@5 [g3,c4]@11 ~@5 [g3,c4]@11 ~@11]/5", // Bb5 Bb7 C5
})).s("gm_pad_new_age").gain(0.15)

// chords · acoustic guitar nylon · "CleanGuita"
const acoustic_guitar_nylon = note(`<
  ~@24 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@8 E F@2 ~@14
>`.pickRestart({
  A: "[ab3 ~@4 eb4@11, ~ eb4@4 ~@11, ~ ab3@7, ~@3 ab4@13]/2", B: "[~@5 c4@11, f3 f3@7, ~ c4@4 ~@11, ~@3 f4@13]/2",
  C: "[~@5 ab4@11, db4 db4@7, ~ f4@15, ~@3 db5@13]/2",
  D: "[~@18 eb4@13 ~, ab3@4 ab3@27 ~, ~ eb4@8 ~@7, ~@14 ab4@17 ~]/2",
  E: "~@2 g4 [ab3,f4]@5, [bb3,c4]@3 ~@5, ~ eb4@2 ~@5", F: "[[bb3,db4,f4]@11 ~@5]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.19)

// chords · overdriven guitar · "DistGuitar"
const overdriven_guitar = note(`<
  ~@23 A B@2 C@2 D@2 E@2 B@2 C@2 D@2 F@2 G H I J K L I M B@2 C@2 D@2 E@2 B@2 C@2 D@2 N@2 O H I J K L I P ~@17
>`.pickRestart({
  A: "~@15 gb2", B: "[[ab2,eb3]@31 g2]/2", C: "[[f2,c3]@30 [ab2,b2] ~]/2", D: "[[db3,ab3]@31 bb2]/2",
  E: "[[ab2,eb3]@30 ~ gb2]/2", F: "[[ab2,eb3]@30 ~ d2]/2", G: "[eb2,eb3], db3 ~@15", H: "[db2,db3]@15 eb2",
  I: "[ab2,ab3]@15 ~", J: "[ab2,ab3] ~ ab2!2 ~@2 [ab2,ab3]@8 ~@2", K: "[eb2,eb3]@15 c2", L: "db3@15 db2, db2@13 ~@3",
  M: "[ab2,ab3] ~ ab2 ~ ab2 ab3 [ab2,ab3]@9 gb2, ~@3 ab2@2 ~@11", N: "[[ab2,eb3]@15 ~]/2", O: "[eb2,eb3]",
  P: "[ab2,ab3]@2 [ab2,ab3] ab2 [ab2,ab3]!2 [ab2,ab3]@10", // Ab
})).s("gm_overdriven_guitar").gain(0.06)

// chords · overdriven guitar · "DistGuitar" · soft notes
const overdriven_guitar_soft = note(`<
  ~@25 A ~ B ~@5 A ~ B ~@7 C ~ D ~ E ~ A ~ B ~@5 A ~ B ~@7 C ~ D ~ F ~@17
>`.pickRestart({
  A: "~@15 db3", B: "~@14 [f3,gb3] ~", C: "~@2 ab3 ~ [ab2,ab3] ~@11", D: "~@7 eb2", E: "~@2 ab3 ab3@2 ab2 ~@10",
  F: "~@3 ab3 ~@12",
})).s("gm_overdriven_guitar").gain(0.03)

// other · overdriven guitar · "GuitarSolo"
const overdriven_guitar_2 = note("<~@48 A@2 B@2 C D E F ~@33>".pickRestart({
  A: "[ab3@2 ~@2 ab3@2 g3@2 ab3@2 g3@2 ab3@10 bb3 ~ bb3 c4 eb4@2 ab3@4]/2",
  B: "[ab3 ~@3 ab3@2 g3@2 ab3@2 g3@2 f3@7 eb3 c3@2 eb3@2 f3@2 f2@4 eb3@2]/2", C: "f3@2 ~@2 f3@2 eb3 ~ f3 ~ ab3 ~ ab3@4",
  D: "f3@2 ~@2 ab3 ~ bb3 ~@2 bb3 ab3 ~ bb3@2 ab3 ~, ~@4 [b3,c4] ~@3", // Cmaj7
  E: "bb3 c4@2 ~ eb4 ~ [bb3,b3] ~@5 bb3@2 ab3 ~, ~@6 c4@5 ~@5", F: "eb4 ~ bb3@4 ab3@9 ~",
})).s("gm_overdriven_guitar").gain(0.45)

// other · overdriven guitar · "GuitarSolo" · soft notes
const overdriven_guitar_soft_2 = note("<~@51 A B ~@30 C@3 ~@3>".pickRestart({
  A: "~@2 eb3 ~@5", B: "eb3@2 ~@10 bb3 ~@3", C: "[~ g4@7]/3",
})).s("gm_overdriven_guitar").gain(0.2)

// other · tenor sax · "SaxSolo"
const tenor_sax = note("<~@55 A B C@2 D E F@3 ~@25>".pickRestart({
  A: "~@10 eb4@2 f4@2 ab4 ~", B: "ab4@4 bb4@2 ab4 ~ c5@2 db5@2 c5@3 ~",
  C: "[~@2 eb4@2 f4@2 ab4 ~ c5@2 db5@2 c5@2 eb5@17 ~]/2", D: "f5@4 eb5@2 c5@2 ~@2 c5@3 bb4 ab4 ~, e5 ~@9 b4 ~@5",
  E: "bb4@2 ab4 bb4@2 bb4@2 ~ bb4@4 ab4@2 c5@2, ~@5 ab4 ~@2 ab4 ~@5 bb4 ~",
  F: "[~ g4 [c4,d4,e4,f4] [d3,e3,f3,g3,a3,b3] c3 ~@9 ab5@20 g5@3 f5@3 eb5@7 ~, ~@14 g5 ~@19 f5 ~@13]/3", // Dm7 Em7
})).s("gm_tenor_sax").gain(0.16)

// other · tenor sax · "SaxSolo" · soft notes · Asus2
const tenor_sax_soft = note("<~@59 [eb5 ~@15] [~@15 d5] [~ [a4,b4] ~@14] ~@27>").s("gm_tenor_sax").gain(0.07)

// other · piano
const piano = note(`<
  ~@80
  [f5 g5 eb5@2 f5@2 bb5@2]
  [g5 eb5 f5 c5]
  [f5@2 g5@2 eb5@4 f5@4 bb5@3 ~]
  [g5@4 eb5@3 ~ f5@4 c5@4]
  [f5 g5 eb5@2 f5@2 bb5@2]
  [g5 ~@3]
  ~@3
>`).s("gm_piano").gain(0.13)

// other · piano · soft notes
const piano_soft = note("<~@85 [~ eb5 f5 c5] [f5 g5 eb5@2 f5@2 bb5@2] [g5 eb5 f5 c5] ~>").s("gm_piano").gain(0.06)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@12 A B C D E F A G H I J K A B C D E F A G A B C D E F A G H I J K H I J L A B C D E F A G A B C D E F A G H I J K H
  I J K M N@2 ~ A@2 G A@3 O ~@6
>`.pickRestart({
  A: "ab1 ~@5 ab1@8 eb1@2", B: "ab1 ~@5 ab1@5 ~ bb1@4", C: "f1@2 ~@4 f1@7 ~ c1@2", D: "f1 ~@5 f1@9 ~",
  E: "db2 ~@5 db2@8 ab1@2", F: "db2@2 ~@4 db2@9 ~", G: "ab1 ~@5 ab1@9 ~", H: "eb2 ~@5 eb2@10", I: "db2 ~@5 db2@10",
  J: "ab1 ~@5 ab1@7 ~ eb1@2", K: "ab1 ~@5 ab1@8 eb2@2, ~@14 d2 ~", L: "ab1 ~@5 ab1@3 ~ f1 ~@3 g1 ~",
  M: "eb2@3 ~ ab1@2 bb1@10", N: "[db2@15 ~]/2", O: "ab1 ~@15",
})).s("gm_electric_bass_pick").gain(0.4)

// bass · electric bass pick · "Bass" · soft notes
const bass_soft = note("<~@82 [~@6 ab1@9 ~] [ab1 ~@5 ab1@8 eb1@2]!3 [ab1 ~@5 ab1@9 ~] [ab1 ~@5 ab1@8 eb1@2] ~>")
  .s("gm_electric_bass_pick").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A D 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 E ~@2 A@6 ~@7
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x ~ x ~@2", C: "x ~@2 x ~ x ~ x", D: "x ~@2 x ~ x!2 ~", E: "x",
})).gain(0.45)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@82 [x ~@2 x ~@4]!6 ~>").gain(0.15)

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

// drums · low tom
const low_tom = s("lt").struct("<~@39 [~@5 x ~@2] ~@7 [~@5 x ~ x] ~@29 [~@6 x!2] ~@11>").gain(0.4)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@12 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~@11 A ~@3 A ~@5 B C B C D E@7 ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x", C: "~ x ~@3 x ~ x", D: "~@4 x!4", E: "x!8",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@77 [~@5 x ~@2] ~@11>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@23 A ~ B ~@7 C ~ C ~ C ~@5 A ~@23 A ~@3 A ~@17>".pickRestart({
  A: "~@5 x!3", B: "~@7 x", C: "~@3 x",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@7 A ~ A ~ A ~@7 A ~@7 A ~ A ~ A ~ A ~@9 A ~@7 A ~ A ~ A ~ A ~ B ~@5 A ~@10
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4",
})).gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@20 A@2 ~@18 A@2 ~@2 A@2 ~@10 B@8 A@2 ~@2 A@2 ~@3 C ~@15>".pickRestart({
  A: "x!4", B: "x!8", C: "x",
})).gain(0.25)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@32 [x!4]!8 ~@49>").gain(0.15)

stack(
  pad_new_age, pad_new_age_soft, acoustic_guitar_nylon, overdriven_guitar, overdriven_guitar_soft, overdriven_guitar_2,
  overdriven_guitar_soft_2, tenor_sax, tenor_sax_soft, piano, piano_soft, bass, bass_soft, kick, kick_soft, snare,
  low_tom, hihat, hihat_soft, mid_tom, open_hat, crash, ride, ride_soft
)