Strudelify

Crying in the Rain

Culture Beat

KeyA minorTempo140 bpm
0:00/0:00
// Crying in the Rain — Culture Beat
// 140 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@12 A B A C A B A C A B A C A B A C A B A C A B A C D@8 A B A C A B A ~ A B A C A B A C A B A C A B A C A B A C A B A
  C A B A C A B A ~ D@8 A B A C A B A ~@9 A B A C A B A C A B A C A B A C A B A C A B A ~@2
>`.pickRestart({
  A: "f1 f2 f1 f2 g1 g2 g1 g2", B: "e1 e2 e1 e2 a1 a2 a1 a2", C: "e1 e2 e1 e2 e1 e2 a1 a2",
  D: "a1 a2 a1 a2 a1 a2 a1 a2",
})).s("gm_synth_bass_1").gain(0.37)

// other · pan flute
const pan_flute = note(`<
  A B C D@2 E ~ F@2 ~ G H I J K L M N O P Q R S@2 T@2 U@2 V W X@2 Y Z AA@2 ~@15 L I J K L M N O P Q R S@2 T@2 U@2 V W
  X@2 Y Z AA@2 ~@2 AB AC ~@3 AD ~@17 AE AF AG AH AI ~ L I J K L M N O P Q R S@2 T@2 U@2 V W X@2 Y Z AJ@2 ~
>`.pickRestart({
  A: "~@12 a3 ~ a3 ~", B: "a3@3 ~ a3@2 ~@10", C: "a3@3 ~ a3@2 a3@2 a3@2 ~@6", D: "[~ c5 b4 b4@3 a4@10]/2",
  E: "~@2 g4 e4 g4@2 a4@2", F: "[~@4 g5@2 e5@5 ~ g5@2 e5@5 ~@13]/2", G: "~@4 a4 g4!2 e4", H: "g4@4 ~@2 a4!2",
  I: "c5@2 c5@2 a4@2 a4@2 c5 ~ c5@2 a4@2 e5@2", J: "d5 d5@2 ~@3 a4!2", K: "c5@2 c5@2 a4@2 a4@2 c5@2 c5@2 a4@3 ~",
  L: "~@6 a4!2", M: "c5@2 c5@2 a4@2 a4 ~ c5 ~ c5@2 a4@2 e5@2", N: "d5@2 d5@4 ~@4 a4@2 a4 ~ a4 ~",
  O: "c5@2 c5@2 a4@2 a4@2 c5 ~ c5@2 a4@3 ~", P: "~@4 a5@4 g5@4 e5@3 ~", Q: "~@2 e5@2 d5@3 d5, ~@4 d5 ~@11",
  R: "~@2 d5@2 d5@2 c5@2 e5@3 ~ d5@2 c5@2, ~@8 d#5 ~@7", S: "[~@4 e5@4 d5@5 ~ d5@6 d5@2 g5@4 e5@5 ~, ~@4 d5 ~@27]/2",
  T: "[~@4 e5@4 d5@4 d5 ~ d5@6 d5@2 c5@2 e5@2 a4@2 a4@2 c5@2]/2",
  U: "[e5@2 e5@2 d5@2 c5@2 d5@2 a4@2 a4@2 g4@7 ~@11, ~@14 a4 ~@17]/2", V: "~@4 e5@4 d5@5 ~ d5@2, ~@4 d5 ~@11",
  W: "~ d5!2 c5 e5@2 d5 c5, ~@8 d#5 ~@7", X: "[~@4 e5@3 ~ d5@5 ~ d5@4 d5@4 g5@4 e5@5 ~]/2",
  Y: "~@2 e5@2 d5@2 d5!2, ~@4 d5 ~@11", Z: "~@2 [c5,d5] ~ d5@2 c5@2 e5@2 a4@2 a4@2 c5@2",
  AA: "[[d5,e5] ~ e5@2 d5@2 c5@2 d5@2 a4@2 a4@2 g4@5 ~@13]/2", AB: "~@4 a5 g5!3", AC: "g5@7 ~",
  AD: "~ g5 a5 c6 ~ a5@2 ~", AE: "~@2 g5!6", AF: "a5 ~@3", AG: "~@4 g5@2 g5 ~ g5 ~ g5 ~ g5@2 g5@2", AH: "a5 ~@7",
  AI: "~@2 g5 a5 d6@2 c6@2", AJ: "[[d5,e5] ~ e5@2 d5@2 c5@2 d5@2 a4@2 a4@2 g4@5 ~@4 a5@9]/2",
})).s("gm_pan_flute").gain(0.37)

// bass · synth bass 2 · "SYN BASS 2"
const bass_2 = note("<~@36 A B C D E F C G H F H I H J H F ~@32 A B K F L M C F H N F O H P H F Q ~@32>".pickRestart({
  A: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~@5 a3 ~", B: "a3 ~ a3 ~ a3 ~@3 a3 ~ a3 ~ a3 ~ a3 ~", C: "a3 ~ a3 ~ a3 ~ a3 ~ a3@2 ~@6",
  D: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3@2 ~@2", E: "a3!2 a3@2 a3 ~ a3@2 a3 ~@5 a3 ~",
  F: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~", G: "a3!2 a3@2 a3@2 a3@2 a3@2 a3@2 a3 ~@3",
  H: "~@2 a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~", I: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~@3",
  J: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 a3@2 a3 a3@2", K: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~@7", L: "a3!4 a3@2 a3 ~ a3 ~@7",
  M: "a3!2 a3@2 a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~", N: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~@2 a3 ~@2",
  O: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3!2 ~ a3", P: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3!2", Q: "a3 ~@7",
})).s("gm_synth_bass_2").gain(0.34)

// other · drawbar organ · "ORGAN 1"
const drawbar_organ = note("<A@4 B C B C B C B C ~@121>".pickRestart({
  A: "a1 a2 a3 a2 a1 a2 a3 a2 a1 a2 a3 a2 a1 a2 a3 a2", B: "f1 f2 f3 f2 f1 f2 f3 f2 g1 g2 g3 g2 g1 g2 g3 g2",
  C: "e1 e2 e3 e2 e1 e2 e3 e2 a1 a2 a3 a2 a1 a2 a3 a2",
})).s("gm_drawbar_organ").gain(0.38)

// other · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@4 A B A B A B A B ~@32 C D E F E D E ~@25 A B A B A B A ~@9 C D E F E D E ~ G H G I G H G ~@26
>`.pickRestart({
  A: "f3 ~ f4 ~ c5 ~ a4 ~ g3 ~ d4 ~ b4 ~ g4 ~", B: "e3 ~ e4 ~ g4 ~ e4 ~ a3 ~ a4 ~ c5 ~ a4 ~",
  C: "f4 ~ a4 ~ c5 ~ e5 ~ d5 ~ c5 ~ d5 ~ e5 ~, [f3,c4] [g3,d4]", // F5 G5
  D: "e5 ~ d5 ~ c5 ~ e5 ~ b4 ~ c5 ~ d5 ~ a4 ~, [e3,b3] c4", E: "f4 ~ a4 ~ c5 ~ e5 ~ d5 ~ c5 ~ d5 ~ e5 ~, f3 [g3,d4]",
  F: "e5 ~ d5 ~ c5 ~ d5 ~ e5 ~ e5 ~ c5 ~ a4 ~, [e3,b3]@3 c4", G: "f3 ~ f4 ~ f3 ~ f4 ~ g3 ~ g4 ~ g3 ~ g4 ~",
  H: "e3 ~ e4 ~ e3 ~ e4 ~ a3 ~ a4 ~ a3 ~ a4 ~", I: "e3 ~ e4 ~ e3 ~ e4 ~ e3 ~ e4 ~ a3 ~ a4 ~",
})).s("gm_pad_poly").gain(0.39)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@28 A B A B A B A ~@33 A B A B A B A ~@49 A B A B A B A ~@2>".pickRestart({
  A: "[a3,a5] [e4,e6]", B: "[d4,d6] [e4,e6]",
})).s("gm_string_ensemble_1").gain(0.08)

// other · synth drum
const synth_drum = note("<~@4 A ~@3 A ~@2 B@2 ~@22 C ~@15 D ~@31 E ~@15 F G ~@3 H ~@23 H ~ I@2 J>".pickRestart({
  A: "e1 ~", B: "[~@3 e2@2 ~@3]/2", C: "[e1,e2] ~@7", D: "e2!2 ~ e2!2 ~ e1 ~",
  E: "e2@2 ~ e2@3 b2@2 e2 b2@3 b2@2 e2@2, e1", F: "~@2 e2@3 ~ e2 ~ e2@2 ~@2 e2@2 ~@2", G: "e1@7 ~@9",
  H: "[e1,e2]@2 ~ e2@3 b2@2 e2 b2@3 b2@2 e2@2", I: "[[e1,e2]@2 ~ e2@3 b2@2 e2 b2@3 b2@2 ~ e1@2 ~@15, ~@7 e2 ~@8]/2",
  J: "b0@9 ~@7",
})).s("gm_synth_drum").gain(0.41)

// other · guitar harmonics · "GTHARMONIC"
const guitar_harmonics = note("<~@19 A ~@16 B C@6 D ~@15 A ~@24 B C@6 D ~@23 A ~@17>".pickRestart({
  A: "a4 e3 ~@6", B: "a3 ~@6 a3", C: "a3 ~@13 a3@2", D: "a3 ~@15",
})).s("gm_guitar_harmonics").gain(0.12)

// other · guitar harmonics · "GTHARMONIC" · soft notes
const guitar_harmonics_soft = note("<~ [a3 a2 ~@2] ~ [a3 a2 ~@2] ~@129>").s("gm_guitar_harmonics").gain(0.09)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A ~@3 A ~@2 B C@3 D C@3 A C@3 D C@3 D C@3 D C@3 A C@3 D C@3 E C@3 D C@3 F C@3 D C@3 A C@3 D C@3 D C@3 D C@3 D C@3
  D A ~@2 A C@3 D C@3 E C@3 D C@3 F A ~@3 A ~@3 C@3 D C@3 A C@3 D C@3 D C@3 D A ~ A ~@2
>`.pickRestart({
  A: "x", B: "~@3 x", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "x!3 ~", F: "x!2 ~ x!2 ~ x ~",
})).gain(0.69)

// drums · snare
const snare = s("sd").struct("<~@44 [x!16]!7 ~@41 [x!16]!7 ~@34>").gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@7 ~ A@15 ~ B@8 A@7 ~ A@7 ~ A@23 ~ B@8 A@7 ~@5 A@3 ~ A@7 ~ A@15 ~@2>".pickRestart({
  A: "x!4", B: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
})).gain(0.08)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [x!16]!8 ~@121>").gain(0.15)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@3 A ~@3 A ~@7 A ~@7 A ~@15 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@2 A@2 ~@23 A ~@3 A ~@3 A ~@7 A ~@5 A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.46)

// drums · whistle
const whistle = s("ballwhistle:0").struct("<~@19 [~@2 x!2] ~@39 [~@2 x!2] ~@55 [~@2 x!2] ~@17>").gain(0.3)

stack(
  bass, pan_flute, bass_2, drawbar_organ, pad_poly, string_ensemble_1, synth_drum, guitar_harmonics,
  guitar_harmonics_soft, kick, snare, hihat, open_hat, tambourine, crash, whistle
)

More by Culture Beat