Strudelify

Virtuale

Carboni

KeyD minorTempo104 bpm
0:00/0:00
// Virtuale — Carboni
// 104.2 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(104.2/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 C B A B C D A B C B A B C D A B C B A B C D A B C B A B C D E F G D E F G D E F G D A B C B A B C D A B C B A B C
  D A B C B A B C D A B C B A B C D E F G D E F G D E F G D E F G D E F G D E F G D H@2 ~
>`.pickRestart({
  A: "d2 ~ d2 ~@4 d2 ~ d2!2 ~@5", B: "g1 ~ g1 ~@3 g1!2 ~ g1 g1@2 ~@4", C: "a1 ~ a1 ~@4 a1 ~ a1!2 ~@5",
  D: "a1 ~ a1 ~@3 a1!2 ~ a1 a1@2 ~@4", E: "f1 ~ f1 ~@4 f1 ~ f1!2 ~@5", F: "bb1 ~ bb1 ~@3 bb1!2 ~ bb1 bb1@2 ~@4",
  G: "c2 ~ c2 ~@4 c2 ~ c2!2 ~@5", H: "d2/2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · electric guitar jazz · "JAZZ GUITA"
const electric_guitar_jazz = note(`<
  A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A
  B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@3
>`.pickRestart({
  A: "~@2 d5 ~ c5 ~ a4 ~ d5 ~@2 c5 ~@2 a4 ~", B: "~@2 d5 ~ c5 ~ a4 ~ d5 ~@2 c5 ~@2 g4 ~",
})).s("gm_electric_guitar_jazz").gain(0.35)

// chords · epiano1 · "EL PIANO"
const epiano1 = note(`<
  A@2 B C D E F G A@2 B C D E F G A@2 B C D E F G A@2 B C D E F G H@2 I@2 J@4 K@2 L M A@2 B C D E F G A@2 B C D E F G
  A@2 B C D E F G A@2 B C D E F G H@2 I@2 J@4 K@2 L M H@2 I@2 J@4 K@2 L M N@3
>`.pickRestart({
  A: "[[d3,a3,c4,d4] [g2,g3,bb3,d4], f4]/2", B: "[a2,a3,c4,e4], d4 ~@15", C: "[g2,g3,bb3,d4,f4]@15 ~",
  D: "[d3,a3,c4,d4,f4]", E: "[g2,g3,d4,f4]", F: "[a2,g3,c4,e4]", G: "[a2,g3,db4,e4]",
  H: "[[f3,a3,c4] [bb2,a3,d4], f4]/2", I: "[[c3,g3,c4]@16 [g3,a3,db4]@15 ~, e4@31 ~, ~@16 a2@13 ~@3, ~@16 b2 ~@15]/2",
  J: "[[f2,f3,a3,c4] [bb2,a3] [c3,g3,c4] [g3,a3,db4], f4@31 ~ e4@32, ~@16 d4@31 ~ a2@14 ~@2]/4", // F Bbmaj7 C5 A7
  K: "[[f2,f3,a3,c4] [bb2,a3,d4], f4@31 ~]/2", L: "[c3,g3,d4,e4], c4@13 ~@3", M: "[a2,g3,db4,g4]",
  N: "[[d2,d3,c4,e4,f4,a4]@43 ~@5]/3", // Dm7
})).s("gm_epiano1").gain(0.3)

// chords · electric guitar jazz · "RITHM GT"
const electric_guitar_jazz_2 = note(`<
  A B C D E@2 F G A B C D E@2 F G A B C D E@2 F G A B C D E@2 F G H B C I H B C I H B C I A B C D E@2 F G A B C D E@2 F
  G A B C D E@2 F G A B C D E@2 F G H B C I H B C I H B C I H B C I H B C I H B C I J@3
>`.pickRestart({
  A: "d3 a3 [d4,f4,a4] d4 a3 [d4,f4,a4] ~@2 [d4,f4,a4] ~ d3 [d4,f4,a4] ~@2 [d4,f4,a4]!2", // Dm
  B: "~ d4 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~ f4 [d4,f4,a4] [d4,f4]", // Dm
  C: "[c4,e4,g4] ~ [c4,e4,g4] ~@2 [c4,e4,g4] ~ c4 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4]@2", // C
  D: "d4 ~ [bb3,d4,f4] ~ bb3 [bb3,d4,f4] ~ bb3 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] d4", // Bb
  E: "[bb3 ~ [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~ bb3 [d4,f4,a4] ~@2 [d4,f4,a4] [d4,f4,a4]@2 d4 [f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~ bb3 [d4,f4,a4] ~ [d4,f4] [d4,f4,a4] [d4,f4]]/2", // Dm F Dm
  F: "[c4,e4,g4] ~ [c4,e4,g4] c4 ~ [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~ c4 [c4,e4,g4] c4", // C
  G: "a3 db4 [db4,e4,g4] ~ a3 [db4,e4,g4] a3!2 [db4,e4,g4] ~ a3 [db4,e4,g4] ~ a3 [db4,e4,g4]!2", // Dbdim
  H: "f3 a3 [c4,f4,a4] c4 a3 [c4,f4,a4] ~@2 [c4,f4,a4] ~ d3 [c4,f4,a4] ~@2 [c4,f4,a4]!2", // F
  I: "db4 ~ [a3,db4,e4] ~ a3 [a3,db4,e4] ~ a3 [a3,db4,e4] ~@2 [a3,db4,e4] ~@2 [a3,db4,e4] db4", // A
  J: "[[d2,d3]@31 ~ d2@13 ~@3, c4@15 ~, f3@7 ~@9, a3@19 ~@29, e4@17 ~@31]/3", // D
})).s("gm_electric_guitar_jazz").gain(0.3)

// other · pad sweep · "SYNTH"
const pad_sweep = note(`<
  ~@32 A B C ~ A B C D E F G D ~@32 A B C ~ A B C D E F G D A B C ~ A B C D E F G D H@2 ~
>`.pickRestart({
  A: "f6", B: "d6", C: "c6", D: "a6@13 ~@3", E: "f6@13 ~@3", F: "d6@15 ~", G: "c6@15 ~", H: "[d4,a5]/2",
})).s("gm_pad_sweep").gain(0.1).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x ~ x ~@4 x ~ x!2 ~@5]!100 ~@3>").gain(0.54)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!100 ~@3>").gain(0.6)

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

// drums · shaker
const shaker = s("sh").struct("<[~ x ~ x ~ x ~ x]!100 ~@3>").gain(0.54)

stack(bass, electric_guitar_jazz, epiano1, electric_guitar_jazz_2, pad_sweep, kick, kick_soft, rim, cabasa, shaker)

More by Carboni