Strudelify
Vacanze romane cover art

Tango

Vacanze romane

Matia Bazar

KeyA majorTempo110 bpm
0:00/0:00
// Vacanze romane — Matia Bazar
// 110 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · "Bass"
const bass = note(`<
  A B C D E F G H F I J K L M N O N P Q ~ R S R T R S R U V W X Y V Y Z AA R S R T R S R U V W V W V Y Z AA A B C D E F
  G H F I J K L AB N O N P R S R T R S R U X Y V Y V W Z AA R S R T R S R U V Y V Y V W Z AA R S R T R S R U X W X ~@5
>`.pickRestart({
  A: "a1@6 f2@6 e2@3 ~", B: "b1@3 f2@3 e2@2", C: "c2@3 f2@3 e2@2", D: "d2@5 ~ f2@2 e2@2 d2@2 c2@2 b1@2",
  E: "a1 ~@2 f2@3 e2@2", F: "a1@2 ~@4 f2@6 e2@3 ~", G: "f1 ~@2 g2@3 f2@2", H: "e1@2 ~@4 e2 ~ e1@3 ~ f1@2 g1@2",
  I: "f1@5 ~ f2 ~ e1@4 ~@4", J: "a1 ~@2 f2@3 e2 f2", K: "f1@3 f2 e1@2 ~@2", L: "a1@2 ~ f2@3 e2@2",
  M: "d1@2 ~ d2 d1@2 ~@2", N: "d1@2 ~ e2@3 d2@2", O: "e1@2 ~@4 e2 ~ e1@7 ~", P: "f#1@6 f#2@2 e1@5 ~ e2 ~", Q: "a1 ~@3",
  R: "a1 ~@2 c#2 f#2 ~ e2 ~", S: "a1!2 ~ c#2 f#2 ~ e2 ~", T: "a1@2 a1@2 ~@2 c#2@2 f#2@2 ~@2 e2 ~@3",
  U: "a1@2 a1@2 ~@2 a1@2 a1 ~@3 a#1@4", V: "b1 ~@2 d2 ~@2 a2 ~", W: "b1@2 b1@2 ~@2 d2@2 b2 ~@3 a2@2 ~@2",
  X: "b1@2 ~@4 d2@2 b2 ~@3 a2@2 ~@2", Y: "b1!2 ~ d2 ~@2 a2 ~", Z: "f1", AA: "e1@6 e1@2 e1@7 ~",
  AB: "d1@4 ~@2 d2 ~ d1@4 ~@4",
})).s("gm_fretless_bass").gain(0.33)

// bass · fretless bass · "Bass" · soft notes
const bass_soft = note("<~@28 A ~@2 A@3 ~@10 A ~ A ~ A@2 ~@29 A@4 ~@11 A@5 ~@14 B C B D E>".pickRestart({
  A: "~@8 b2 ~@7", B: "b1@2 b1@2 ~@2 d2@2 b2 ~@3 a2@2 ~@2", C: "b1@2 ~@4 d2@2 b2 ~@3 a2@2 ~@2", D: "f1", E: "e1@3 ~@5",
})).s("gm_fretless_bass").gain(0.19)

// chords · percussive organ · "Organ"
const percussive_organ = note(`<
  ~@20 A@2 B@2 C D@2 E@3 F@2 G@2 H I A@2 B@2 C D@2 E@3 F@2 G@2 H I ~@18 A@2 B@2 C D@2 E@3 F@2 G@2 H I A@2 B@2 C D@2 E@3
  F@2 G@2 H I A@2 B@2 C D@2 E@3 F@2 G@2 H I
>`.pickRestart({
  A: "[e5@6 f#5@9 ~ g#5@6 f#5@9 ~, [a4,c#5]]/2", B: "[e5@6 f#5@8 ~@2 g#5@6 f#5@9 ~, c#5@31 ~, a4@14 a4@17 ~]/2",
  C: "e5@6 f#5@9 ~, [a4,c#5]@15 ~", D: "[g#5@3 f#5@5 e5@3 f#5@5, c#5@31 ~, a4@15 ~ a4@14 ~@2]/2",
  E: "[g#5@3 ~@5 b4@8 a4@8, [a4,c#5]@15 ~ d5@31 ~, ~ f#5@7]/3", F: "[b4 a4, [d5,f#5]@31 ~]/2",
  G: "[b4@16 a4@15 ~, [d5,f#5]]/2", H: "[a4,c5,f5]", I: "[g#4,b4,e5]",
})).s("gm_percussive_organ").gain(0.16)

// chords · pad warm · "Warm pad"
const pad_warm = note(`<
  A@4 B@3 C D@3 E@8 ~ F@2 G@4 H@2 I@2 J@2 K@2 L M F@2 G@4 H@2 I@2 J@2 K@2 L M A@4 N@3 C D@3 O@7 F@2 G@4 H@2 I@2 J@2 K@2
  L M F@2 G@4 H@2 I@2 J@2 K@2 L M F@2 G@4 H@2 I@2 J@2 K@2 L M
>`.pickRestart({
  A: "[[a3,c4] [g#3,b3,d4] [a3,c4,e4] [g#3,b3,d4], e3]/4", B: "[e3 ~@30 f3@17, [a3,c4]]/3", C: "[e3,g#3,b3]",
  D: "[~@15 f3@8 ~ b3@7 [a3,c4]@16 f3, [a3,c4]@23 g#3@8 ~@17, ~ e3]/3", // Am
  E: "[~@7 [g#3,b3]@8 c4@16 f#3@16 ~ f3@15 [g#3,b3,e4]@16 [f3,a3,d4]@16 [f#3,a#3,c#4]@8 [g#3,b3]@9 [a3,c4]@16, ~@7 e3@24 d4@31 ~@66, ~@15 a3@47 ~@41 e3@25]/8", // G#m E Dm F# G#m Am
  F: "[[a3,c#4,e4]@31 ~]/2", G: "[[a3,c#4,e4]@31 ~ e4@31 ~, ~@31 [a3,c#4]@31 ~@2]/4", H: "[a3,c#4,e4]/2",
  I: "[[b3,d4,f#4]@31 ~]/2", J: "[b3@15 a3@16 ~, [d4,f#4]@31 ~]/2", K: "[b3@16 a3@15 ~, [d4,f#4]@31 ~]/2",
  L: "[a3,c4,f4]", M: "[g#3,b3,e4]", N: "[e3@31 f3@17, [a3,c4]]/3",
  O: "[~@7 [g#3,b3]@8 c4@16 f#3@16 ~ f3@15 [g#3,b3,e4]@16 [f3,a3,d4]@16 [f#3,a#3,c#4]@8 [e3,g#3,b3]@9, ~@7 e3@24 d4@31 ~@50, ~@15 a3@47 ~@50]/7", // G#m E Dm F# E
})).s("gm_pad_warm").gain(0.07)

// other · lead 1 square · "Square w"
const lead_1_square = note("<A@7 B A@7 B A C A@2 ~@32 A@7 B A@7 B A C ~@48>".pickRestart({
  A: "~@4 a5@3 ~@5 a5@3 ~", B: "~@4 g#5@3 ~@5 g#5@3 ~", C: "~@4 f#5@3 ~@5 g#5@3 ~",
})).s("gm_lead_1_square").gain(0.07).pan(0.3)

// other · clarinet
const clarinet = note(`<
  ~@4 A B C D E F G H I J K L M N O@2 ~@7 P Q ~@5 R S ~@7 P Q ~@5 R T ~@4 A B C U V F G H I J K W M X Y@2 ~@5 P Q ~@5 R
  S Z@2 AA@2 AB@2 AC@2 Q ~@5 R S Z@2 AA@2 AB@2 AC@2 Q ~@5 R AD
>`.pickRestart({
  A: "c4 a3", B: "e4@7 ~", C: "~ f4 a3@2", D: "g#3@2 c4 b3", E: "c4@7 ~", F: "a3 g#3", G: "~@4 c4@4 e3@5 ~ e3@2",
  H: "f3 g#3", I: "a3@7 ~", J: "~@2 d4@2 a3@2 f#3@7 ~ f3 [d#3,e3]", K: "d3@3 ~",
  L: "~@5 g#3 a3 a#3 b3 e3 f#3 g3 g#3 e3 e4 d#4", M: "d4@13 ~@3", N: "~@4 a#3@3 b3@9", O: "[c4@11 ~@5]/2",
  P: "~@2 e3@3 f#3@2 ~ g#3@3 f#3@3 e3@2", Q: "f#3@15 ~", R: "f3", S: "e3@3 e3 f#3 g#3 f#3 e3", T: "e3", U: "g#3 b3",
  V: "c4@3 ~", W: "~@5 g#3 a3 a#3 b3 e3 f#3 g3 g#3@3 c#4", X: "a#3@7 g#3@9", Y: "[a3@11 ~@5]/2",
  Z: "[f#3@18 e3@3 ~ f#3@2 e3@3 d3@3 e3@2]/2", AA: "[d3@8 c#3@13 e3@2 ~ f#3@2 g#3@2 f#3@2 e3@2]/2",
  AB: "[f#3@18 e3@3 ~ f#3@2 e3@3 d3@2 e3@3]/2", AC: "[d3@6 b2 c3 c#3@10 e3@3 f#3@2 ~ g#3@3 f#3@3 e3@2]/2",
  AD: "e3@3 ~@5",
})).s("gm_clarinet").gain(0.14).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A@18 B C D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E A@18 D E D E D E D E D E D E D E D E D E D E
  D E D E D E D E D E D E D E D E D E D E D E D E D E D F
>`.pickRestart({
  A: "x ~@2 x!2 ~ x ~", B: "x ~@6 x!2 ~@7", C: "x ~ x!2", D: "x ~@2 x ~@2 x ~", E: "x!2 ~ x!2 ~ x ~", F: "x!2 ~ x ~@4",
})).gain(0.35)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<A@4 ~@23 B ~@15 B ~@8 A@4 ~@21 B ~@15 B ~@15 B ~@8>".pickRestart({
  A: "~@3 x", B: "~@11 x!5",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@48
>`.pickRestart({
  A: "~ x ~@5 x", B: "~@7 x",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@77 [~@8 x!3 ~@5] ~@40>").gain(0.35)

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

// drums · tambourine
const tambourine = s("tb").struct("<[x!16]!117 [x!8 ~@8]>").gain(0.18)

// drums · shaker
const shaker = s("sh").struct("<~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@33 ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A@48 ~>".pickRestart({
  A: "~@10 x!6",
})).gain(0.29)

stack(
  bass, bass_soft, percussive_organ, pad_warm, lead_1_square, clarinet, kick, snare, hihat, mid_tom, open_hat, high_tom,
  crash, tambourine, shaker
)

More by Matia Bazar