Strudelify

Lonesome Loser

Little River Band

KeyG majorTempo115 bpm
0:00/0:00
// Lonesome Loser — Little River Band
// 115 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · piano
const piano = note(`<
  ~@2 A B C D@2 B E F@2 G H I J K L M N O P Q R S T U V W@2 U X Y@2 K L M N O P Q R S Z U AA AB@2 U AC AD@2 AE AF AG AH
  AI AJ AK AL AM U V W@2 U X Y@2 AN AO AP AQ@2 AO AR AS@2
>`.pickRestart({
  A: "~@8 [a3,c4]@2 [g3,c4]@3 ~ [a3,c4]@2", B: "~@2 [g3,b3]@2 [g3,b3]@2 [d3,g3]@2 [g3,b3]@3 ~ [d3,g3]@2 [g3,b3]@2",
  C: "~@2 [a3,c4]@5 ~ [a3,c4]@2 [g3,c4]@3 ~ [a3,c4]@2", // Am C5 Am
  D: "[~@2 [g3,b3]@2 [g3,b3]@2 [d3,g3]@2 [g3,b3]@2 [g3,b3]@2 [d3,g3]@2 [b2,d3]@10 [a3,c4]@2 [g3,c4]@3 ~ [a3,c4]@2]/2", // G G5 G G5 Bm Am C5 Am
  E: "~@2 [b2,d3]@5 ~ [a3,c4]@2 [g3,c4]@3 ~ [a3,c4]@2", // Bm Am C5 Am
  F: "[~@2 [g3,b3]@2 [g3,b3]@2 [d3,g3]@2 [g3,b3]@2 [g3,b3]@2 [d3,g3]@2 [a3,c4]@5 ~ [g3,b3]@10 ~@2]/2", // G G5 G G5 Am G
  G: "[c3,e3,g3,c4]@13 ~@3", H: "[c3,f3,a3,c4]@6 ~@2 c4@3 ~ d4@3 ~", I: "[d#3,g3,a#3,d#4]@13 ~@3",
  J: "[c3,f3,a3,d4] c4 [c3,f3,a3,c4]@5 ~", K: "[g2,c3,e3]@3 ~@3 [e3,g3]@8 ~@2",
  L: "~@2 [c3,f3] ~ [a3,c4] ~@3 [f3,a3]@2 [f3,a3]@5 ~", M: "~@4 [d#3,g3,a#3]@2 ~@4 [d#3,g3,a#3]@3 ~@3",
  N: "[f3,a3,c4]@3 ~ [f3,a3,c4]@3 ~ [f3,a3]@2 ~@2 [f3,a3]@3 ~", O: "~ [e3,g3]!2 ~ [e3,g3] ~ [e3,g3] ~",
  P: "[c3,f3,a3] ~ [c3,f3]@4 ~@2", Q: "[d#3,g3,a#3]@2 ~@4 [d#3,g3,a#3]@3 ~ [d#3,g3,a#3]@5 ~",
  R: "[f3,a3,c4]@2 [f3,a3,c4]@3 ~ [f3,a3,c4]@3 ~ [f3,a3]@5 ~", S: "[e3,a3,d4]@3 ~ [e3,a3,d4,e4]!4",
  T: "[e3,a3,c#4,e4]@6 ~@2 [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [g3,b3]@2", U: "~@4 [g3,b3]@2 ~@2 [g3,b3]@3 ~@3 [g3,b3]@2",
  V: "~@2 [b2,d3]@5 ~ [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [g3,b3]@2", // Bm F G
  W: "[~@4 [g3,b3]@2 ~@2 [g3,b3]@2 [g3,b3]@2 [d3,g3]@2 [b2,d3]@5 ~@5 [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [g3,b3]@2]/2", // G G5 Bm F G
  X: "~@2 [g3,b3]@5 ~ [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [g3,b3]@2", // G F G
  Y: "[~@4 [g3,b3]@2 ~@2 [g3,b3]@2 ~@4 [g3,b3]@5 ~ [g3,b3]@10 ~@2]/2", // G
  Z: "[e3,a3,c#4,e4]@3 ~ [f3,a3,c4] [f3,a3,c4]@2 [g3,b3]", AA: "~@2 [b2,d3]@5 ~ [f3,a3,c4]@2 [f3,a3,c4]@4 [g3,b3]@2",
  AB: "[~@4 [g3,b3]@2 ~@2 [g3,b3]@2 [g3,b3]@2 [d3,g3]@2 [b2,d3]@5 ~@5 [f3,a3,c4]@2 [f3,a3,c4]@4 [g3,b3]@2]/2", // G G5 Bm F G
  AC: "~@2 [g3,b3]@5 ~ [f3,a3,c4]@2 [f3,a3,c4]@4 [g3,b3]@2", // G F G
  AD: "[~@4 [g3,b3]@2 ~@2 [g3,b3]@2 ~@4 [g3,b3]@5 ~ [g3,b3]@3 ~@3 [g3,b3]@3 ~ [g3,b3]@2]/2", // G
  AE: "[e3,a3]@3 ~@3 [e3,a3] ~", AF: "[d3,g3,b3]@5 ~@3",
  AG: "[c3,f3,a3]@2 ~@2 [c3,f3,a3]@2 ~@2 [c3,f3,a3]@3 [c3,f3,a3]@3 ~@2", // F
  AH: "[b2,e3,g3]@2 ~@2 [b2,e3]@3 ~@3 [f3,a#3]@3 ~@3", AI: "[e3,a3]@5 ~@3 [e3,a3]@2 ~@3 [e3,a3]@2 ~",
  AJ: "[d3,g3,b3]@3 ~@3 [g3,b3,d4] ~", AK: "[g#3,d4]@2 ~@4 [g#3,d4,e4]@3 ~@7", AL: "~@2 [c3,e3]@11 ~@3",
  AM: "[a3,c4,e4,a4]@6 ~@2 [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [g3,b3]@2", // Am F G
  AN: "[a3,c4,e4,a4]@6 ~@2 [f3,a3,c4,f4]@2 [f3,a3,c4,e4]@3 ~ [g3,b3,e4]@2", // Am F Fmaj7 Em
  AO: "~@2 d4@2 [g3,b3,d4]@2 b3@2 [g3,b3,d4]@3 ~ b3@2 [g3,b3,d4]@2", // G
  AP: "~@2 [b2,d3,g3]@5 ~ [f3,a3,c4,f4]@2 [f3,a3,c4,e4]@3 ~ [g3,b3,e4]@2", // G F Fmaj7 Em
  AQ: "[~@2 d4@2 [g3,b3,d4]@2 b3@2 [g3,b3,d4]@2 [g3,b3,d4]@2 [d3,g3,b3]@2 [b2,d3,g3]@5 ~@5 [f3,a3,c4,f4]@2 [f3,a3,c4,e4]@3 ~ [g3,b3,e4]@2]/2", // G F Fmaj7 Em
  AR: "~@2 [g3,b3,e4]@5 ~ [f3,a3,c4,f4]@2 [f3,a3,c4,e4]@3 ~ [g3,b3,e4]@2", // Em F Fmaj7 Em
  AS: "[~@2 d4@2 [g3,b3,d4]@2 b3@2 [g3,b3,d4]@2 d4@2 b3@2 [g3,b3,e4]@5 ~ [g3,b3,d4]@10 ~@2]/2", // G Em G
})).s("gm_piano").gain(0.43)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@2 A B C D@2 B E F@2 ~@4 G H I J K L M N O A B E P@2 B C F@2 G H I J K L M N O Q B R S@2 B T U@2 V W X Y Z AA AB AC A
  B E P@2 B C F@2 ~@9
>`.pickRestart({
  A: "~@8 f4@2 e4@3 ~ e4@2", B: "~@2 d4@2 d4@2 b3@2 d4@3 ~ b3@2 d4@2", C: "~@2 e4@5 ~ f4@2 e4@3 ~ e4@2",
  D: "[~@2 d4@2 d4@2 b3@2 d4@2 d4@2 b3@2 g3@10 f4@2 e4@3 ~ e4@2]/2", E: "~@2 g3@5 ~ f4@2 e4@3 ~ e4@2",
  F: "[~@2 d4@2 d4@2 b3@2 d4@2 d4@2 b3@2 e4@5 ~ d4@10 ~@2]/2", G: "~@2 a#3 c4@4 ~",
  H: "~@2 a3!2 d#4!2 d#4@2 d4@2 c4@5 ~", I: "~@4 d#4@2 d#4@2 d4@2 c4@3 ~ c4@2", J: "d#4@3 ~ d#4@3 ~ d4@2 c4@2 c4@3 ~",
  K: "~ a#3!4 c4!3", L: "c4!2 a3@4 ~ a3", M: "d#4@2 d#4@2 d#4@2 d4@3 ~ c4@5 ~", N: "d#4@2 d#4@3 ~ d4@3 ~ c4@5 ~",
  O: "e4@3 ~@5", P: "[~@2 d4@2 d4@2 b3@2 d4@2 d4@2 b3@2 g3@5 ~@5 f4@2 e4@3 ~ e4@2]/2", Q: "~@4 f4 e4@2 e4",
  R: "~@2 g3@5 ~ f4@2 e4@4 e4@2", S: "[~@2 d4@2 d4@2 b3@2 d4@2 d4@2 b3@2 g3@5 ~@5 f4@2 e4@4 e4@2]/2",
  T: "~@2 e4@5 ~ f4@2 e4@4 e4@2", U: "[~@2 d4@2 d4@2 b3@2 d4@2 d4@2 b3@2 e4@5 ~ d4@3 ~@3 e4@3 ~ d4@2]/2",
  V: "c4@3 ~@2 a3 c4 a3", W: "d4@5 ~ a3 b3", X: "c4@2 c4@2 c4@2 c4@2 c4@3 c4@3 d4@2",
  Y: "b3@2 g3@2 g3@3 ~@3 e4@3 ~ d4@2", Z: "c4@5 ~ c4@2 c4@2 c4@2 c4 c4@2 ~", AA: "d4@3 ~@2 e4!3",
  AB: "e4@2 e4@2 e4@2 a4@3 ~ e4@2 d4@2 e4@2", AC: "d4 c4 a3@11 ~@3",
})).s("gm_piano").gain(0.21)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@11 A@3 B C@2 D E F C F G H I@2 J@2 K@2 J@2 L C@2 D E F C F G H I@2 J@2 K@2 M@3 N O P Q N O R S T@2 J@2 K@2 J@2 L T@2
  J@2 K@2 J@2 L
>`.pickRestart({
  A: "c2@5 ~ c2@2 c2@6 ~@2", B: "f2@5 ~ f2@2 f2@3 ~ f1@3 ~", C: "c2@8 ~@2 g2@2 c3@3 ~", D: "c2@10 ~@2 g2@3 ~",
  E: "c2@11 ~@3 g2@2", F: "c2@10 ~@2 c2@3 ~", G: "f2@13 ~@3", H: "~ a2!7",
  I: "[a2@2 a2@2 a2@3 ~ d2@2 d2@2 g1@6 ~@4 g1@2 g1@5 ~ g1@2]/2",
  J: "[g1@5 ~ g1@2 d2@2 d2@3 ~ g1@6 ~@2 g1@2 g1@5 ~ g1@2]/2",
  K: "[g1@2 d2@2 g2@3 ~ d2@2 d2@3 ~ g1@6 ~@2 g1@2 g1@5 ~ g1@2]/2", L: "g1@5 ~ d2@2 g2@2 d2@2 g1@3 ~",
  M: "[g1@5 ~ g1@2 d2@2 d2@3 ~ g1@6 ~@2 g1@2 g1@5 ~ g1@6 ~@2 g1@2 g1@3 ~ g2@3 ~]/3", N: "f2@5 ~ f2@2 f2@6 ~@2",
  O: "e2@5 ~ e2@2 e2@6 ~@2", P: "d2@5 ~ d2@2 d2@3 ~ d2@3 ~", Q: "c2@5 ~ c2@2 c2@3 ~ g2@3 ~", R: "e2@3 ~ e1@3 ~",
  S: "a1@5 ~ e2@2 a2@3 ~ e2@3 ~", T: "[a1@5 ~ d2@2 d2@5 ~ g1@6 ~@2 g1@2 g1@5 ~ g1@2]/2",
})).s("gm_acoustic_bass").gain(0.5).pan(0.8)

// chords · synth brass 2 · "Brass"
const synth_brass_2 = note("<~@50 A B C D E B C F G ~@18>".pickRestart({
  A: "~@4 [g3,b3,e4]@3 [g3,b3,d4]", B: "[a3,c4,e4,f4]", C: "[g3,d4,e4]", D: "[a3,c4,d4,f4]",
  E: "[g3,b3,c4,e4] [g3,a#3,d4,f4]", F: "[g#3,d4,e4]", G: "[a3,c4,e4]",
})).s("gm_synth_brass_2").gain(0.3)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<A B@2 ~@21 C D@8 ~@9 C D@8 ~@8 E@8 ~ E@8 ~>".pickRestart({
  A: "[e4,a4,d5,e5]@4 [e4,a4]!4, ~@8 [d5,e5] ~ [d5,e5] ~ [d5,e5] ~ [d5,e5] ~", B: "[[e4,a4,c#5,e5]@3 ~]/2",
  C: "~@7 g5, ~ d5",
  D: "[[d5,g5,b5]@12 [c5,d5,f5,a5]@3 [d5,g5,b5]@13 [c5,d5,f5,a5]@3 [d5,g5,b5]@13 [c5,d5,f5,a5]@3 [d5,g5,b5]@13 ~@4]/8", // G Dm7 G Dm7 G Dm7 G
  E: "[~@4 [c5,d5,f5,a5]@3 [d5,g5,b5]@13 [c5,d5,f5,a5]@3 [d5,g5,b5]@13 [c5,d5,f5,a5]@3 [d5,g5,b5]@13 [c5,d5,f5,a5]@3 [d5,g5,b5]@9]/8", // Dm7 G Dm7 G Dm7 G Dm7 G
})).s("gm_string_ensemble_1").gain(0.3)

// drums · kick
const kick = s("bd").struct("<[x!2]!67 [x!2 ~@2] [x!2]!8 [x!2 ~@2]>").gain(0.5).pan(0.3)

// drums · snare
const snare = s("sd").struct("<~@14 A B@43 C D B@7 ~ D B@7 ~>".pickRestart({
  A: "~@6 x!2", B: "~ x ~ x", C: "~@2 x ~ x!4", D: "~@3 x",
})).gain(0.5).pan(0.3)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!67 [x!3 ~@5] [x!8]!8 [x!3 ~@5]>").gain(0.44).pan(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@12 B ~@8 C ~@3 C ~@13 C ~@3 C ~@4 B ~@7 C ~@3 C ~@3 A C ~@3 C ~@3 A
>`.pickRestart({
  A: "~ x ~@2", B: "x", C: "~@4 x!2 ~ x",
})).gain(0.5).pan(0.3)

// drums · ride
const ride = s("rd").struct("<~@14 A ~@44 B ~@3 C ~@3 D B ~@3 C ~@3 D>".pickRestart({
  A: "~@6 x!2", B: "x", C: "~@4 x!2 ~ x", D: "~ x ~@2",
})).gain(0.62).pan(0.3)

stack(piano, piano_soft, bass, synth_brass_2, string_ensemble_1, kick, snare, hihat, crash, ride)

More by Little River Band