Strudelify
Il battito animale cover art

1993 · Cannibali

Il battito animale

Raf

KeyC majorTempo106 bpm
0:00/0:00
// Il battito animale — Raf
// 106 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(106/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 · piano
const piano = note(`<
  ~@2 A ~@3 A ~@5 B ~@3 C ~@3 D ~@3 E F ~ G H I J K L M N M N O P Q R S T M N U V ~@5 D ~@3 E W X G H I J K L M N M N O
  P Y R S T M N U V ~@40
>`.pickRestart({
  A: "~@10 a3 ~ a3 a2 a3!2", B: "~@2 [c4,e4] ~ d4 e4 d4 e4 ~@8", C: "~@2 c4 ~ [g3,b3] ~ [g3,b3] [a3,c4] ~@8",
  D: "~ g3 [c4,e4] ~ [b3,d4] e4 [b3,d4] c4@2 ~@7, ~@7 e4 ~@8", E: "~ e3 c4 ~ [g3,b3] ~ [g3,b3] [a3,c4] ~@8",
  F: "f1@3 ~@13", G: "[c4,f4]@3 [g3,c4,f4] ~@2 [g3,c4,e4]@9 ~", H: "[g3,c4,d4]@3 [g3,c4,d4] ~@2 [g3,c4,e4]@8 ~@2",
  I: "c4@3 ~@3 a3@3 ~ a3@6, a4@15 ~, a3 ~@15", J: "~@4 c4@4 [b3,g4,g5]@7 ~",
  K: "[g3,c4,f4]@3 [g3,c4,f4] ~@2 [g3,c4,f4]@10", L: "~ c3 ~ [g3,c4,e4] ~@2 [g3,c4,e4]@9 ~, [g3,c4,e4]@3 ~@13",
  M: "a#1@3 ~ a#2@2 a#1@3 ~ a#2@2 ~ a#1@2 a#2", N: "a#1@3 ~ a#2@2 a#1@3 ~ a#2@3 a#1 ~ a#2",
  O: "f1@2 ~ f2 ~ f2@2 ~ f1@2 f2 ~@4 f1, ~@7 f2", P: "f1@2 ~ f1 ~@2 f2@2 f1@2 ~ f2 ~@3 f2",
  Q: "c2@3 ~ c3@2 c2@3 ~ c3@2 ~ c2@2 c3", R: "c2@3 ~ c3@2 c2@3 ~ c3@3 c2 ~ c3", S: "f2@2 ~ f1 ~@2 f1 ~ a1@2 ~@4 g2 a2",
  T: "a1@3 ~ a2@2 a1@3 ~ a2@3 a1 ~ a2", U: "g1@3 ~ g2@2 g1@3 ~ g2@2 ~ g1@2 g2", V: "g1@4 ~@7 c3 c#3 ~ c3 a2",
  W: "f1@2 g3@2 ~@2 c4@9 ~, ~@4 a3@11 ~", X: "~@3 d4@4 ~, ~@2 d3@13 ~, ~@4 g3@11 ~",
  Y: "c2@3 ~ c3@2 c2@3 ~ c3@3 c2@2 c3",
})).s("gm_piano").gain(0.26).pan(0.6)

// chords · piano · soft notes
const piano_soft = note("<~@2 A ~@3 A ~@5 B ~@3 C ~@3 D ~@3 C E F ~@2 G H ~@21 D ~@3 C ~@4 G H ~@56>".pickRestart({
  A: "~@15 a2", B: "~@4 b3 c4 b3 c4@2 ~@7", C: "~@2 a3 ~@2 [a3,c4] ~@10", D: "~@5 c4 ~@10",
  E: "~@3 c4@4 ~, ~ g3@12 ~@3, ~ a3@5 ~@2", F: "~@3 d4@4 ~, ~@2 d3@13 ~, ~@4 g3@11 ~", G: "~ a3 c4@6",
  H: "~@2 g3@13 ~, d3 ~@3",
})).s("gm_piano").gain(0.15).pan(0.6)

// bass · synth bass 2
const bass = note(`<
  ~@4 A B C B D E C F G H I B J B C K G H I B L M I F N O I P Q R S R T M U V W X Y R S H I B Z E C F G H I B L M I K N
  M I P Q R S R T O U P AA X C R S H AB E ~ K ~ H ~ B AC B C K G H I B J B C F G AD I B J B C F G H I E J B C F G H I B
  J
>`.pickRestart({
  A: "~@10 a1 ~@5", B: "a1@3 a1 ~@3 a1@2 ~ a1 ~@5", C: "a1@2 ~ a1 ~@12", D: "a1@2 ~ a1 ~@8 e1@4",
  E: "a1@3 a1 ~@3 a1@3 a1 ~@5", F: "c1@3 c1 ~@3 c1@2 ~ c1 ~@5", G: "c1@2 ~ c1 ~@12", H: "g1@3 g1 ~@3 g1@2 ~ g1 ~@5",
  I: "g1@2 ~ g1 ~@12", J: "a1@2 ~ a1 ~@3 e1 a1@2 d1@2 g1@4", K: "c1@3 c1 ~@3 c1@3 c1 ~@5",
  L: "a1@2 ~ a1 ~@5 e1 a1!2 g1@4", M: "f1@3 f1 ~@3 f1@2 ~ f1 ~@5", N: "c1@2 ~ c1 ~@2 c1@3 ~ c1 ~ g1 ~ g1 ~",
  O: "f1@3 f1 ~@3 f1@3 f1 ~@5", P: "c2@3 c2 ~@3 c2@2 ~ c2 ~@5", Q: "c2@2 ~ c2 ~@2 c2@3 ~ c2@6",
  R: "a#1@3 a#1 ~@3 a#1@2 ~ a#1 ~@5", S: "a#1@2 ~ a#1 ~@12", T: "a#1@2 ~ a#1 ~@6 d1 ~ d#1 ~ e1 ~", U: "f1@2 ~ f1 ~@12",
  V: "c2@3 c2 ~@3 c2@3 c2 ~@5", W: "c2@2 ~ c2 ~@12", X: "f1@3 f1 ~@3 a1@2 ~ a1 ~@5", Y: "a1@3 a1 ~@12",
  Z: "a1@2 ~ a1 ~@3 e1 g1 e1 b1@2 g1@4", AA: "c2@3 c2 ~@12", AB: "g1@2 ~ g1 ~@3 d1@3 f1@2 g1@3 ~",
  AC: "~@9 g1@2 ~ c2@3 ~", AD: "g1@3 g1 ~@3 g1@3 g1 ~@5",
})).s("gm_synth_bass_2").gain(0.42)

// chords · piano
const piano_2 = note(`<
  ~@33 A B C D E F G H I J K L M N ~@18 A B C D E O G H I J K L M N ~@7 P ~@7 P ~@7 P ~@7 P ~@7 P
>`.pickRestart({
  A: "~@2 [f3,a#3,d#4] ~@2 [f3,a#3,d#4] ~@2 [f3,a#3,d4]@3 [f3,a#3,d4] ~@2 [f3,a#3,c4]@2", // D#sus2 A# Fsus4
  B: "~@2 [f3,a#3,c4] ~@2 [f3,a#3,c4] ~ f3 [f3,a#3,d4]@3 [f3,a#3,d4] ~@2 [f3,a#3,c4] ~", // Fsus4 A# Fsus4
  C: "~@2 [f3,a#3,d#4] ~@2 [f3,a#3,d#4] ~@2 [f3,a#3,d4]@3 [f3,a#3,d4] ~@2 [f3,a#3,d4]@2", // D#sus2 A#
  D: "~@2 [f3,a#3,c4] ~@2 [f3,a#3,c4] ~ f3 [f3,a#3,d4]@3 [f3,a#3,d4] ~@2 [f3,g#3,a#3,c4] ~", // Fsus4 A# Fm
  E: "~@2 [f3,a#3] ~@2 [f3,a#3] ~@2 [f3,a3]@2 ~ [f3,a3] ~@4", // A#5 F
  F: "~@2 [f3,a#3] ~@2 [f3,a#3] ~@2 [f3,a3]@3 [f3,a3] ~@2 [f3,g3] ~", // A#5 F Fsus2
  G: "~@2 [g3,c4,f4] ~@2 [g3,c4,f4] ~@2 [g3,c4,e4]@3 [g3,c4,e4]@2 ~ [g3,c4,d4]@2", // Csus4 C Gsus4
  H: "~@2 [g3,c4,d4] ~@2 [g3,c4,d4] ~@2 [g3,c4,e4]@2 ~ [g3,c4,e4]@2 ~ [g3,c4,d4]@2", // Gsus4 C Gsus4
  I: "~@2 [a3,c4,f4] ~@2 [a3,c4,e4] ~@2 [g3,c4,e4]@2 ~ [g3,c4,e4] ~@2 [g3,c4,d4] ~", // F Am C Gsus4
  J: "~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4]@3 [g3,c4,e4] ~@2 [g3,c4,e4] ~", // C
  K: "~@2 [f3,a#3] ~@2 [f3,a#3] ~@2 [f3,a#3,c4]@3 [f3,a#3,c4] ~@2 [f3,a#3,c4] ~", // A#5 Fsus4
  L: "~@2 [f3,a#3,d4] ~@2 [f3,a#3,d4] ~@2 [f3,a#3,c4]@2 ~ [f3,a#3,c4] ~@2 [f3,a#3] ~", // A# Fsus4 A#5
  M: "~@2 [f3,c4,d4] ~@2 [f3,c4,d4] ~@2 [f3,c4,d4]@2 ~ [f3,c4,d4] ~@2 [g3,b3,d4] ~", // Dm7 G
  N: "~@2 [g3,d4] ~@2 [g3,d4] ~@2 a#3 b3 g3 ~@5", // G5
  O: "~@2 [f3,a#3] ~@2 [f3,a#3] ~@2 [f3,a3]@3 a3@2 ~ [f3,g3] ~, ~@11 f3 ~@4", // A#5 F Fsus2
  P: "~ e3 [a3,c4] ~ [g3,b3] [a3,c4] [g3,b3] [a3,c4] ~@8", // Am G Am G Am
})).s("gm_piano").gain(0.19)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@10 A B ~@6 A B ~@30 A B ~@36 A B ~@6 A B ~@6 A B ~@6 A B ~ C D E ~
>`.pickRestart({
  A: "~@15 c3", B: "c2@2 g2 ~ a2@2 ~@10", C: "~@2 d3 ~ e3@2 g3@4 ~@6", D: "~@15 a3", E: "a3 ~@3 g3@2 ~@10",
})).s("gm_electric_guitar_muted").gain(0.08).pan(0)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@13 A B C ~ D ~@3 A B C ~@24 E D ~@3 A B C ~@31 D ~@3 A B C ~ D ~@3 A B C ~ D ~@3 A B C ~ D ~@7
>`.pickRestart({
  A: "~@2 d3 ~ e3@2 g3@4 ~@6", B: "~@15 a3", C: "a3 ~@3 g3@2 ~@10", D: "~@2 g3 ~@5", E: "~ a4@15, [a3,c4,e4]",
})).s("gm_overdriven_guitar").gain(0.06).pan(0)

// chords · rock organ
const rock_organ = note(`<
  ~@9 A B C D E F A B A B C D E F A B ~@24 A B C D E F A B ~@22 A B G H I J A K A B G H I J A B A B G H I J A L A B G H
  I J A K ~@8
>`.pickRestart({
  A: "~@3 [f4,b4,d5]", B: "[e4,a4,c5] ~@7", C: "~@3 [d5,f5]", D: "[c5,e5]@3 ~@13",
  E: "[g4,d5] ~@6 [g4,b4]@3 [g4,b4] ~ [e4,c5]@4", F: "[d4,b4]@3 ~@13", G: "~@3 [a4,d5,f5]", H: "[g4,c5,e5]@5 ~@11",
  I: "~@3 [e4,a4,c5]", J: "[d4,g4,b4]@7 ~@9", K: "~ a2 ~@14, [e4,a4,c5] ~@7", L: "~ a2 ~@14, [e4,a4,c5]@3 ~@13",
})).s("gm_rock_organ").gain(0.24).pan(0.7)

// chords · percussive organ
const percussive_organ = note("<~@86 A ~@15 A ~@7 A B C D E F G B H>".pickRestart({
  A: "~@4 a3 ~ g3 c4 ~@7 a3", B: "~@3 [f4,b4,d5]", C: "[e4,a4,c5] ~@7", D: "~@3 [a4,d5,f5]", E: "[g4,c5,e5]@5 ~@11",
  F: "~@3 [e4,a4,c5]", G: "[d4,g4,b4]@7 ~@9", H: "~ a2 ~@2 a3 ~ g3 c4 ~@7 a3, [e4,a4,c5] ~@7",
})).s("gm_percussive_organ").gain(0.16).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note("<~@33 A@4 B C D@4 ~@3 E ~@18 A@4 B C D@4 ~@3 E ~@40>".pickRestart({
  A: "a#5 ~@3 a#5 ~@3 a#5 ~@3 a#5 ~@3", B: "~@2 c4 d#4 f4 c4 d#4 f4 g#4 a4 ~@6", C: "d#4 f4 c4 ~@5 a#3 c4 ~@6",
  D: "c6 ~@3 c6 ~@3 c6 ~@3 c6 ~@3", E: "~@4 e6 ~@11",
})).s("gm_string_ensemble_1").gain(0.21).pan(0.4)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@43 A B C D ~@28 A B C D ~@40>".pickRestart({
  A: "a#4@8 c5@7 ~", B: "d5 f5", C: "g5",
  D: "~@5 [d6,d#6] c#6 [b5,c6] a#5 [g#5,a5] g5 [f5,f#5] e5 [d5,d#5] c#5 [b4,c5]", // D#maj7 Cmaj7 Amaj7 F#maj7 D#maj7 Cmaj7
})).s("gm_string_ensemble_1").gain(0.1).pan(0.4)

// chords · electric guitar muted
const electric_guitar_muted_2 = note(`<
  ~@9 A ~@3 B ~ A ~@5 B ~ A ~@29 B ~ A ~@35 B ~ A ~@5 B ~ A ~@5 B ~ A ~@5 B ~ A ~
>`.pickRestart({
  A: "~ [a2,e3] ~@6", B: "~@2 d3 ~@13",
})).s("gm_electric_guitar_muted").gain(0.07).pan(1)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@9 A ~ B ~@3 C ~ D ~ B ~@3 C ~@24 E D ~ B ~@3 C ~@31 D ~ B ~@3 C ~ D ~ B ~@3 C ~ D ~ B ~@3 C ~ D ~ B ~@3 C ~
>`.pickRestart({
  A: "~@4 g3@2 [a3,e4,e5]@3 ~@7", B: "~@6 [c3,g3]@3 ~@7", C: "~@6 [a3,e4,e5]@3 ~@7",
  D: "~@2 [a2,e3]@2 ~@2 [a3,e4,e5]@3 ~@7", E: "[a3,c4,e4,a4]",
})).s("gm_distortion_guitar").gain(0.07).pan(1)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@21 A B C ~ D E F@2 D E G@2 ~@10 H I J ~@7 A B C ~ D E F@2 D E G@2 ~@10 H I J ~ K@2 L M N O K P K@2 L M N O K P K@2 L
  M N O K P K@2 L M N O K P K@2 L M N O K Q
>`.pickRestart({
  A: "[b3,d4]@3 c4", B: "b3", C: "c4@3 f4, a3", D: "[c3,g3,a3]", E: "c4 b3, [d3,g3]",
  F: "[f4@6 e4@10 d4@6 e4@9 ~, [c3,g3,c4]]/2", G: "[f4 e4, [g3,c4]]/2", H: "a#5 c6", I: "d6 f6", J: "g6",
  K: "[e3,a3,c4]@3 [f3,b3,d4]", L: "[g3,c4,e4]@3 [a3,d4,f4]", M: "[g3,c4,e4]", N: "[g3,b3,d4]@3 [g3,a3,c4]",
  O: "[d3,g3,b3]", P: "[e3,a3,c4]", Q: "[e3,a3,c4]@15 [e3,a3,c4]",
})).s("gm_string_ensemble_2").gain(0.09).pan(0.6)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@17 A@2 B@2 C@2 ~ D ~@4 E@2 ~@18 A@2 B@2 C@2 ~ D ~@4 E@2 ~@56>".pickRestart({
  A: "[e4@3 f4 e4@3 f4, [a3,c4]]/2", B: "[g3,c4,g4]/2", C: "[~@12 e4@4 d4@15 ~, g3]/2", D: "[a3,c4]", E: "[a4@3 g4]/2",
})).s("gm_string_ensemble_2").gain(0.05).pan(0.6)

// other · synth drum
const synth_drum = note("<~@4 A B@22 ~@5 C ~@16 B@10 ~@5 C ~@22 B@8 ~@24>".pickRestart({
  A: "~@11 c3 ~@4", B: "c3 ~@2 c3 ~@2 c3 ~@3 c3 ~@5", C: "~@8 b2!8",
})).s("gm_synth_drum").gain(0.04)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@27 A B ~@2 C D ~@26 A B ~@2 C D ~@54>".pickRestart({
  A: "[g3,c4,f4]@2 ~ [c4,f4]@2 ~ [c4,e4]@6 ~@3 [c4,e4]", B: "[c4,d4]@3 [c4,d4] ~@2 [c4,e4]@9 ~",
  C: "[c4,f4]@2 ~ [c4,f4] ~@2 [c4,f4]@8 ~ [c4,f4]", D: "[c4,e4]@3 [c4,e4] ~@2 [c4,e4]@9 ~",
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.3)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@33 A@4 B C D@4 ~@3 E ~@18 A@4 B C D@4 ~@3 E ~@40>".pickRestart({
  A: "a#6 ~@3 a#6 ~@3 a#6 ~@3 a#6 ~@3", B: "~@2 c3 d#3 f3 c3 d#3 f3 g#3 a3 ~@6", C: "d#3 f3 c3 ~@5 a#2 c3 ~@6",
  D: "c7 ~@3 c7 ~@3 c7 ~@3 c7 ~@3",
  E: "g6 [f6,f#6] e6 [d6,d#6] c#6 [b5,c6] a#5 [g#5,a5] g5 [f5,f#5] e5 [d5,d#5] c#5 [b4,c5] a#4 [g#4,a4]", // F#maj7 D#maj7 Cmaj7 Amaj7 F#maj7 D#maj7 Cmaj7 Amaj7
})).s("gm_string_ensemble_1").gain(0.18).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@4 A B@27 C B@13 D B@17 C B@13 D B@40>".pickRestart({
  A: "~@11 x ~@4", B: "x ~@2 x ~@2 x ~@3 x ~@5", C: "x ~@2 x ~@2 x ~ x ~@7", D: "x ~@2 x ~@2 x ~@3 x!2 ~ x ~@2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B@3 C B@15 C B@7 D B@5 C B@7 E B@9 C B@7 D B@5 C B@7 E ~@7 F B@7 G B@24
>`.pickRestart({
  A: "~@12 x ~@2 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~@4 x ~@2 x ~ x ~@2 x!4", E: "~@4 x ~@4 x ~@2 x ~ x!2",
  F: "~@7 x!3 ~@2 x ~@2 x", G: "~@4 x ~@2 x!3 ~@2 x ~ x!2",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 A B C B D B C B C B C B C B C B C B C B C B C B C B C B ~@17 B C B C B C B C B C B C B C B ~@23 C@7 ~ C@24
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@5 x ~@10", C: "~@9 x ~@6", D: "~@9 x ~@3 x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  [~ x ~ x ~ x ~ x]!32
  [~ x ~ x ~@3 x]
  [~ x ~ x ~ x ~ x]!31
  [~ x ~ x ~@3 x]
  [~ x ~ x ~ x ~ x]!53
  [~ x ~ x ~ x ~@2]
>`).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<[~@13 x ~@2] ~@118>").gain(0.32)

// drums · crash
// … 28 more lines

More by Raf