Strudelify
Dreams cover art
KeyG minorTempo133 bpm
0:00/0:00
// Dreams — 2 Brothers on the 4th Floor
// 133 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(133/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// 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(`<
  ~@8 A B C D E B C ~ A B C D E B C ~ F@2 G H F@2 I ~ F@2 G H F@2 I ~ F@2 G H F@2 I ~ A B C D E B C ~ A B C D E B C J
  ~@4 A B C D F@2 G H F@2 I ~ F@2 G H F@2 I ~ A B C D E B C J ~@4 A B C D F@2 G H F@2 I ~ F@2 G ~ F@2 I ~ A B C D E B C
  ~ A B C D E B C J ~@9
>`.pickRestart({
  A: "g1@2 ~ g1 ~@2 g1@2 g1@2 ~ g1 ~@2 g1@2", B: "eb1@2 ~ eb1 ~@2 eb1@2 eb1@2 ~ eb1 ~@2 eb1@2",
  C: "bb1@2 ~ bb1 ~@2 bb1@2 bb1@2 ~ bb1 ~@2 bb1@2", D: "f1@2 ~ f1 ~@2 f1@2 f1@2 ~ f1 ~@2 a1@2",
  E: "g1@2 ~ g1 ~@2 g1 ~ g1@2 ~ g1 ~@2 g1@2", F: "g1@2 ~ g1 ~@2 f1@2 g1@2 ~ g1 ~@2 f1@2",
  G: "g1@2 ~ g1 ~@2 f1@2 g1@2 ~ g1 ~@2 f1 ~", H: "bb1@2 ~ bb1 ~@2 bb1 ~ f1@2 ~ f1 ~@2 f1@2",
  I: "g1 ~@2 g1 ~@2 f1@2 g1@2 ~ g1 ~@2 f1 ~", J: "f1@2 ~ f1 ~@2 f1@2 f1@2 ~ f1 ~@2 f1@2",
})).s("gm_synth_bass_1").gain(0.2)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  A B C D A B C D A B C D A B C ~ A B C D A B C D ~@24 A B C D A B C D A B C D A B C D A B C D A B C D ~@16 A B C D A B
  C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D A B C E ~
>`.pickRestart({
  A: "[g3,bb3,d4]", B: "[g3,bb3,eb4]", C: "[f3,bb3,d4]", D: "[f3,a3,c4]@7 ~", E: "[f3,a3,c4]",
})).s("gm_synth_strings_2").gain(0.3)

// bass · lead 2 sawtooth · "SAW WAVE"
const bass_2 = note(`<
  ~@16 A B C D A B C ~ A@3 E A@3 F A@3 E A@3 F A@3 E A@3 F A B C D A B C ~ A B C D A B C G ~@8 A@3 E A@3 F A@3 E A@3 F A
  B C D A B C G ~@8 A@3 E A@3 F A@3 E A@3 F A B C D A B C ~ A B C D A B C G ~@9
>`.pickRestart({
  A: "g2!2 g1 g2!2 g1 g2 g1 g2!2 g1 g2!2 g1 g2 g1", B: "eb2!2 eb1 eb2!2 eb1 eb2 eb1 eb2!2 eb1 eb2!2 eb1 eb2 eb1",
  C: "bb2!2 bb1 bb2!2 bb1 bb2 bb1 bb2!2 bb1 bb2!2 bb1 bb2 bb1", D: "f2!2 f1 f2!2 f1 f2 f1 f2!2 f1 f2!2 f1 a2 a1",
  E: "bb2!2 bb1 bb2!2 bb1 bb2 bb1 f2!2 f1 f2!2 f1 f2 g1", F: "bb2!2 bb1 bb2!2 bb1 bb2 bb1 f2!2 f1 f2!2 f1 f2 f1",
  G: "f2!2 f1 f2!2 f1 f2 f1 f2!2 f1 f2!2 f1 f2 f1",
})).s("gm_lead_2_sawtooth").gain(0.3)

// other · tremolo strings · "TREMOLOSTR"
const tremolo_strings = note(`<
  ~@24 A@3 B A@3 C ~@3 B ~@3 C ~@3 B ~@3 C ~@27 B ~@3 C ~@3 B ~@3 C ~@16 A@3 B A@3 C ~@3 B ~@3 C ~@25
>`.pickRestart({
  A: "g2@2 g3 ~ g2 g3 ~ g2 g3 ~@7", B: "bb2@2 bb3@2 bb2 ~ bb3@2 f2@2 f3@2 f2@2 a3@2",
  C: "bb2@2 bb3@2 bb2 ~ bb3@2 f2@2 f3@2 f2 ~ a3@2",
})).s("gm_tremolo_strings").gain(0.21)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@24 A@3 B A@3 C ~@3 B ~@3 C ~@3 B ~@3 C ~@27 B ~@3 C ~@3 B ~@3 C ~@16 A@3 B A@3 C ~@3 B ~@3 C ~@25
>`.pickRestart({
  A: "g4@2 g5@2 g4 g5@2 g4 g5 ~@7", B: "bb4 bb5 bb4 bb5 f4 f5 f4 a5", C: "bb4@2 bb5@2 bb4@2 bb5@2 f4@2 f5@2 f4@2 a5 ~",
})).s("gm_lead_2_sawtooth").gain(0.21)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A@7 B A@7 B A@7 B A@7 B A@7 B A@8 C ~@6 B A@7 B A@7 B A@7 B C ~@6 B A@7 B A@3 D A@3 B A@7 B A@8 C ~@8
>`.pickRestart({
  A: "x!4", B: "x ~@5 x!2", C: "x", D: "x!3 ~",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@7 ~ A@7 B A@7 ~ A@7 B A@7 ~ A@8 ~@7 B A@7 ~ A@7 B A@7 B ~@7 B A@7 B ~@4 A@3 B A@7 ~ A@8 ~@9
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~ x ~@2 x ~@2 x!6",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@31 ~ A@7 ~ A@8 ~@8 A@15 ~ A@7 ~@9 A@8 ~@4 A@11 ~ A@8 ~@9>".pickRestart({
  A: "x!16",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@48 ~@7 A@25 ~@7 A@9 ~@4 A@20 ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A@48 ~@7 B A@23 B ~@7 B A@8 ~@4 A@20 ~@9>".pickRestart({
  A: "~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~", B: "~ x ~ x ~ x ~ x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@6 B ~@7 B A ~@14 B A ~@6 B A ~@7 A ~@6 B A ~@14 B A ~@6 B A ~@6 B ~@7 B ~@7 B A ~@6 B A ~@6 B A ~@8
>`.pickRestart({
  A: "x", B: "x!4",
})).gain(0.2)

// drums · bongos
const bongos = s("bongo:4").struct("<~@24 [~ x ~ x ~ x ~ x]!8 ~@72 [~ x ~ x ~ x ~ x]!8 ~@4 [~ x ~ x ~ x ~ x]!4 ~@25>")
  .gain(0.91)

stack(
  bass, synth_strings_2, bass_2, tremolo_strings, lead_2_sawtooth, kick, snare, hihat, open_hat, tambourine, crash,
  bongos
)

More by 2 Brothers on the 4th Floor