Strudelify

Equivocando

Tozzi

KeyF majorTempo89 bpm
0:00/0:00
// Equivocando — Tozzi
// 89 bpm, 4/4, key F 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 126 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): guitar program 29, guitar program 28.
setcpm(89/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 · fretless bass
const bass = note(`<
  ~@4 A B C D A B C D A E C F A E C F A B D G A B H B A E C F A E C F A B D G A B H B A E C F A E C F A B D G A B H B A
  E C F A E C F A B D G A B H B ~@3 I ~@3 I A E C F A E C F A B D G A B H B A E C F A E C F A E C F A E C F A E C F A E
  C J@3
>`.pickRestart({
  A: "f1", B: "c2", C: "bb1", D: "ab1", E: "c2@3 f2", F: "ab1@11 ~ f2@4", G: "g1", H: "ab1@3 ab1", I: "~@4 eb3 ab3@3",
  J: "[ab1@13 ~ f2@5 f1@20 ~@9]/3",
})).s("gm_fretless_bass").gain(0.48)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@3 A B C D E B C D E F G H I J G H I K L M N K L O P F G H I J G H I K L M N K L O P Q R S T Q R S T K L M N K L O P
  F U V I J U V I K L M N K L O P ~@8 W X Y Z W X Y Z K L M N K L O P Q R S T Q R S T Q R S T Q R S T Q R S T Q R S AA@3
>`.pickRestart({
  A: "~@3 a5", B: "a5@3 g5@3 f5@2, f4", C: "bb5@3 a5@3 g5@2, eb4", D: "bb5@3 a5@3 f5@2, d4",
  E: "ab5@6 g5@6 ab5@3 ~, c4", F: "[f1,c3,a5]", G: "c2@3 f2, g3", H: "[bb1,f3]", I: "ab1@3 f2, eb3", J: "[f1,c3]",
  K: "a5@3 g5@3 f5@2, f1", L: "bb5@3 a5@3 g5@2, c2", M: "ab5@3 g5@3 ab5@2, ab1", N: "bb5@3 a5@3 g5@2, g1",
  O: "ab5@3 g5@3 ab5 bb5, ab1@3 ab1", P: "[c2,c6]", Q: "a5@3 g5@3 f5@2, [f1,c3,f4]",
  R: "bb5@3 a5@3 [f2,g5]@2, [g3,eb4], c2@3 ~", S: "bb5@3 a5@3 f5@2, [bb1,f3,d4]",
  T: "ab5@3 g5@3 [f2,ab5]@2, [eb3,c4], ab1@3 ~", U: "~@13 c6@3, g3, c2@3 f2, ~@5 f6@2 ~", V: "[bb1,f3], f5@9 ~@7",
  W: "~@2 a5 g5@2 f5@3, [f1,c3,f4]", X: "~@2 bb5 a5@2 ~ f2@2, [g3,eb4], c2@3 ~, ~@5 g5@3",
  Y: "~@2 bb5 a5@2 f5@3, [bb1,f3,d4]", Z: "~@2 ab5 g5@2 ~ f2@2, [eb3,c4], ab1@3 ~, ~@10 ab5@5 ~",
  AA: "[ab5@6 g5@7 ~ [f2,ab5]@5 [f1,c3,f3]@20 ~@9, [eb3,c4]@19 ~@29, ab1@7 ~@17]/3", // Fm F5 Cm
})).s("gm_synth_strings_1").gain(0.38).pan(0.4)

// other · alto sax
const alto_sax = note("<~ A ~ A ~ A ~ A ~@69 B ~@3 A ~@44>".pickRestart({
  A: "~@8 g5@2 f5 ~@5", B: "~@6 f5 ~ g5@2 f5 ~@5",
})).s("gm_alto_sax").gain(0.24)

// other · rock organ
const rock_organ = note(`<
  ~@20 A B@2 C A B@2 D ~@8 A B@2 C A B@2 D ~@8 A B@2 C A B@2 D ~@8 A B@2 C A B@2 D ~@16 A B@2 C A B@2 D ~@8 E F G H E F
  G H E F G H E F G I@3
>`.pickRestart({
  A: "f6", B: "eb6", C: "g6", D: "c6 g5 c6 g5 c6 g5 c6 g5 c6 g5 c6 g5 c6 g5 c6 g5", E: "[a5,f6]", F: "[g5,eb6]",
  G: "[f5,d6]", H: "[eb5,c6]", I: "[[eb5,c6]@19 [a5,c6]@20 ~@9]/3",
})).s("gm_rock_organ").gain(0.33).pan(0.6)

// other · pad new age
const pad_new_age = note(`<
  ~@4 A B C D A B C D E ~@10 F@2 ~@3 E ~@10 F@2 ~@3 A B C D A B C D ~@3 F@2 ~@3 E ~@10 F@2 ~@11 G H I J G H I J ~@3 F@2
  ~@3 A B C D A B C D A B C D A B C D A B C D A B C K@2 ~
>`.pickRestart({
  A: "a4@3 g4@3 f4@2", B: "bb4@3 a4@3 g4@2", C: "bb4@3 a4@3 f4@2", D: "ab4@6 g4@6 ab4@3 ~", E: "[c4,a4]@15 ~",
  F: "[~@6 a4 ~ a4@2 g4@2 d5@2 ~ c5@5 ~@12]/2", G: "~@2 a4 g4@2 f4@3", H: "~@2 bb4 a4@2 g4@3", I: "~@2 bb4 a4@2 f4@3",
  J: "~@4 ab4@2 g4@4 ab4@5 ~", K: "[ab4@6 ~ g4@7 ab4@4 ~@14]/2",
})).s("gm_pad_new_age").gain(0.35).pan(0.7)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@4 A B@2 A@2 B@2 A C D E F C D E F ~ G ~ H ~ G ~ I ~ J ~ K ~ J ~ K ~ G ~ H ~ G ~ I ~ J ~ K ~ J ~ K ~ G ~ H ~ G ~ I ~
  J ~ K ~ J ~ K ~ G ~ H ~ G ~ I L M N O L M N O ~ J ~ K ~ J ~ K ~ G ~ H ~ G ~ I ~ J ~ K ~ J ~ K ~ J ~ K ~ J ~ K ~ J ~ K
  ~ J ~ P@2 ~
>`.pickRestart({
  A: "~@3 g4@3 ~@2", B: "~@3 a4@3 ~@2", C: "a3", D: "[c3,bb3]@3 f3", E: "[bb2,bb3]", F: "[ab2,ab3]@11 ~ f3@4",
  G: "c3@3 ~", H: "g2@3 ~", I: "~@9 [c4,f4] f4!2 [c4,f4] f4!3", J: "c3@3 f3", K: "~@3 f3", L: "[f2,c3]", M: "[g2,c3]",
  N: "[bb2,f3]", O: "[ab2,eb3]", P: "[~@14 f3@5 ~@13]/2",
})).s("gm_overdriven_guitar").gain(0.33).pan(0.3)

// chords · piano
const piano = note(`<
  ~@36 A B C D A B C E ~@7 F A B G H A B C E ~@6 I J A B G H A B C E ~@11 F ~@3 K A B G H A B C E ~@4 L M N O ~@3 F ~@3
  F ~@3 F ~@3 P@3
>`.pickRestart({
  A: "[a3,c4]@5 ~ [g3,bb3]@4 [f3,a3]@5 ~", B: "[bb3,d4]@6 [a3,c4]@4 [g3,bb3]@5 ~",
  C: "[ab3,c4]@5 ~ [g3,bb3]@6 [eb3,c4]@4", D: "[g3,d4] ~@3", E: "[c4,eb4] ~@3",
  F: "[eb4,g4] ~ [eb4,g4] ~ [eb4,g4]@2 [d4,f4]@6 [c4,eb4]@4", G: "[ab3,c4]@5 ~ [g3,bb3]@6 [ab3,c4]@4",
  H: "[bb3,d4] ~@3", I: "~@7 [eb4,g4]", J: "[d4,f4] ~ [c4,eb4]@2 [bb3,d4] ~ [c4,eb4]@8 ~@2",
  K: "~@2 [eb4,g4] ~ [eb4,g4]@2 [d4,f4]@6 [c4,eb4]@4", L: "[f4,a4]@11 ~@3 [g4,bb4]@2",
  M: "[f4,a4]@2 [eb4,g4]@2 [d4,f4]@2 [eb4,g4]@7 ~@3", N: "[d4,f4]@13 ~ [eb4,g4]@2",
  O: "[d4,f4]@2 [c4,eb4]@2 [bb3,d4]@2 [c4,eb4]@9 ~", // Dm Cm Bb Cm
  P: "[[eb4,g4]@2 [eb4,g4]@2 [eb4,g4]@2 ~ [d4,f4]@7 [c4,eb4]@5 [a3,f4]@15 ~@14]/3", // Eb Dm Cm Dm
})).s("gm_piano").gain(0.05)

// other · synth brass 2
const synth_brass_2 = note("<~@23 A@2 ~@14 A@2 ~@14 A@2 ~@14 A@2 ~@22 A@2 ~@29>".pickRestart({
  A: "[~@6 a5 ~ a5@2 g5@2 d6@2 ~ c6@17]/2",
})).s("gm_synth_brass_2").gain(0.52).pan(0.2)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B C D A B C D E F G H E F G H I J K L I J K M N O P Q N O P Q I J K L I J K M N O P Q N O P Q I J K L I J K M N
  O P Q N O P Q I J K L I J K M ~@8 N O P Q N O P Q I J K L I J K M I J L K I J L K I J L K I J L K I J L K I J L R S ~
>`.pickRestart({
  A: "[a3,c4,f4]!16", B: "[g3,bb3,eb4]!16", C: "[f3,bb3,d4]!16", D: "[eb3,ab3,c4]!16", E: "f2!16", F: "eb2!16",
  G: "d2!16", H: "c2!16", I: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]!5 ~ [a3,c4,f4]!2 ~ [a3,c4,f4]!3",
  J: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4]!5 ~ [g3,bb3,eb4]!2 ~ [g3,bb3,eb4]!3", // Eb
  K: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4]!5 ~ [ab3,c4,eb4]!2 ~ [ab3,c4,eb4]!3", // Ab
  L: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4]!5 ~ [bb3,d4,f4]!2 ~ [bb3,d4,f4]!3", // Bb
  M: "[c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4]!5 ~ [c4,eb4,g4]!2 ~ [c4,eb4,g4]!3", N: "f2!16, a4@5 ~ g4@6 f4@4",
  O: "eb2!16, bb4@5 ~ a4@6 g4@4", P: "d2!16, bb4@3 a4@3 f4@2", Q: "c2!16, ab4@5 ~ g4@6 ab4@3 ~",
  R: "[ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4] eb4 [ab3,c4] [ab3,c4,eb4]!3 ~ [c4,eb4] ab3 [ab3,c4,eb4]@2 [ab3,c4,eb4]", // Ab Cm Ab
  S: "ab3 [c4,eb4] [ab3,c4,eb4] [a3,c4,f4]@2 ~@11", // Cm Ab F
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note("<~@123 [~@5 c5 ~@10] [c5 ~@15] ~>")
  .s("gm_electric_guitar_muted").gain(0.28).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A@20 B@3 C B@3 C A@8 B@3 C B@3 C A@8 B@3 C B@3 C A@8 B@3 C B@3 C A@16 B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 D
  E ~
>`.pickRestart({
  A: "x ~@5 x!2 ~@2 x ~@3 x ~", B: "x ~ x ~@4 x ~@2 x ~@5", C: "x ~ x ~@4 x ~@2 x ~@3 x ~", D: "x ~ x ~@5 x ~@2 x ~@4",
  E: "x ~@2 x ~@12",
})).gain(0.36)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@27 A ~@15 A ~@15 A ~@15 A ~@23 A ~@7 A ~@18>".pickRestart({
  A: "~@7 x",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@123 [~@8 x ~ x!2 ~ x ~@2] ~@2>").gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<[x!8]!123 [x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~] [x ~@2 x ~@12] ~>").gain(0.18)

// drums · high tom
const high_tom = s("ht").struct("<~@123 [~@9 x ~@6] ~@2>").gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B ~
>`.pickRestart({
  A: "x", B: "~@3 x ~@12",
})).gain(0.24)

// drums · ride bell
const ride_bell = s("rd").struct("<[x ~ x!3 ~ x!5 ~ x ~ x!2]!123 [x ~ x!3 ~@2 x!5 ~@2 x ~] [x!2 ~@6] ~>").gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4
  [x ~ x!3 ~ x!5 ~ x ~ x!2]!72
  ~@8
  [x ~ x!3 ~ x!5 ~ x ~ x!2]!39
  [x ~ x!3 ~@2 x!5 ~@2 x ~]
  [x!2 ~@6]
  ~
>`).gain(0.24)

stack(
  bass, synth_strings_1, alto_sax, rock_organ, pad_new_age, overdriven_guitar, piano, synth_brass_2,
  electric_guitar_clean, electric_guitar_muted, kick, snare, snare_soft, low_tom, mid_tom, open_hat, high_tom, crash,
  ride_bell, tambourine
)

More by Tozzi