Strudelify

Cosa succedera alla ragazza

Battisti

KeyC minorTempo139 bpm
0:00/0:00
// Cosa succedera alla ragazza — Battisti
// 138.5 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 169 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(138.5/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 · slap bass 2
const bass = note(`<
  A@72 B C D E F G H I B@2 J K L M L M L M L N L M L M L M L M A@16 B C D E F G H I B@2 J K L M L M L M L N L M L M L M
  L N L M L M L M L N L M L M L M L N L M L M ~@2 O N P
>`.pickRestart({
  A: "c2@3 ~ bb1@3 c2 ~ c2 g1@4 bb1@2", B: "c2@3 ~ bb1@2 ~ c2@2 c2 ab1@3 bb1@2 ~",
  C: "c2@3 ~ bb1@3 c2@2 c2 ab1@3 bb1@2 ~", D: "c2@3 ~ bb1@2 ~ c2@2 c2 a1@3 bb1@2 ~",
  E: "c2@3 ~ bb1@3 c2@2 c2 a1@3 bb1@2 ~", F: "d2@3 ~ c2@2 ~ d2@2 d2 bb1@3 c2@2 ~",
  G: "d2@3 ~ c2@3 d2@2 d2 bb1@3 c2@2 ~", H: "d2@3 ~ c2@2 ~ d2@2 d2 g1@3 c2@2 ~", I: "d2@3 ~ c2@3 d2@2 d2 g1@3 c2@2 ~",
  J: "a1@3 ~ g1@2 ~ a1@2 a1 f1@3 g1@2 ~", K: "a1@3 ~ g1@3 a1@2 a1 f1@3 g1@2 ~",
  L: "c2@3 ~ bb1@2 ~ c2@2 c2 g1@3 bb1@2 ~", M: "c2@3 ~ bb1@3 c2@2 g2 g1@3 bb1@2 ~",
  N: "c2@3 ~ bb1@2 ~ c2@2 g2 g1@3 bb1@2 ~", O: "~@4 bb1@2 ~ c2@2 c2 g1@3 bb1@2 ~", P: "c2@3 ~@13",
})).s("gm_slap_bass_2").gain(0.41)

// chords · pad warm
const pad_warm = note(`<
  ~@8 A@2 B@6 A@2 B@6 A@2 B@6 A@2 B@6 A@2 B@6 A@2 B@6 A@2 B@6 A@2 B@6 C@8 D@2 E ~ F G H@2 F G H@2 F G H@2 I@2 J@2 A@2
  B@6 A@2 B@6 C@8 D@2 E ~ F G H@2 F G H@2 F G H@2 F G H@2 F G H@2 F G H@2 F G H@2 F G H@2 F G H@2 F ~ H@2 ~
>`.pickRestart({
  A: "[eb4,g4,c5]/2", B: "[[d4,f4,bb4]@31 ~ [c4,eb4]@31 ~ bb4@31 ~, ~@31 ab4@32 [d4,g4]@32 ~]/6",
  C: "[[eb4,ab4]@31 a4@32 ~@32 g4@33, c4@63 ~ [bb3,d4]@64, ~@31 f4@64 ~@33]/8", D: "[c4,eb4,ab4]/2", E: "[db4,f4,a4]",
  F: "[c5,eb5]", G: "[bb4,d5]", H: "[ab4,c5]/2", I: "[bb4,d5]/2", J: "[c5,eb5]/2",
})).s("gm_pad_warm").gain(0.36)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@9 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@31 A ~@3 B ~@3 A ~@3
  B ~@55
>`.pickRestart({
  A: "~@12 [bb4,g5]@3 [c5,f5]", B: "~@12 [c5,g5]@3 [bb4,f5]",
})).s("gm_lead_8_bass_lead").gain(0.26)

// other · pad new age
const pad_new_age = note(`<
  ~@15 A@3 ~@5 A@3 ~@13 A@3 ~@9 B@3 ~ A@3 ~@5 A@3 ~@25 A@3 ~@17 B@3 ~ A@3 ~@13 A@3 ~@5 A@3 ~@5 A@3 ~@5 A@3 ~ A@3 ~@3 A@3
  ~
>`.pickRestart({
  A: "[~@4 g4 ~ g4@2 c5 ~ c5 ~ g5 ~ eb5@23 ~@11]/3", B: "[~@4 g4 ~ g4@2 c5 ~ c5 ~ f5 ~ eb5@23 ~@11]/3",
})).s("gm_pad_new_age").gain(0.36).pan(0.1)

// chords · pad poly
const pad_poly = note(`<
  ~@16 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2
  C@2 D@2 E@4 F@2 G H ~@16 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2 C@2 D@2 E@4 F@2 G H ~@41
>`.pickRestart({
  A: "[[c5,eb5,g5]@7 ~]/2", B: "[[c5,eb5,ab5]@7 ~]/2", C: "[eb4@15 ~]/2", D: "[a4@15 ~]/2", E: "[bb4@15 ~]/2",
  F: "ab4/2", G: "[d5,a5]", H: "[eb5,bb5,c6,eb6]",
})).s("gm_pad_poly").gain(0.26)

// other · clavinet
const clavinet = note(`<
  ~@24 A B C D A D C B A B C D A D C B A B C D A D C B A B C D A D C B A B C D A D C B A B C D A D C B ~@28 A B C D A D
  C B A B C D A D C B ~@53
>`.pickRestart({
  A: "g2 ~@2 c3 eb3 d3 eb3 ~ c3 ~ c3 d3 ~@4", B: "~@2 c3 eb3 ~ d3 eb3 ~@9", C: "g2 ~@2 c3 eb3 d3 eb3 ~ g2 ~@2 d3 ~@4",
  D: "~@2 c3 eb3 ~ d3 eb3 ~ g2 ~@7",
})).s("gm_clavinet").gain(0.26).pan(1)

// other · electric guitar clean
const electric_guitar_clean = note("<~@72 A B C@3 D E@3 F ~@34 A B C@3 D E@3 F ~@43>".pickRestart({
  A: "~@8 c3@3 d3@2 eb3@3", B: "c3@8 ab2@3 bb2@2 c3@3", C: "[f2@40 d3@3 eb3@2 f3@3]/3", D: "d3@8 bb2@3 c3@2 d3@3",
  E: "[g2@40 eb3@3 f3@2 g3@3]/3", F: "eb3",
})).s("gm_electric_guitar_clean").gain(0.36)

// other · tuba
const tuba = note("<~@72 A@2 B@6 C@2 D ~@33 A@2 B@6 C@2 D ~@42>".pickRestart({
  A: "eb4/2", B: "[f4@31 ~]/2", C: "[ab4@31 ~]/2", D: "a4",
})).s("gm_tuba").gain(0.2).pan(0.9)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@84 A B A C A B A C A B A C D E A ~@29 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 C A B A C ~@2 A
  B F
>`.pickRestart({
  A: "[c3,g3]@2 [c3,g3]@2 [bb2,f3]@2 [c3,g3]@3 ~@7", B: "[c3,g3]@2 [c3,g3]@2 [bb2,f3]@11 ~",
  C: "[c3,g3]@2 [eb3,g3]@2 [bb2,f3]@11 ~", D: "[bb2,f3]@2 [bb1,bb2]@2 [bb2,eb3]@2 [bb2,f3]@3 ~@7",
  E: "[bb2,f3]@2 [bb1,bb2]@2 [bb2,d3]@11 ~", F: "[c3,g3] ~@7",
})).s("gm_overdriven_guitar").gain(0.26).pan(0.4)

// chords · string ensemble 1 · C5 Bb5 C5
const string_ensemble_1 = note(`<
  ~@84
  [[g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3]!12
  [[f5,bb5] ~@3 [f5,bb5] ~@3 [f5,bb5] ~@3 [f5,bb5] ~@3]!2
  [[g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3]
  ~@29
  [[g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3 [g5,c6] ~@3]!40
  [g5 ~@15]
>`).s("gm_string_ensemble_1").gain(0.41).pan(0.7)

// other · orchestra hit
const orchestra_hit = note("<~@96 [f4 ~@3] ~@72>").s("gm_orchestra_hit").gain(0.41)

// other · whistle
const whistle = note("<~@72 A B C ~ D E F ~ G H ~@34 A B C ~ D E F ~ G H ~@43>".pickRestart({
  A: "~@8 c5@3 d5@2 eb5@3", B: "c5@8 ab4@3 bb4@2 c5@3", C: "f4@11 ~@5", D: "~@8 d5@3 eb5@2 f5@3",
  E: "d5@8 bb4@3 c5@2 d5@3", F: "g4@3 ~", G: "~@8 eb5@3 f5@2 g5@3", H: "eb5",
})).s("gm_whistle").gain(0.2).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@4 [x!2]!95 ~ [x!2]!64 ~@2 [x!2]!2 ~>").gain(0.41)

// drums · snare
const snare = s("sd").struct("<~@4 [~ x ~ x]!95 ~ [~ x ~ x]!64 ~@2 [~ x ~ x]!2 ~>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!4]!95 ~ [x!4]!64 ~@2 [x!4]!2 ~>").gain(0.41)

// drums · splash
const splash = s("cr").struct("<~@84 A ~@7 A ~@35 A ~@7 A ~@7 A ~@7 A ~@7 A ~@8>".pickRestart({
  A: "x",
})).gain(0.41)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@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 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 ~ A B A B A B A B A B A B A B A ~ 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 ~ 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 ~@2 A B ~
>`.pickRestart({
  A: "~@8 x ~@2 x ~@4", B: "~@5 x ~ x",
})).gain(1.15)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@4 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 ~ 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 A ~@2
>`.pickRestart({
  A: "~@3 x ~@3 x",
})).gain(1.15)

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

// drums · claves
const claves = s("clave:2").struct("<~@4 A@79 ~ A@15 ~ A@27 ~ A@36 ~@2 A@2 ~>".pickRestart({
  A: "x ~ x ~ x ~@2 x!2 ~ x ~@3 x ~",
})).gain(1.25)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@4 A@79 ~ A@15 ~ A@27 ~ A@36 ~@2 A@2 ~>".pickRestart({
  A: "~@3 x ~@2 x ~@4 x ~@4",
})).gain(0.37)

// drums · lt
const lt = s("lt").struct("<~@88 A ~@7 A ~@35 A ~@7 A ~@7 A ~@7 A ~@11 A>".pickRestart({
  A: "x",
})).gain(0.41)

stack(
  bass, pad_warm, lead_8_bass_lead, pad_new_age, pad_poly, clavinet, electric_guitar_clean, tuba, overdriven_guitar,
  string_ensemble_1, orchestra_hit, whistle, kick, snare, hihat, splash, congas, congas_2, guiro, claves, woodblocks, lt
)

More by Battisti