Strudelify

All Cried Out

Alison Moyet

KeyG minorTempo72 bpm
0:00/0:00
// All Cried Out — Alison Moyet
// 72 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 68 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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 · electric bass finger
const bass = note(`<
  A B A C A B D E F G H I A B D E F G H J K L K L M A B D E F G H J K N K O K N K O P Q R S R T U K N K O K N K O P@2 K
  N K O K N K O V W
>`.pickRestart({
  A: "g1@3 g1 ~@2 g1@2 d2@3 d2 ~@2 d2@2", B: "eb2@3 eb2 ~@2 d2@2 c2@3 c2 ~@2 d2@2", C: "eb2@3 eb2 ~@2 d2@2 c2@5 c2 ~@2",
  D: "g1@3 g1 ~@2 g1@2 d2@2 ~ d2 ~@2 d2@2", E: "d1@3 d1 ~@2 a1@2 d1@3 d1 ~@2 gb1@2",
  F: "g1@3 g1 ~@2 g1@2 gb1@3 gb1 ~@2 gb1@2", G: "f1@3 f1 ~@2 f1@2 e1@3 e1 ~@2 e1@2",
  H: "eb2@3 eb2 ~@2 d2@2 c2@3 c2 ~@2 c2@2", I: "d2@3 d2 ~@2 a1@2 d1@3 d1 ~@2 a1@2",
  J: "d2@3 d2 ~@2 a1@2 d1@3 a1@3 a1@2", K: "g1@3 g1 ~@3 f1 g1!4 ~@3 a1", L: "bb1@3 bb1 ~@3 bb1 c2 c2@2 c2 ~@3 g1",
  M: "g1@3 g1 ~@3 f1 g1 g1@2 g1 ~@3 f1", N: "bb1@3 bb1 ~@3 bb1 c2 c2@2 c2 ~@3 f1",
  O: "bb1@3 bb1 ~@3 bb1 c2 c2@2 c2@2 c2 d2 f2", P: "g1@3 g1 ~@2 f1 ~ g1 g1@2 g1 ~ c2 d2 f2",
  Q: "g1@3 g1 ~@3 f1 g1 g1@2 g1 ~@2 a1 bb1", R: "c2@3 c2 ~@3 bb1 c2 c2@2 c2 ~@4", S: "g1@3 g1 ~@4 f1@3 g1 ~@2 a1 bb1",
  T: "eb2@3 eb2 ~@3 d2 c2 c2@2 c2 ~@4", U: "d2@3 d2 ~@2 a1@2 d1@3 d1 ~@2 d1@2", V: "g2", W: "g2!2 ~@14",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · synth brass 1
const synth_brass_1 = note(`<
  A B A C ~@12 D E ~@3 F ~ G H ~@4 D E ~@3 F ~ G H F ~ G H ~ I J K L M ~ F ~ G H F ~ G N F ~ F ~ G H F ~ G O P
>`.pickRestart({
  A: "[g3,bb3,d4]@5 [g3,bb3,d4]@3 [f3,a3,d4]@5 [f3,a3,d4]@3", // Gm Dm
  B: "[eb3,g3,bb3]@5 [eb3,g3,bb3]@3 [eb3,g3,bb3,d4]@5 [eb3,g3,bb3,d4]@3", // Eb Ebmaj7
  C: "[eb3,g3,bb3]@5 [eb3,g3,bb3]@3 [eb3,g3,bb3,d4]@5 [eb3,g3,bb3,d4] ~@2", D: "~@4 [g4,g5] ~@11",
  E: "~@4 [g4,g5]!2 ~@10", F: "~@13 [d5,f5,bb5]@3", G: "~@9 a4 bb4 c5 bb4 a4 g4 f4", H: "g4 ~@7",
  I: "[d5,f5,bb5]@3 [d5,f5,bb5] ~@2 [d5,f5,bb5] ~@5 [d5,f5,bb5] [c5,e5,a5] [bb4,d5,g5] [c5,e5,a5]", // Bb Am Gm Am
  J: "[bb4,d5,g5]@3 [bb4,d5,g5] ~@2 [bb4,d5,g5] ~ [a4,c5,f5]@3 [bb4,d5,g5]@2 ~@3", // Gm F Gm
  K: "[d5,f5,bb5]@3 [d5,f5,bb5] ~@2 [d5,f5,bb5] ~@4 [c5,e5,a5] [bb4,d5,g5] [c5,e5,a5]@3", L: "[bb4,eb5,g5]",
  M: "[a4,d5,a5]", N: "g4@2 ~@11 [d5,f5,bb5]@3", O: "g4", P: "[g5,bb5,d6]!2 ~@14",
})).s("gm_synth_brass_1").gain(0.45)

// chords · synth strings 1 · Gm Dm Eb Ebmaj7 Gm Dm Eb Ebmaj7
const synth_strings_1 = note(`<
  [[g3,bb3,d4]@5 [g3,bb3,d4]@3 [f3,a3,d4]@5 [f3,a3,d4]@3]
  [[eb3,g3,bb3]@5 [eb3,g3,bb3]@3 [eb3,g3,bb3,d4]@5 [eb3,g3,bb3,d4]@3]
  [[g3,bb3,d4]@5 [g3,bb3,d4]@3 [f3,a3,d4]@5 [f3,a3,d4]@3]
  [[eb3,g3,bb3]@5 [eb3,g3,bb3]@3 [eb3,g3,bb3,d4]@5 [eb3,g3,bb3,d4] ~@2]
  ~@64
>`).s("gm_synth_strings_1").gain(0.3)

// chords · piano
const piano = note(`<
  A@3 B C D@2 E F G H I C D@2 E F G H I J K J ~@2 C D@2 E F G H I J K J ~ J K J ~@3 L M N O P J K J ~ J K J ~@3 J K J ~
  J K J ~@3
>`.pickRestart({
  A: "~@2 [g4,d5,g5]!3 ~@3", B: "~@2 [g4,d5,g5] [g4,d5,g5]@5", C: "~@2 [g4,d5,g5]!2 ~@4", D: "~@2 [g4,d5,g5] ~@5",
  E: "~@2 [a4,d5,gb5,a5] ~@5", F: "~ [g4,g5] [gb4,gb5]@2", G: "~ [f4,f5] [e4,e5]@2", H: "~ [eb5,g5,bb5] [bb4,eb5,g5]@2",
  I: "~ [a4,d5,gb5] [a4,d5,gb5]@2", J: "d5@4 c5@4 bb4@3 c5 ~@4", K: "~@13 [d5,f5,bb5]@3",
  L: "[d5,f5,bb5]@3 [d5,f5,bb5] ~@2 [d5,f5,bb5] ~@5 [d5,f5,bb5] [c5,e5,a5] [bb4,d5,g5] [c5,e5,a5]", // Bb Am Gm Am
  M: "[bb4,d5,g5]@3 [bb4,d5,g5] ~@2 [bb4,d5,g5] ~ [a4,c5,f5]@3 [bb4,d5,g5]@3 ~@2", // Gm F Gm
  N: "[d5,f5,bb5]@3 [d5,f5,bb5] ~@2 [d5,f5,bb5] ~@4 [c5,e5,a5] [bb4,d5,g5] [c5,e5,a5]@3", O: "[bb4,eb5,g5]",
  P: "g4 gb4, [a4,d5,a5]", // D5
})).s("gm_piano").gain(0.45)

// chords · piano · soft notes
const piano_soft = note("<A@3 ~ B C@2 D ~@4 B C@2 D ~@9 B C@2 D ~@39>".pickRestart({
  A: "~@5 [g4,d5,g5]!3", B: "~@4 [g4,d5,g5]!2 ~@2", C: "~@3 [g4,d5,g5]!3 ~@2", D: "~@3 [a4,d5,gb5,a5]!3 ~@2",
})).s("gm_piano").gain(0.15)

// chords · percussive organ
const percussive_organ = note(`<
  ~@4 A B@3 C@3 D A B@3 C@3 D E F G H I A B@3 C@3 D E F G H E F G H J@2 K L M N@2 E F G H E F G H ~@2 E F G H E F G H O
  P
>`.pickRestart({
  A: "[g4,bb4] [f4,a4], d4", B: "[eb4@4 ~@2 f4@2 ~@3 c5, [g4,bb4] a4, ~ d4@2, ~@2 gb4]/3",
  C: "[g4 gb4 f4 e4 [eb4,g4]@2, bb4]/3", D: "~@2 d5 c5, [d4,gb4], a4@3 ~",
  E: "[g5,bb5,d6]@3 [e5,g5,c6] ~@4 [g5,bb5,d6] [g5,bb5,d6]@2 [g5,c6,d6] ~@4", // Gm C Gm Gsus4
  F: "[bb5,d6,f6]@7 g5 [g5,c6,e6]!2 ~@3 [f5,bb5,d6]@3", // Bb C Bb
  G: "[g5,bb5,d6]@4 [e5,g5,c6] ~@3 [g5,bb5,d6] [g5,bb5,d6]@2 [e5,g5,c6] ~@4", H: "[bb5,d6,f6] [g5,c6,e6]",
  I: "[g5,bb5,d6] ~@7", J: "[~@15 d5@16 ~, [d4,g4,bb4]@31 ~]/2",
  K: "[bb4,d5,f5]@5 ~ [bb4,d5,f5] ~ [g4,c5,e5]@5 ~ [g4,c5,e5] ~", // Bb C
  L: "[g4,bb4,d5]@5 ~ [g4,bb4,d5] ~ [f4,a4,c5]@3 [g4,bb4,d5]@5", // Gm F Gm
  M: "[bb4,d5,f5]@5 [bb4,d5,f5]@2 ~ [g4,c5,e5]@6 [g4,c5,e5] ~", N: "[~@3 gb5, [g4,bb4,eb5] [a4,d5], ~ g5@2 ~]/2",
  O: "[g5,bb5,d6]", P: "[g5,bb5,d6]!2 ~@14",
})).s("gm_percussive_organ").gain(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@20 A B A B ~@9 A B A B A B A B ~@7 A B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "[g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,bb4,d5] [e4,g4,c5] ~ [e4,g4,c5] [g4,bb4,d5]!4 ~ [g4,bb4,d5]!3", // Gm C Gm
  B: "[f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5]!2 ~ [f4,bb4,d5] [e4,g4,c5]!4 ~ [e4,g4,c5]!3", // Bb C
})).s("gm_electric_guitar_clean").gain(0.3)

// chords · clavinet · Gm F Gm F
const clavinet = note(`<
  ~@56
  [~@2 [g4,bb4,d5]!11 [f4,a4,c5]!3]
  [[f4,a4,c5] ~ [g4,bb4,d5]!11 [f4,a4,c5]!3]
  [[f4,a4,c5] ~@15]
  ~@9
>`).s("gm_clavinet").gain(0.25)

// drums · kick
const kick = s("bd").struct("<A@3 B A@8 C A@7 D@3 E F A@8 D@8 G@7 D@8 G@2 D@8 H I>".pickRestart({
  A: "x ~@2 x!2 ~@3 x ~@3 x ~@3", B: "x ~@2 x!2 ~@3 x ~@7", C: "~@3 x!2 ~@3 x ~@3 x ~@3",
  D: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", E: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3", F: "x ~@2 x!2 ~@3 x!2 ~ x!2 ~@2 x",
  G: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", H: "x", I: "x!2 ~@14",
})).gain(0.45)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B A C A B A@5 D E D A@2 F G A H E I E A J E A@3 K G A H L M N A L M N A J D E O E@3 L M N A L M N A P@2 L M N A L M
  N A ~@2
>`.pickRestart({
  A: "x!16", B: "x!15 ~", C: "x!8 ~@8", D: "x!14 ~@2", E: "~ x!15", F: "x!3 ~@2 x!11", G: "x!4 ~@2 x!8 ~@2",
  H: "x!13 ~ x!2", I: "x!12 ~@2 x!2", J: "~ x!3 ~ x!11", K: "x!4 ~ x!11", L: "~ x!13 ~@2", M: "x!6 ~@2 x!4 ~@2 x ~",
  N: "~ x!5 ~@2 x!6 ~@2", O: "x!8 ~ x!7", P: "~ x!11 ~@2 x!2",
})).gain(0.25)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@8 B ~@3 C D ~@2 B E B ~ F B ~@3 C D ~@2 B E B ~ B E B ~ F ~ B G B@4 E B ~ B E B ~ H@2 B E B ~ B E B ~ B I
>`.pickRestart({
  A: "~ x", B: "x", C: "~ x ~@2", D: "~@4 x!2 ~@10", E: "~@13 x ~@2", F: "x!2 ~@2", G: "~@8 x ~@2 x ~@4",
  H: "x ~@12 x ~@2", I: "x!2 ~@14",
})).gain(0.35)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@12 [~ x!7] [x!8]!53 x ~>").gain(1.01)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@12 [x ~@2 x ~@2 x ~@3 x ~@2 x ~@2]!54 x ~>").gain(0.58)

stack(
  bass, synth_brass_1, synth_strings_1, piano, piano_soft, percussive_organ, electric_guitar_clean, clavinet, kick,
  snare, hihat, open_hat, crash, cabasa, woodblocks
)

More by Alison Moyet