Strudelify

Vento selvaggio

Antonello Venditti

KeyD majorTempo60 bpm
0:00/0:00
// Vento selvaggio — Antonello Venditti
// 60 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(60/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(`<
  ~@2 A B C D E F G H A B C I J B K L M N O P Q R S T U V W X Y Z AA AB AC AD AA AB AE AF AG AH W I AI B W AJ M N O P Q
  AK AL P U AM AN X AO AP AA AQ R AP AA AQ R AP AA AQ R AP AA AQ AR AS@2
>`.pickRestart({
  A: "g1@5 ~ g1 ~ g1@8", B: "e1@5 ~ e1 ~ e1@7 ~", C: "c1@5 ~ c1 ~ c1@8", D: "d1@5 ~ d1 ~ d1@3 a1@3 d2 d1",
  E: "g1@5 ~ g1 ~ g1@5 b1 d2@2", F: "e2@5 ~ e1 ~ e1@6 e2 d2", G: "c2@5 ~ c2 ~ c2@6 a1 c2",
  H: "d2@5 ~ d1 ~ d1@3 ~ d2@2 a1 d1", I: "d1@5 ~ d1 ~ d1@7 ~", J: "g1@5 ~ g1 ~ g1@7 d1", K: "c1@5 ~ c1 ~ c1@5 d1 e1@2",
  L: "d1@5 ~ d1 ~ d1@3 a1 d2@4", M: "e1@5 ~ e1 ~ e1@8", N: "a1@5 ~ a1 ~ a1@6 c#1 e1",
  O: "f#1@5 ~ f#1 ~ f#1@4 e1 f#1 a1@2", P: "g1@5 ~ g1 ~ g1@7 a1", Q: "d1@5 ~ d1 ~ d1@4 d2 a1 d1 ~",
  R: "a1@5 ~ a1 ~ a1@7 ~", S: "f#1@5 ~ f#1 ~ f#1@7 ~", T: "g1@5 ~ g1 ~ g1@4 g2 g1 a1@2", U: "d1@5 ~ d1 ~ d1@5 ~ d1 e1",
  V: "f1@5 ~ f1 ~ f1@7 g1", W: "c1@5 ~ c1 ~ c1@7 ~", X: "d1@5 ~ d1 ~ d1@8", Y: "d1@8 d1@7 ~",
  Z: "d1@5 ~ d1 ~ d1@6 a1 d2", AA: "b1@5 ~ b1 ~ b1@7 a1", AB: "g1@5 ~ g1 ~ g1@5 ~ g1 a1", AC: "a#1@5 ~ a#1@2 c2@7 ~",
  AD: "d2@6 d1 ~ d1@6 d2 c#2", AE: "a#1@5 ~ a#1@2 c2@8", AF: "d2@5 ~ d1 ~ d1@4 c2@3 ~", AG: "g1@5 ~ g1 ~ g1@6 d1 d#1",
  AH: "e1@5 ~ e1 ~ e1@6 e1 d1", AI: "g1@5 ~ g1 ~ g1@7 ~", AJ: "d1@5 ~ d1 ~ d1@6 ~ d1",
  AK: "a1@5 ~ a1 ~ a1@4 a1 c#2 e2@2", AL: "f#2@6 f#2 c#2 f#1@6 e1 f#1", AM: "f1@5 f1 c2 f2 f1@3 f1 f2 f#1 c2 f1",
  AN: "c2@5 ~ c1 ~ c1@8", AO: "d1@7 a1 d2@4 d1@4", AP: "d2@6 d1 ~ d1@7 ~", AQ: "g1@5 ~ g1 ~ g1@5 ~ d1 e1",
  AR: "a1@5 ~ a1 ~ a1@8", AS: "[~ d2@18 ~@13]/2",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@2 ~@17 B@2 C@2 B@2 C@2 D E F@2 G H I J G H I J K ~@9 B@2 C@2 B@2 C@2 D E F@2 G H I L G H I L G H I L G H I M N@2
>`.pickRestart({
  A: "[[a#1,f3,a#3,d#4]@31 ~]/2", B: "[e5,e6]@2 [d5,d6] [c#5,c#6]",
  C: "[~@2 [c#5,c#6] [b4,b5] [a4,a5]@4, [d5,d6]@31 ~]/2", D: "c6@3 d6, f5", E: "c6@6 d6 e6, g5",
  F: "[~@3 a6, [a5,d6], ~@16 e5@15 ~]/2", G: "[d5,f#5]", H: "c#5 b4, f#5", I: "[a4,a5] [g4,g5]", J: "[f4,f5] [e4,e5]",
  K: "[d4,d5]@12 [c4,c5]@3 ~", L: "[e4,e5]@15 ~", M: "[e4,e5]", N: "[~ [d5,f#5]@18 ~@13]/2",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.6)

// chords · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@2 A@2 B C A@2 B C ~@8 D E ~ F C E ~ F C G B H@2 I J K L I J K L M A@2 B C ~@4 D E ~ F C E ~ F C G B H@2 I J K N I J
  K N I J K N I J K O P@2
>`.pickRestart({
  A: "[g3,b3]@15 ~", B: "[g3,c4]", C: "[a3,d4]", D: "[b3,e4]", E: "[a3,e4]", F: "[g3,d4]", G: "[f3,c4]", H: "[a3,d4]/2",
  I: "[d4,f#4]", J: "c#4 d4, f#4", K: "[b3,d4]", L: "[a#3,d4] [c4,e4]", M: "[d4,f#4]@3 [c4,e4]", N: "[c#4,e4]@15 ~",
  O: "[c#4,e4]", P: "[~ [d4,f#4]@18 ~@13]/2",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.4)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@10 A B C D A B C D ~@2 E ~@3 E ~@19 A B C D ~@2 E ~@3 E ~@24>".pickRestart({
  A: "[g3,d4]", B: "[f#3,d4]", C: "[g3,c4]", D: "[a3,d4]", E: "[a3,e4]",
})).s("gm_string_ensemble_1").gain(0.16).pan(0.4)

// other · pad choir
const pad_choir = note("<~@43 A B C B D E F@7 G ~@3 H I J I K I J I K I J I K I J I L ~@2>".pickRestart({
  A: "~@13 c5!3", B: "c5 b4!4 a4!4 g4!2 g4@2 c5!3", C: "c5 b4!4 a4!4 b4 g4@3 c5!3", D: "c5 b4!4 a4 e5!3 d5 d5@6",
  E: "e5 e4!9 e5!3 d5!3", F: "d5 c#5!4 b4!4 a4!4 d5!3", G: "d5 c#5!4 b4!4 a4!4 ~@3", H: "~@13 g5!3",
  I: "g5 f#5!4 e5!4 d5!2 d5@2 g5!3", J: "g5 f#5!4 e5!4 f#5 d5@3 g5!3", K: "g5 f#5!4 e5 b5!3 a5!4 g5!3",
  L: "g5 f#5!4 e5 b5!3 a5!3 a5@3 ~",
})).s("gm_pad_choir").gain(0.32).pan(0.4)

// chords · piano
const piano = note(`<
  ~@2 A B C D A B C D E F G H E F G I J K L M N K L M N O P Q R S T U V S T U V W A B C D E F G I J K L M N K L M N O P
  Q R S T U X S T U X S T U X S T U Y Z@2
>`.pickRestart({
  A: "[b3,d4]@13 ~ d4 ~, g3@15 ~, ~@13 b3@2 ~", B: "[g3,b3,d4]@13 c4 d4@2, ~@13 g3@2 ~",
  C: "[g3,c4,e4]@13 g3 [g3,d4] ~, ~@13 c4@3", D: "[a3,d4,g4]@8 [a3,d4,f#4]@5 a3 [a3,d4,f#4]@2",
  E: "[g3,b3,d4]@13 ~ [g3,b3,d4]@2", F: "[f#3,a3,d4]@13 ~ [d4,g4]@2", G: "[g3,c4,e4]@13 g3 [g3,c4,e4]@2",
  H: "g3@8 ~@3 f#4@2 e4 [f#3,a3,d4] ~, a3@7 ~, d4@11 ~@5, ~@8 f#3@5 ~@3", // D
  I: "g3@8 f#3@5 ~ [f#3,a3,d4] ~, a3@7 ~, d4@11 ~@5", J: "a3@8 g#3@4 ~ g#3 [b3,e4]@2, [b3,e4]@13 ~@3",
  K: "[a3,b3,c#4,e4]@6 ~ [c#4,e4], ~@12 a3@2 a3 ~, ~@13 b3@2 ~", L: "[a3,b3,c#4,e4]@6 ~ [a3,c#4], ~@14 f#3 ~",
  M: "[g3,a3,b3,d4]@2 [g3,a3,c#4] [g3,b3,d4]", // G A7 G
  N: "[a3,d4,e4,a4]@8 ~ d4 e4 ~ e3 f#3 a3 ~, ~@9 [a3,a4]@4 ~@3, ~@11 d4@2 ~@3", O: "[f3,a3,c4]@11 ~ a3 g3 f3@2, ~@3 c4",
  P: "[e3,g3,c4]@12 c4 d4 e4@2, ~@12 [e3,g3]@3 ~", Q: "[f#3,a3]@13 ~ a3@2, d4, ~@13 f#3@2 ~",
  R: "[f#3,d4]@9 ~ [f#3,e4]@2 e4@2 d4@2, a3@3 [f#3,a3]", S: "[f#3,a3,d4]@11 f#3 [f#3,a3,e4]@4",
  T: "[f#3,b3,c#4]@8 [f#3,b3]@5 ~ a3@2, ~@8 d4@7 ~, ~@13 f#3@2 ~", // F#sus4 B5
  U: "[g3,a3,b3,d4]@10 ~ b3 [d4,a4] ~ d4@2, ~@3 b3, ~@13 g4@2 ~", // G D5
  V: "[f3,a#3,d4]@5 ~ [a#3,d4]@2 [c4,e4]@4 ~@2 e4 ~, ~@5 f3@3 g3@3 ~ g3@3 ~, ~@13 c4@2 ~", // A# C
  W: "[a3,d4]@12 [e3,g3,c4]@3 ~, f#3@5 ~@3", X: "a3@4 ~ a3@3 a3@2 ~ a3 ~ a3@2 ~, [c#4,e4]@11 ~ [c#4,e4,a4]@3 ~",
  Y: "a3@4 ~ a3@3 a3@2 ~ a3 ~ a3@3, [c#4,e4]@11 ~ [c#4,e4,a4]@4", Z: "[~ [f#3,a3,d4]@18 ~@13]/2",
})).s("gm_piano").gain(0.32)

// other · orchestra hit
const orchestra_hit = note("<~@2 A ~@3 A ~@12 B ~@3 B ~@7 C ~@3 C ~@3 C ~@9 B ~@29>".pickRestart({
  A: "g3 ~@7", B: "a3 ~@7", C: "d4 ~@7",
})).s("gm_orchestra_hit").gain(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@2 B C D E B C D E F G H I F G H I J K L F G M N F G O P Q@2 R S T U R S T U V B C D E F G H I J K L F G M N F G O P
  Q@2 R S T W R S T W R S T W R S T X Y ~
>`.pickRestart({
  A: "[[a#1,f3,a#3,d#4]@31 ~]/2", B: "b3@2 c4 b3, [g3,d4]", C: "[e3,g3,b3]", D: "c4@2 d4 c4, [g3,e4]",
  E: "g4 f#4, [a3,d4]", F: "[g3,b3,d4]", G: "[f#3,a3,d4]", H: "[e3,g3,c4]", I: "g3 f#3, [a3,d4]",
  J: "a3@8 g#3@7 ~, [b3,e4]@15 ~", K: "[a3,c#4,e4]", L: "[f#3,a3,c#4]", M: "[a3,c#4,e4]@15 ~", N: "[c#4,e4,g#4]",
  O: "[f3,a3,c4]", P: "[g3,c4]", Q: "[f#3,a3,d4]/2", R: "[a3,d4]", S: "[f#3,b3]", T: "[g3,b3]", U: "[f3,a#3] [g3,c4]",
  V: "[a3,d4]@3 [g3,c4]", W: "[a3,c#4]@15 ~", X: "[a3,c#4]", Y: "~ [a3,d4]@15",
})).s("gm_synth_strings_1").gain(0.32).pan(0.6)

// other · overdriven guitar
const overdriven_guitar = note("<~@43 [a4@2 d5 a4@2 d5 a4@9 ~] ~@35>").s("gm_overdriven_guitar").gain(0.48)

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

// drums · rim
const rim = s("rim").struct("<~@10 A@4 B@3 A ~@9 B@3 ~@10 A@4 B@3 ~@32>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A@3 B A@3 C ~@4 D@3 ~@2 D@3 E D@3 C D@3 F A@3 B A@3 G D ~@4 D@3 C D A@3 D A@3 D A@3 F A@3 H A@3 I A@3 B A@3 D ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x!2 ~@2", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~ x ~@2", E: "~@2 x ~@2 x!2 ~",
  F: "~ x!2 ~@2 x ~@2 x ~@7", G: "~@4 x ~@4 x ~@6", H: "~ x!2 ~@13", I: "~@3 x ~@3 x ~@8",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@5 A ~@3 A ~@8 A ~@7 A ~@3 A B ~@6 A C ~@8 D ~@3 D ~@3 E ~@3 A B ~@2 F ~@3 E ~@7 A ~@2
>`.pickRestart({
  A: "~@15 x", B: "x", C: "~@9 x ~@2 x ~ x!2", D: "~@14 x!2", E: "~@4 x ~@10 x", F: "~@13 x!3",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@2 [~ x!15] [x!16]!73 [x!14 ~ x] x ~>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A ~@3 A ~@8 B ~@3 C ~@3 A ~@3 D ~@3 A ~@3 E F ~@7 C G ~@3 G ~@3 H ~@3 D ~@3 I ~@3 J ~@3 A ~@3 K ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@7 x!2 ~", C: "~@14 x!2", D: "~@13 x!2 ~", E: "~@12 x!3 ~", F: "~@9 x ~@2 x!2 ~@2",
  G: "~@10 x!4 ~@2", H: "~@3 x ~@2 x ~@3 x ~ x ~ x ~", I: "~@6 x!3 ~ x!3 ~@3", J: "~@10 x ~ x!3 ~",
  K: "~@10 x ~ x!2 ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@18 A ~@3 B ~@7 C ~@29 C ~@3 D ~@14>".pickRestart({
  A: "~ x ~@3 x!2 ~", B: "~@13 x ~@2", C: "~@10 x!3 ~@3", D: "~@5 x ~@10",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@19 [~@3 x]!3 ~ [~@3 x]!3 ~@53>").gain(0.48)

// drums · splash
const splash = s("cr").struct(`<
  ~@2 A ~@2 A@2 ~@2 A@2 ~@2 B A ~@2 B A@2 ~@3 A ~@3 A B A ~ A ~@3 A ~@3 C A ~@3 A ~@2 B A@2 ~@2 A@2 ~@2 C A B A ~ A ~ A
  B A ~ A B A ~ A ~ A ~ A@2 D ~
>`.pickRestart({
  A: "x", B: "~@15 x", C: "x ~@14 x", D: "~ x ~@14",
})).gain(0.4)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@2 A@16 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@2 A@7 ~@2 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@3
>`.pickRestart({
  A: "~@13 x ~@2",
})).gain(1.28)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@2 A@16 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@2 A@7 ~@2 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@3
>`.pickRestart({
  A: "~@14 x!2",
})).gain(1.28)

// drums · claves
const claves = s("clave:2").struct("<~@2 [~@6 x!2 ~@8]!75 ~@2>").gain(1.96)

// drums · shaker
const shaker = s("sh").struct("<~@2 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!74 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2] x ~>")
  .gain(0.16)

stack(
  bass, string_ensemble_1, string_ensemble_1_2, string_ensemble_1_soft, pad_choir, piano, orchestra_hit,
  synth_strings_1, overdriven_guitar, kick, rim, snare, low_tom, hihat, mid_tom, high_tom, tambourine, splash, congas,
  congas_2, claves, shaker
)

More by Antonello Venditti