Strudelify

Vedo risorgere il sole

Carboni

KeyF minorTempo100 bpm
0:00/0:00
// Vedo risorgere il sole — Carboni
// 100 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · epiano1
const epiano1 = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C B C ~@16 B C B C B C B C B C B C B C B C B C B C B C B C B C B C ~@4
>`.pickRestart({
  A: "~@15 [eb4,ab4,c5]", B: "[eb4,ab4,c5] ~ [eb4,ab4,c5] ~@3 [f4,bb4,d5] ~@8 [eb4,ab4,c5]",
  C: "[eb4,ab4,c5] ~ [eb4,ab4,c5] ~@3 [d4,f4,bb4] ~@8 [eb4,ab4,c5]", // Ab Bb Ab
})).s("gm_epiano1").gain(0.33)

// bass · synth bass 2
const bass = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D E F E F E F E F A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "f1@3 ~ f2@2 f1@2 ab1@2 bb1@2 c2@2 ab1@2", B: "f1@2 f2 ~ f2@2 f1 ~ f1!2 eb2@2 bb1@2 c2@2",
  C: "f1 ~ f2 f1 g1 bb1 c2 ab1", D: "f1@2 f2 ~ f1@3 ~ f1!2 eb2@2 bb1@2 c2@2", E: "f1@3 ~@12 f1", F: "f1!2 ~@6",
})).s("gm_synth_bass_2").gain(0.48)

// other · epiano2
const epiano2 = note(`<
  ~@16 A B@2 ~@9 A B@2 ~ A B@2 ~ C D E F G D G H I ~@7 A B@2 ~ A B@2 ~ C D E F G D G H I ~@19 A J@4 B@2 ~ K L A J@2 B@2
  ~@14
>`.pickRestart({
  A: "~@9 f3!5 eb3@2", B: "[f3 f3@8 ~@7]/2", C: "~@14 ab3!2", D: "bb3!2 ab3 bb3@2 bb3 ab3@2 c4@2 c4 ~@3 ab3!2",
  E: "bb3!2 ab3 bb3@2 bb3 ab3@2 f3@2 ~@4 ab3!2", F: "bb3!2 ab3!2 bb3!2 ab3 c4 ~ c4 ab3 c4 ~ c4 ~ ab3",
  G: "bb3!2 ab3 bb3@2 ab3@2 f3@2 ~@5 ab3!2", H: "bb3!2 ab3 bb3 ~ bb3 ab3 ~ c4 ~ f3 ~ bb3 ~ ab3 ~",
  I: "bb3!2 ab3 ~ bb3 ab3@2 f3@2 ~@7", J: "[f3@2 f3@16 ~@7 f3!5 eb3@2]/2", K: "~@4 bb3@2 ab3 ~ bb3 ~ bb3@2 ab3 ~ c4 ~",
  L: "ab3 f3@3 ~@12",
})).s("gm_epiano2").gain(0.72)

// other · synth brass 1
const synth_brass_1 = note(`<
  ~@20 A ~@8 B@7 C D ~@2 A ~@3 A E F E G E F E G B@7 C D ~@2 A ~@3 A H I H I H I H J B@7 K L ~@14 A ~@7 A ~@4 M@4
>`.pickRestart({
  A: "~@6 [f5,f6] ~", B: "[f5,f6] ~ [f5,f6] ~ [f5,f6] ~ [f5,f6] ~",
  C: "[f5,f6]@2 ~@2 [f5,f6]@2 ~@2 [f5,f6]@2 ~@2 [b5,c6] [e5,f5,g5,a5] [a4,b4,c5,d5] [d4,e4,f4,g4]", D: "[b3,c4] ~@15",
  E: "~ [f2,f3] [d3,d4] ~ [eb3,eb4]@2 ~ [e3,e4] ~@8", F: "~@4 [eb3,eb4]@2 ~@2 [d3,d4] [ab2,ab3] [eb2,eb3] ~@5",
  G: "[eb3,eb4] [ab2,ab3] [d2,d3] ~@9 [f5,f6]@2 ~@2", H: "f1@3 ~@12 f1", I: "f1!2 ~@6",
  J: "f1 ~ f1 ~@6 c3 [d3,eb3,f3,g3,ab3] [bb3,c4,d4,eb4,f4,g4] [ab4,bb4,c5,d5,eb5,f5] [d5,eb5,e5] ~@2", // Ddim Cm7 Fm7
  K: "[f5,f6]@2 ~@2 [f5,f6]@2 ~@2 [f5,f6]@2 [c3,d3,eb3] [f3,g3,ab3,bb3,c4,d4] [eb4,f4,g4,ab4,bb4,c5] [c5,d5,eb5] [d4,eb4,f4,g4,ab4,bb4] [eb3,f3,g3,ab3,bb3,c4]", // F Cm Gm7 Cm7 Cm Ebmaj7 Cm7
  L: "[c3,d3] ~@15", M: "f2/4",
})).s("gm_synth_brass_1").gain(0.28)

// other · pad sweep
const pad_sweep = note("<~@21 A@2 ~@6 A@8 ~@16 A@8 ~@16 A@8 ~@8 B@4 C@4 D@3 E@5 F@2 G@2 H@4>".pickRestart({
  A: "[f5@7 eb5]/2", B: "[f5@63 ~]/4", C: "[ab5@63 ~]/4", D: "c5/3", E: "[~@16 ab4@63 ~, g5 ~@3]/5", F: "f4/2",
  G: "ab4/2", H: "f2/4",
})).s("gm_pad_sweep").gain(0.32)

// other · synth strings 1
const synth_strings_1 = note(`<
  ~@37 A B A B A B A B ~@16 A B A B A B A B ~@16 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 B A B C@4
>`.pickRestart({
  A: "f3@5 ~ f3@2 ab3@2 bb3@2 c4@2 ab3@2", B: "f3@5 ~ f3@2 ab3@2 bb3@2 c4@4", C: "f2/4",
})).s("gm_synth_strings_1").gain(0.29)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x ~ x ~@7 x!2 ~@3 x]!68
  [x ~ x ~@5 x ~ x!2 ~@3 x]!8
  x!4
  [x ~ x ~@5 x ~ x!2 ~@3 x]!4
  [x ~ x ~@7 x!2 ~@3 x]!28
  ~@4
>`).gain(0.8)

// drums · clap
const clap = s("cp").struct("<~@45 [~@3 x]!8 ~@64>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~ 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 B 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 B A B A B A B
  A B A B A B A B A B A B A B A B A B ~@4 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 B A B A B A B ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@3",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@69 A B A B A B A B ~@4 A B A B ~@32>".pickRestart({
  A: "~@7 x ~ x ~@6", B: "~@7 x ~@8",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!112 ~@4>").gain(0.56)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!16]!76 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!4 [x!16]!32 ~@4>").gain(2.03)

stack(
  epiano1, bass, epiano2, synth_brass_1, pad_sweep, synth_strings_1, kick, clap, snare, low_tom, hihat, tambourine,
  cabasa
)

More by Carboni