Strudelify

Cuccuruccucu

Battiato

KeyA majorTempo186 bpm
0:00/0:00
// Cuccuruccucu — Battiato
// 186 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 191 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): CUCCURRU.
setcpm(186/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.

// other · electric guitar muted · "CUCCURRU"
const electric_guitar_muted = note(`<
  ~@8 A B C D E B C D A B C D A B C D F G H I@2 J C K F G H I@2 J C K L M N C O P Q@2 R@2 S T A B C D E B C D A B C D A
  B C D F G H I@2 J C K F G H I@2 J C K L M N C O P Q@2 R@2 S T A B C D E B C D A B C D A B C D U V W X Y Z AA AB U V AC
  X AD Z AE AB U V W X Y Z AF AG AH@2 ~@2 AI AJ AK@2 AI AJ AL@2 A B C D E B C D A B C D A B C D U V W X Y Z AA AB U V AC
  X AD Z AE AB U V W X Y Z AF AG AM@3
>`.pickRestart({
  A: "a2 a3 a2 a3 a2 a3 a2 a3", B: "a2@2 a3@2 a2@2 a3@2 a2@2 a3@2 a2@2 a3 ~", C: "e2 e3 e2 e3 e2 e3 e2 e3",
  D: "e2@2 e3@2 e2@2 e3@2 e2@2 e3 ~ e2@2 e3 ~", E: "a2@2 a3@2 a2@2 a3 ~ a2@2 a3@2 a2@2 a3@2", F: "f#2!2",
  G: "a2@7 ~ e2@7 ~", H: "e2@7 ~ b2@8", I: "f#2@7 ~ f#2@8", J: "d2!2", K: "e2 e3 e2 e3 e3@2 ~@2",
  L: "a2@2 d3@3 ~ d3 ~ a2@2 e3@3 ~ e3 ~", M: "e2@2 e3@2 e2@2 e3@2 e2@2 e3 ~ e2@2 e3@2",
  N: "a2@2 d3@3 ~ d3@2 a2@2 e3@3 ~ e3 ~", O: "a2@2 d3@3 ~ d3@2 a2@2 e3@3 ~ e3@2",
  P: "e2@2 e3@2 e2@2 e3@2 e2@2 e3@2 e2@2 e3 ~", Q: "b2@2 b3@3 ~ b3@2 b2@2 b3@2 ~@2 b3@2",
  R: "b2@2 b3@3 ~ b3@2 b2@2 b3@3 ~ b3 ~", S: "e3@2 e4 ~ e3@2 e4@2 e3@2 e4@2 e3@2 e4@2", T: "e3 ~@3",
  U: "a2@2 a3@2 ~@2 a3@2 e2@2 e3@2 ~@2 e3 ~", V: "e2@2 e3@3 ~ e3 ~ b2@2 b3@3 ~ b3@2",
  W: "f#2@2 f#3@2 ~@2 f#3@2 c#2@2 c#3@3 ~ c#3 ~", X: "d2@2 d3@3 ~ d3 ~ f#3@2 a3@3 ~ d3@2",
  Y: "a2@2 a3@3 ~ a3@2 e2@2 e3@3 ~ e3 ~", Z: "e2@2 e3@2 ~@2 e3 ~ e2@2 e3@2 ~@2 e3 ~", AA: "b2 a3 b3 a3 b3 b3@2 e2",
  AB: "f#2@2 e2@2 f#2@2 e2 ~ f#2@2 f#2@4 f#2 ~", AC: "f#2@2 f#3@2 ~@2 f#3 ~ c#2@2 c#3@3 ~ c#3 ~",
  AD: "a2@2 a3@3 ~ a3 ~ e2@2 e3@3 ~ e3 ~", AE: "b2@2 a3@2 b3@2 a3@2 b3@2 b3@4 e2 ~", AF: "b2 a3 b3 a3 b3 b3@2 e3",
  AG: "f#3@2 e3@2 f#3@2 e3@2 f#3@2 f#3@4 f#3 ~", AH: "[a2@2 a2@2 a2@2 a2 ~ a2@24]/2",
  AI: "[d3,d4]@2 ~@2 [c#3,c#4] ~ [d3,d4]@2 ~@2 [c#3,c#4] ~ [b2,b3]@4", AJ: "[a2,a3]@11 ~ [a2,a3]@2 [b2,b3] ~",
  AK: "[[e2,e3]@6 [e3,e4]@3 ~ [e3,e4]@3 ~@5 [g#3,g#4]@10 ~@4, ~@7 [e3,e4]@3 ~@6]/2", // E G# E
  AL: "[[e2,e3]@6 [e3,e4]@3 ~ [e3,e4]@3 ~ [e3,e4]@6 ~@12]/2", AM: "[a2@2 a2@2 a2@2 a2 ~ a2@2 a2@2 a2@2 a2@24 ~@10]/3",
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.3)

// chords · rock organ · "CUCCURRU"
const rock_organ = note(`<
  ~@8 A@8 B@8 C D E F@2 G H@2 C D E F@2 G I@2 J K L M L M N@4 O@2 P@2 Q@2 R@4 B@8 C D E F@2 G H@2 C D E F@2 G I@2 J K L
  M L M N@4 O@2 P@2 Q@2 R@4 B@8 S T U V S W X Y S T U V S W X Y S T U V S W X Y ~@4 A@16 B@8 S T U V S W X Y S T U V S W
  X Y S T U V S W X Y ~@3
>`.pickRestart({
  A: "[f#6@16 ~@16 g#6@32 f#6@16 ~@16 g#6@31 ~, a6 ~ a6 ~, ~@16 e6@49 ~@15 e6@47 ~]/8",
  B: "[f#6 ~ g#6@2 f#6 ~ g#6@2, a6 ~ a6 ~, ~@16 e6@49 ~@15 e6@48]/8", C: "[f#5,a5]", D: "[e5,a5]", E: "[e5,g#5]",
  F: "[f#5, d5 ~]/2", G: "[d5,f#5]", H: "[e5,g#5]/2", I: "[g#5@30 [g#3,a3] [a#3,b3,c4], e5]/2",
  J: "[a5,d6,f#6] [a5,c#6,e6], c#4 ~@15", K: "~@9 [e5,f5] [c5,d5] [a4,b4] [f4,g4] [d4,e4] [b3,c4] a3, e6, [g#5,b5]@3 ~",
  L: "[a5,d6,f#6] [a5,c#6,e6]", M: "[g#5,b5,e6]", N: "[[d5,f#5,b5] [d#5,f#5,b5]]/4", O: "[e5,g#5,b5]/2",
  P: "[e6 c#6, a6]/2", Q: "[b5,g#6]/2", R: "[f#6@16 ~@16 g#6@31 ~, a6 ~, ~@16 e6@47 ~]/4", S: "[e5,a5,c#6]",
  T: "[e5,g#5,b5]", U: "[f#5,a5]@7 ~, c#6", V: "[d5,f#5,a5]", W: "[g#5,b5], e5@7 ~", X: "[f#5,b5]", Y: "[f#5,c#6]",
})).s("gm_rock_organ").gain(0.37).pan(0.7)

// other · overdriven guitar · "CUCCURRU"
const overdriven_guitar = note("<~@39 A B C D@2 E ~@38 A B C D@2 E ~@51 F G H I F G H I ~@43>".pickRestart({
  A: "~@11 f#5@3 ~@2", B: "f#5@4 f#5@3 ~ f#5@4 e5@2 ~@2", C: "~@7 g#5", D: "[~@4 a5@3 ~@5 g#5 ~ g#5@8 ~@10]/2",
  E: "f#5 ~ f#5 ~ f#5 ~ f#5 ~ f#5@4 e5 ~@3", F: "a3!8", G: "~ a3!5 ~ a3", H: "~ e3!2 ~ e3 ~ e3 ~", I: "e3!8",
})).s("gm_overdriven_guitar").gain(0.35).pan(0.8)

// chords · string ensemble 2 · "CUCCURRU"
const string_ensemble_2 = note("<~@24 A@5 B C D A@5 B E@2 ~@28 A@5 B C D A@5 B E@2 ~@107>".pickRestart({
  A: "[a4 c#4 f#4 ~@2 e4 a4 c#5 b4 e4 g#4 ~@2 d4 f#4 ~@2 a#4 b4@2, [f#3,a3] e3@2 [f#3,b3] f#3, ~@12 a4@8 ~@24 b4@8 ~@8 b4@7 ~@13, ~ a3 g#3 ~@2]/5", // F#m B5
  B: "a4 d4 f#4 a4, [f#3,a3]", C: "[g#3,g#4] [b3,b4] [e3,e4] [g#3,g#4], e2 ~@7", D: "[a3,a4]@3 [g#3,g#4]",
  E: "[[g#3,g#4] [b3,b4] [e3,e4] [g#3,g#4] [g#3,g#4] [b3,b4] [e3,e4] [g#3,g#4], e2]/2", // G# B E G# B E G#
})).s("gm_string_ensemble_2").gain(0.49).pan(0.4)

// bass · fretless bass · "CUCCURRU"
const bass = note(`<
  ~@8 A B C D A E F D A B C D A B C D G H I J G K F D G H I J G K F D L M L M L M N@4 D@2 O B C D A E F D A B C D A B C
  D G H I J G K F D G H I J G K F D L M L M L M N@4 D@2 O B C D A E F D A B C D A B C D H I P Q R S T U H I P Q R S T U
  H I P Q R S V W X@2 ~@2 A B C D A E F D A B C D A E F D A B C D A B C D H I P Q R S T U H I P Q R S T U H I P Q R S V
  W Y@3
>`.pickRestart({
  A: "d1@2 d2@2 ~@2 d2 ~ d1@2 d2@3 ~ d2 ~", B: "a1@2 a2@2 ~@2 a2@2 a1@2 a2@2 ~@2 a2 ~",
  C: "e1@2 e2@3 ~ e2 ~ e1@2 e2@3 ~ e2@2", D: "e1@2 e2@2 e1@2 e2 ~ e1@2 e2@2 e1@2 e2 ~",
  E: "a1@2 a2@2 ~@2 a2 ~ a1@2 a2@2 ~@2 a2 ~", F: "e1@2 e2@2 ~@2 e2 ~ e1@2 e2@3 ~ e2@2",
  G: "f#1@2 f#2@2 ~@2 f#2 ~ f#1@2 f#2@3 ~ f#2 ~", H: "a1@2 a2@2 ~@2 a2@2 e1@2 e2@2 ~@2 e2 ~",
  I: "e1@2 e2@3 ~ e2 ~ b1@2 b2@3 ~ b2@2", J: "b0@2 b1@3 ~ b1 ~ f#1@2 f#2@3 ~ f#2@2",
  K: "d1@2 d2@2 ~@2 d2 ~ d1@2 d2@2 ~@2 d2 ~", L: "d1 ~ a1@6 a1@8", M: "e1@2 e2@2 ~@2 e2@2 e1@2 e2@2 ~@2 e2 ~",
  N: "b1@2 b1@2 ~@2 b1 ~ b1@2 b1@3 ~ b1@2", O: "a1@2 a2@2 ~@2 a2 ~ a1@2 a2@3 ~ a2 ~",
  P: "f#1@2 f#2@2 ~@2 f#2 ~ c#1@2 c#2@3 ~ c#2 ~", Q: "d1@2 d2@3 ~ d2 ~ f#2@2 a2@3 ~ d2@2",
  R: "a1@2 a2@2 ~@2 a2 ~ e1@2 e2@3 ~ e2 ~", S: "e1@2 e2@2 ~@2 e2 ~ e1@2 e2@2 ~@2 e2 ~",
  T: "b1@2 a2@2 b2@2 a2 ~ b2@2 b2@4 e1 ~", U: "f#1@2 e1@2 f#1@2 e1 ~ f#1@2 f#1@4 f#1 ~",
  V: "b1@2 a2@2 b2@2 a2 ~ b2@2 b2@4 e2 ~", W: "f#2@2 e2@2 f#2@2 e2 ~ f#2@2 f#2@4 f#2 ~",
  X: "[a1@2 a1@2 a1@2 a1 ~ a1@24]/2", Y: "[a1@2 a1@2 a1@2 a1 ~ a1@2 a1@2 a1@2 a1@24 ~@10]/3",
})).s("gm_fretless_bass").gain(0.59)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 [~ x ~@3 x ~@2]!181 ~@2>").gain(0.26)

// drums · snare
const snare = s("sd").struct("<~@8 A@41 B A@17 B A@25 B A@17 B A@77 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B A B A B A B A B A C A B A C D B A B A B A B A B A C A B A C A B A B A B A C A C D C A B A B A B A B A B A C A
  B A E D B A B A B A B A B A C A B A C A B A B A B A C A C D C A B A B A B A B A B A C A B A E D B A B A B A B D B A B
  A B A B D B A B A B A B D B A B A B A B A B A B A B A B A B A B A B A C A B A C D B A B A B A B D B A B A B A B D B A
  B A B A B F ~@2
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!6 ~@2", D: "~ x!7", E: "x!2 ~@2 x!2 ~@2", F: "~ x!6 ~",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ B ~ B ~ B ~ A ~ A ~ A ~ A ~ A ~ B ~ A
  ~ C ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~@3 A ~ B ~ B ~ B ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ C ~ A ~@3 A ~@3 A ~ A ~ A ~@3
  A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~ x ~ x",
})).gain(0.26)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@87 A ~@27 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@31 A ~@3 A ~@7>".pickRestart({
  A: "~@7 x",
})).gain(0.13)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A B A@38 B A@84 C A@19 C A@34 D ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!2 ~@2 x ~", C: "~@2 x ~@3 x!2", D: "~@2 x ~@4 x",
})).gain(0.39)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@8 A B A@38 B A@84 C A@19 C A@34 C ~@2>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@7 x", C: "~@3 x ~@4",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A ~@25 A ~@17 A ~@25 A ~@17 A ~@7 A ~@7 A ~@7 A ~@27 A ~@7 A ~@7 A ~@7 B ~@2
>`.pickRestart({
  A: "x", B: "x ~@6 x",
})).gain(0.26)

stack(
  electric_guitar_muted, rock_organ, overdriven_guitar, string_ensemble_2, bass, kick, kick_soft, snare, hihat,
  open_hat, open_hat_soft, mid_tom, mid_tom_soft, crash
)

More by Battiato