Strudelify

Attenti al lupo

Dalla Lucio

KeyF majorTempo108 bpm
0:00/0:00
// Attenti al lupo — Dalla Lucio
// 108 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D A B C D A E F G F H A B C D A B F G A B C D A I F G F H J K L M N O P Q R S T A I C D A U C D A I F G F H A V
  C W X I F G F H Y Z AA AB AC O P Q R S T X B AD D X V F G F H AE AF@2 X I C D A B F G AG H X I C D A B F G AH AI@2 ~@2
>`.pickRestart({
  A: "~ c3@6 ~@6 e3@9 ~@2", B: "~ f3@8 ~@4 f3@3 ~@3 g3@3 ~@2", C: "~ c3@8 ~@4 e3@8 ~@3",
  D: "~ f3@7 ~@5 f3@4 ~@2 g3@4 ~", E: "~ f3@9 ~@3 f3@4 ~@2 g3@4 ~", F: "~ a2@11 ~ e2@11", G: "~ f2@10 ~@2 f2@6 g2@5",
  H: "~ f2@11 ~ f2@6 g2@4 ~", I: "~ f3@8 ~@4 f3@4 ~@2 g3@4 ~", J: "~ a3@4 ~@8 db3@3 ~@3 e3@4 ~",
  K: "~ a3@3 ~@9 f3@3 ~@3 d3@3 ~@2", L: "~ a3@4 ~@8 db3@3 ~@3 e3@3 ~@2", M: "~ f3@3 ~@9 e3@4 ~@2 d3@3 ~@2",
  N: "~ a3@3 ~@9 db3@4 ~@2 e3@3 ~@2", O: "~ d3@2 ~@10 d3@3 ~@3 f3@3 ~@2", P: "~ g3@4 ~@8 g3@3 ~@3 b3@3 ~@2",
  Q: "~ c4@4 ~@8 c3@4 ~@2 eb3@3 ~@2", R: "~ f3@3 ~@9 f3@3 ~@3 f3@3 ~@2", S: "~ eb3@4 ~@8 eb3@2 ~@4 eb3@3 ~@2",
  T: "~ f3@3 ~@9 f3@3 ~@3 eb3@2 ~ d3 ~", U: "~ f3@8 ~@4 f3@3 ~@3 g3@4 ~", V: "~ f3@8 ~@4 f3@4 ~@2 g3@3 ~@2",
  W: "~ f3@7 ~@5 f3@5 ~ g3@4 ~", X: "~ c3@7 ~@5 e3@9 ~@2", Y: "~ a3@3 ~@9 db3@3 ~@3 e3@4 ~",
  Z: "~ a3@4 ~@8 f3@3 ~@3 d3@3 ~@2", AA: "~ a3@3 ~@9 db3@3 ~@3 e3@3 ~@2", AB: "~ f3@3 ~@9 e3@3 ~@3 d3@3 ~@2",
  AC: "~ a3@4 ~@8 db3@4 ~@2 e3@3 ~@2", AD: "~ c3@8 ~@4 e3@9 ~@2", AE: "~ a2@11 ~ g2@11", AF: "[~ f2@28 ~@19]/2",
  AG: "~ a2@12 e2@11", AH: "~ a3@10 ~@2 g3@11", AI: "[~ f3@46 ~]/2",
})).s("gm_acoustic_bass").gain(0.49)

// bass · acoustic bass · "FLUTE/BASS"
const bass_2 = note(`<
  A B C D A B C D A B E F E G A B C D A B E F A B C D A B E F E G H I J K J L M N ~@2 O ~@4 A B C D A B E F E G A B C D
  A B E F E G H I J K J P M N ~@2 O ~@36
>`.pickRestart({
  A: "~ c2@11 ~ e2@10 ~", B: "~ f2@10 ~@2 f2@5 ~ g2@5", C: "~ c2@10 ~@2 e2@10 ~", D: "~ f2@10 ~@2 f2@5 ~ g2@4 ~",
  E: "~ a2@11 ~ e2@11", F: "~ f2@11 ~ f2@5 ~ g2@5", G: "~ f2@10 ~@2 f2@6 g2@4 ~", H: "~ a2@5 ~@7 db2@4 ~@2 e2@3 ~@2",
  I: "~ a2@4 ~@8 f2@3 ~@3 d2@3 ~@2", J: "~ a2@5 ~@7 db2@4 ~@2 e2@4 ~", K: "~ f2@5 ~@7 e2@3 ~@3 d2@2 ~@3",
  L: "~ d2@5 ~@7 d2@4 ~@2 f2@4 ~", M: "~ g2@5 ~@7 g2@4 ~@2 b2@3 ~@2", N: "~ c3@6 ~@6 c3@4 ~@2 eb3@3 ~@2",
  O: "~ f2@3 ~@9 f3@3 ~@3 eb3@2 ~ d3@2", P: "~ d2@6 ~@6 d2@4 ~@2 f2@4 ~",
})).s("gm_acoustic_bass").gain(0.53)

// other · harpsichord · "FLUTE/BASS"
const harpsichord = note("<~@41 [~ a6 ~@17 eb6 ~@4] ~@72>").s("gm_harpsichord").gain(0.08)

// chords · flute · "FLUTE/BASS"
const flute = note("<~@43 A ~ B ~@32 C D E ~ F D ~@30>".pickRestart({
  A: "~@7 [c6,e6]@3 [b5,d6]@3 [a5,c6]@2 ~ [g5,b5]@3 [f5,a5]@2 ~@3", // C Bm Am G F
  B: "~@7 [c6,e6]@3 [b5,d6]@3 [a5,c6]@3 e6@3 ~@3 a5@2", // C Bm Am
  C: "~@7 [c6,e6]@3 [b5,d6]@3 [a5,c6]@2 ~ [g5,b5]@2 ~ [f5,a5]@2 ~ [e5,g5]@2", D: "~ a5@5 ~@18",
  E: "~@7 [c6,e6]@2 ~ d6@2 ~ a5@2 ~ e6@3 ~@5, ~@13 c6@6 ~@5", F: "~@7 e6@2 ~@4 [a5,c6]@3 [g5,b5]@2 ~ a5@2 ~@3",
})).s("gm_flute").gain(0.1)

// chords · flute · "FLUTE/BASS" · soft notes
const flute_soft = note("<~@43 A B C ~@33 D E@2 F G ~@30>".pickRestart({
  A: "~@11 [e5,g5]", B: "~ [f5,a5]@5 ~@18", C: "~@8 c6@2 ~ f5", D: "~ f5@4 ~@19", E: "[~@10 b5@3 ~@9 [f5,a5]@6 ~@20]/2",
  F: "~@4 g5@2 ~ c6@2 ~ [b5,d6]@3 ~@6 f5@2 ~ [e5,g5]@2", G: "~ f5@5 ~@18",
})).s("gm_flute").gain(0.05)

// other · acoustic guitar nylon · "FLUTE/BASS"
const acoustic_guitar_nylon = note("<~@76 [~ a6 ~@17 eb6 ~@4] ~@37>").s("gm_acoustic_guitar_nylon").gain(0.4)

// chords · electric guitar jazz · "GTR/TRUMPT" · Am G Am
const electric_guitar_jazz = note("<~@10 [~ [a4,c5]@10 ~@2 [g4,b4]@9 ~@2] ~ [~ [a4,c5]@11 ~@10 [a4,c5]@2] ~@101>")
  .s("gm_electric_guitar_jazz").gain(0.62)

// chords · electric guitar jazz · "GTR/TRUMPT" · soft notes · F G
const electric_guitar_jazz_2 = note("<~@11 [~ [f4,a4]@5 ~@18] [~@13 [g4,b4]@9 ~@2] ~@101>")
  .s("gm_electric_guitar_jazz").gain(0.39)

// chords · trumpet · "GTR/TRUMPT"
const trumpet = note(`<
  ~@20 A ~@7 A ~ B ~ C D ~@2 E F G H I@3 J K L@2 ~@6 M N O@2 ~@6 P ~ B ~ C D ~@2 E F G H I@3 Q K R ~ S T U@2 V@2 W ~ X Q
  K R ~ S T U@2 V@2 Q K Y ~ S T Z@7
>`.pickRestart({
  A: "~ [a4,c5]@10 ~@2 [g4,b4]@9 ~@2", B: "~ [a4,c5]@11 ~ [g4,b4]@9 [a4,c5]@2", C: "~ [db4,e4]@22 ~",
  D: "~ [d4,f4]@22 ~", E: "~ [db4,e4]@23", F: "~ [d4,f4]@23", G: "~ [b3,g4]@22 ~", H: "~ [g3,c4]@22 ~",
  I: "[~ a3@21 ~@3 a3@39 ~@8, ~ f4@62 ~@9]/3",
  J: "~@7 [c5,e5]@3 [b4,d5]@3 [a4,c5]@2 ~ [g4,b4]@2 ~ [f4,a4]@2 ~ [e4,g4]@2", K: "~ [f4,a4]@4 ~@19",
  L: "[~@7 [c5,e5]@3 [b4,d5]@3 [a4,c5]@3 [c5,e5]@3 ~@3 [f4,a4]@5 ~@21]/2", M: "~ [a3,e4,a4,c5]@11 ~ [g3,d4,g4,b4]@11",
  N: "~ [f4,a4]@6 g4@3 [d4,f4]@5 ~ [c4,e4]@2 ~@6, ~ f3@18 ~@5, ~@7 e4@2 ~@15", // F Dm C
  O: "[~ [e4,a4,c5]@11 ~ [d4,g4,b4,d5]@9 [c4,f4,a4,e5]@6 ~@20]/2", P: "~ [a4,c5]@11 ~ [g4,b4]@9 ~@2",
  Q: "~@10 d5@2 ~ c5@3 [g4,b4]@2 ~ [f4,a4]@2 ~ [e4,g4]@2", // G F Em
  R: "~@7 [c5,e5]@3 [b4,d5]@2 ~ a4@2 ~ e5@3 ~@3 a4@2, ~@13 c5@6 ~@5", // C Bm
  S: "~@7 [c5,e5]@2 ~ [b4,d5]@2 ~ [a4,c5]@3 [g4,b4]@2 ~ [f4,a4]@2 ~ [e4,g4]@2", T: "~ [f4,a4]@3 ~@18 c5 d5",
  U: "[~ e5@9 ~ f5@2 [g3,b3,g4,b4,e5,g5]@10 ~@2 [f3,a3]@13 ~@8 c5 d5, ~ [a3,c4,a4,c5]@11 ~@11 [f4,a4,e5]@7 ~@18, ~@5 e5 ~@18]/2", // Em F Am Fmaj7
  V: "[~ [a3,c4,a4,c5,e5]@11 ~ [g3,b3,g4,b4,e5]@8 ~ [f4,a4,e5]@4 ~@22, ~@22 [f3,a3]@9 ~@17]/2", // Am Em Fmaj7 F
  W: "~ [a3,e4,a4,c5]@12 [g3,d4,g4,b4,d5]@11", X: "~ [c4,e4]@21 ~@2",
  Y: "~@7 e5@3 [b4,d5]@2 ~ a4@2 ~ e5@3 ~@3 a4@2, ~@7 c5@2 ~@4 c5@6 ~@5", // Bm
  Z: "[~ e5@9 ~ f5 ~ [g3,b3,g4,b4,e5,g5]@10 ~@2 [f3,a3]@13 ~@8 c5 d5@2 [e4,a4,c5,e5]@11 ~ [d4,g4,b4,d5]@10 [c5,e5]@24 ~@2 c4@49 ~@22, ~ [a3,c4,a4,c5]@11 ~@11 [f4,a4,e5]@8 ~@40 f3@75 ~@22, ~@10 e5@2 ~@59 [f4,a4]@66 ~@31, ~@97 e4@46 ~@25]/7", // Em F Am G C Am Fmaj7 F
})).s("gm_trumpet").gain(0.47)

// chords · trumpet · "GTR/TRUMPT" · soft notes
const trumpet_soft = note(`<
  ~@21 A ~@7 A ~@4 B A ~@3 C ~@18 D ~@5 A ~@4 B E ~@3 C ~@3 F ~ G@2 ~@2 H ~@4 I@2 F ~ G@2 ~@2 H ~@3 F ~ G@2 ~@2 H ~@6
>`.pickRestart({
  A: "~ [f4,a4]@5 ~@18", B: "~ [e4,g4]@19 ~@4", C: "~ eb4@22 ~", D: "~@16 [g4,g5]@2 ~ [g4,g5]@3 ~@2",
  E: "~ [f4,a4]@4 ~@19", F: "~@4 [e4,g4]@2 ~ [c5,e5]@2 ~ b4@2 ~ a4@2 ~@9", G: "[~@11 f4@2 ~@11]/2", H: "~@22 e5 ~",
  I: "[~ [f3,a4]@45 ~@2, ~ f4@23 ~@24, ~ e5@21 ~@26]/2", // F
})).s("gm_trumpet").gain(0.23)

// drums · kick
const kick = s("bd").struct(`<
  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@2 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@2 B A B A B A B A B A C A@2 B A B A B A B A B A B A B A B A B C D ~@3
>`.pickRestart({
  A: "~ x ~@8 x ~@2 x ~@10", B: "~ x ~@8 x ~@13", C: "~ x ~@8 x ~@8 x ~@4", D: "~ x ~@22",
})).gain(0.68)

// drums · snare
const snare = s("sd").struct("<A@46 B A@9 C A@31 ~ D ~ A@9 E A@8 ~@5>".pickRestart({
  A: "~@7 x ~@11 x ~@4", B: "~@7 x ~@5 x ~@3 x ~ x ~@4", C: "~@7 x ~@6 x ~ x!2 ~ x ~@4", D: "~@16 x!2 ~@6",
  E: "~@7 x ~@8 x ~@2 x ~@4",
})).gain(0.68)

// drums · clap
const clap = s("cp").struct("<~@88 [~@7 x ~@11 x ~@4]!2 ~@24>").gain(0.34)

// drums · low tom
const low_tom = s("lt").struct("<~@35 [~@19 x ~@4] ~@34 [~@19 x ~@4] ~@43>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@111 [~ x ~@22] ~@2>").gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@90 [~@16 x!2 ~@6] ~@9 [~@16 x ~@3 x ~@2 x] ~@13>").gain(0.68)

// drums · high tom
const high_tom = s("ht").struct("<~@46 A ~@9 B ~@32 C D ~@9 E ~@13>".pickRestart({
  A: "~@13 x ~@3 x ~ x ~@4", B: "~@14 x ~ x!2 ~ x ~@4", C: "~@16 x!2 ~ x ~@4", D: "~@19 x ~@4", E: "~@16 x ~@3 x ~@2 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<A ~@66 A ~@10 A ~@2 B ~@9 A ~@2 B ~@6 A ~@2 B ~@4 C A ~@3>".pickRestart({
  A: "~ x ~@22", B: "~@19 x ~@4", C: "~ x ~@11 x ~@10",
})).gain(0.41)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  [~@7 x ~@11 x ~@4]!46
  [~@7 x ~@16]
  [~@7 x ~@11 x ~@4]!41
  ~@3
  [~@7 x ~@11 x ~@4]!18
  ~@5
>`).gain(1.79)

// drums · congas
const congas = s("conga:18").struct("<~@89 [~@16 x!2 ~ x ~@4] ~@24>").gain(1.3)

// drums · congas
const congas_2 = s("conga:33").struct("<~@90 [~@16 x!3 ~@5] ~@23>").gain(1.3)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~@3 B ~@3 B ~@4 A ~ B ~ A ~ B ~ A ~ B ~ A ~ A ~ B ~ A
  ~ B ~ A ~@3 B ~@3 B ~@4 A ~ B ~ A ~ B ~ A ~@4 A ~ B ~ A ~ B ~ A ~ A ~ B ~ A ~ B ~@5
>`.pickRestart({
  A: "~@8 x ~@2 x", B: "~@13 x ~@10",
})).gain(4.33)

// drums · shaker
const shaker = s("sh").struct(`<
  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@2 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@2 B A B A B A B A B A C D A B A B A B A B A B A B A B A B A B E A F ~@2
>`.pickRestart({
  A: "~ x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", B: "~ x!2 ~ x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x!2",
  C: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x!2", D: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x ~",
  E: "~ x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x!2", F: "~ x ~@22",
})).gain(0.41)

// drums · claves
const claves = s("clave:2").struct(`<
  ~ A ~@3 B ~@3 B ~@5 B ~@3 B ~@3 B ~@3 B ~@16 B ~@3 B ~@3 B ~@5 B ~@3 B ~@16 B ~@3 B ~@8 B ~@3 B ~@5 B ~@3 B ~@2 A ~@4
>`.pickRestart({
  A: "~@7 x ~@3 x ~@12", B: "~@7 x ~@2 x!2 ~@12",
})).gain(2.33)

// drums · claves · soft notes
const claves_soft = s("clave:2").struct(`<
  ~ A ~@3 B ~@3 B ~@5 B ~@3 B ~@3 B ~@3 B ~@16 B ~@3 B ~@3 B ~@5 B ~@3 B ~@16 B ~@3 B ~@8 B ~@3 B ~@5 B ~@3 B ~@7
>`.pickRestart({
  A: "~@5 x ~@2 x ~@3", B: "~@2 x",
})).gain(1.33)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@35 [~ x ~@2] ~@34 [~ x ~@2] ~@43>").gain(0.98)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@35 [~@19 x ~@4] ~@34 [~@19 x ~@4] ~@43>").gain(0.98)

stack(
  bass, bass_2, harpsichord, flute, flute_soft, acoustic_guitar_nylon, electric_guitar_jazz, electric_guitar_jazz_2,
  trumpet, trumpet_soft, kick, snare, clap, low_tom, hihat, mid_tom, high_tom, crash, bongos, congas, congas_2,
  agogo_bells, shaker, claves, claves_soft, woodblocks, woodblocks_2
)

More by Dalla Lucio