Strudelify
Insieme a te sto bene cover art

Lucio Battisti Vol. 4

Insieme a te sto bene

Battisti

KeyC majorTempo96 bpm
0:00/0:00
// Insieme a te sto bene — Battisti
// 96 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 11 "Brass" named as a brass, played on brass section (its pad poly patch is not one)
// note: duplicate parts dropped: ch 11 "Brass" brass section (copy of ch 13 "Corno" french horn)
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · "Frtless"
const bass = note(`<
  A@2 B C A@2 B D A@2 B C A@2 B E F@2 G H F@2 I J F@2 I J F@2 I K@2 L M N O@2 P Q O@2 P R S@2 T U S@2 T U S@2 T U S@2 T
  U S@2 T U S@2 T U S@2 T V W@2 X Y W@2 X Y W@2 X Y Z@3
>`.pickRestart({
  A: "[c3@10 ~ g2 g2@17 ~@2 f2]/2", B: "f2@10 ~ f2 f3@2 e3@2", C: "e2@13 ~@3", D: "e2@3 g2", E: "e2@14 ~ f2",
  F: "[f3@9 ~@2 c3 c3@14 ~@2 d3@4]/2", G: "a#2@9 ~@2 a#2 a#2@4", H: "a2@11 ~ c3@4", I: "a#2@9 ~@2 a#2 c4@2 a#3@2",
  J: "a2@10 ~ a2 c3@4", K: "[a2 c3@3]/2", L: "a2", M: "f2", N: "e2@15 ~",
  O: "[c3@10 ~ g2 g2@10 ~ a2 ~@4 a3@4, ~@27 a2@2 ~@3]/2", P: "f2@6 ~ f2 ~@3 f2 f2@4", Q: "e2@7 e2 ~@3 g2 g3@4",
  R: "e2@7 e2 ~@3 e2 e3@2 b2 e2", S: "[f2@7 f2 ~@3 f2 c3@10 ~ d3 ~@3 a2 d3@4]/2",
  T: "a#2@5 ~@2 a#2 ~@3 a#2 a#3@2 f3 a#2", U: "a2@6 ~ a2 ~@3 a2 c3@2 ~@2", V: "a2@6 ~ a2 ~@3 a2 c3@4",
  W: "[f2@10 ~ f2 c3@14 ~@6]/2", X: "a#2@11 ~@5", Y: "a2@3 c3", Z: "[f2@17 ~@7]/3",
})).s("gm_fretless_bass").gain(0.2)

// other · electric guitar muted · "Muted gtr."
const electric_guitar_muted = note(`<
  A@3 B A@3 B A@3 B A@3 C D@3 E D@3 F D G D E D G D ~@5 A@3 B A@3 C D@3 E D@3 F D G D H D G D H D G D H D G D H D G D H
  ~@15
>`.pickRestart({
  A: "~@7 c4 ~ c4 ~ c4 g3 ~@3", B: "~@7 d4 ~ d4 ~ d4 c4 ~ a3 g3", C: "~@7 d4 ~ d4 ~ d4 c4 ~ g3 a3",
  D: "~@7 f3 ~ f3 ~ f3 c3 ~@3", E: "~@7 g3 ~ g3 ~ g3 g3@2 f3 ~", F: "~@7 c3 ~ c3 ~ c3 c3@4",
  G: "~@7 f3 ~ f3 ~ f3 d3 ~@3", H: "~@7 g3 ~ g3 ~ c3 c3@2 f3 ~",
})).s("gm_electric_guitar_muted").gain(0.16).pan(0.2)

// chords · epiano1 · "Rhodes"
const epiano1 = note(`<
  A B C D E@2 C F A G H I J@2 C D K@2 L M N@2 L M O P Q R O P Q S ~@4 A T U F V S C W X@2 Y Z AA@2 AB@2 AC AD Q R AC AD
  Q R AC AD Q R AC AD Q R AC AD Q R AE@2 L R AE@2 L R AE@2 L R AF ~@2
>`.pickRestart({
  A: "[c3,g3,d4]", B: "[a2,g3,d4]", C: "[f2,g3,d4]", D: "[e2,g3,d4]", E: "[[c3,c4,d4] [a2,g3,d4], g4]/2",
  F: "[e2,g3,d4]@3 [g2,f3,c4]", G: "[a2,g3,c4]", H: "[f2,g3,c4,d4]", I: "[e2,g3,d4]@15 ~",
  J: "[c4@11 ~@5 [a2,g3,d4]@16, c3 ~, [d4,g4]@14 g4@11 ~@7, ~@12 c4@5 ~@15]/2", // Dsus4 G5
  K: "[[g4,c5]@12 ~@4 [d3,c4,g4]@11 ~ [d3,c4,d4,f4,a4]@4, [f2,f3] ~, f4@11 ~ f4@14 ~@6, ~@7 c5@6 ~@3]/2", // C5 Csus2 Dm7 F
  L: "[a#2,c4,d4,f4]", M: "[a2,c4,d4,g4]@3 [c3,a#3,f4]",
  N: "[c4@11 ~@5 g4@12 [d3,c4,d4,f4,a4]@4, [f3,g4]@8 d3@5 ~@3, ~@12 c4@15 ~@5, ~@7 c5@7 ~@2]/2", O: "[f2,a3,c4,g4]",
  P: "[d3,a3,c4,f4]", Q: "[a#2,a3,c4,d4]", R: "[a2,g3,c4,d4]@3 [c3,a#3,f4]", S: "[a2,g3,c4,d4]",
  T: "[a2,g3,c4,d4]@7 [c4,d4]", U: "[f2,g3,a3]", V: "[c3,g3,c4,d4]", W: "[e2,g3,d4]@3 [e2,g3,d4]",
  X: "[~@4 [d3,c4,f4]@3 [d3,c4,d4,f4,a4], [f2,g3,c4] ~, ~@3 g4@4 ~, ~@7 c5@7 ~@2]/2", // Dm7 Fsus2
  Y: "[a#2,c4,d4,f4]@3 [a#2,c4,d4,f4]", Z: "[a2,c4,d4,g4]@6 ~ a#3, ~@3 [c3,c4,f4]",
  AA: "[~@4 [d3,c4,f4]@3 [d3,c4,d4,f4,a4], [f2,g3,a3,c4]@7 c5@7 ~@2, ~@12 g4@15 ~@5]/2", // Dm7 F
  AB: "[~@4 [a2,c4,d4,g4]@2 [c4,g4] [c3,a#3,f4], [a#2,c4,d4,f4] ~, ~@14 c5@11 ~@7]/2", AC: "[c4,g4]@3 [c4,a4]@5, f3",
  AD: "[a3,c4,e4]@3 [a3,c4,d4,f4]@5, d3", AE: "[~@3 a4@4 ~ [c4,e4]@3 [c4,f4]@5, [f2,c4,g4] d3, ~@14 c5@13 ~@5]/2",
  AF: "[f2,c4,g4]", // Fsus2
})).s("gm_epiano1").gain(0.11).pan(0.7)

// chords · synth strings 2 · "Strinpad"
const synth_strings_2 = note("<A@8 ~@12 B@4 C@4 D@5 E@3 ~@16 B@4 F@16 G@8 ~@7>".pickRestart({
  A: "[[g3,d4]@61 ~@3]/8", B: "[a3@3 [g3,d4], c4]/4", C: "[f2@4 d3@4 a#2@4 a2@3 ~, [a3,c4]@61 ~@3, ~@8 d4@7 ~]/4",
  D: "[f2@2 d3@2 a#2@2 a2 c3@3, [a3,c4]@7 ~@3, ~@4 d4@3 ~@3]/5", E: "[a2 f2 e2, [g3,d4]@5 ~]/3",
  F: "[g3@16 e4@6 f4@26 g3@13 ~@3, [a3,c4]@61 ~@3, ~@22 d4@39 ~@3]/4", G: "[c4,d4,g4]/8",
})).s("gm_synth_strings_2").gain(0.03)

// chords · pad sweep · "Sweeppad"
const pad_sweep = note("<~@4 A@2 ~@13 B@2 ~@6 C@2 ~@18 D@2 ~@22 E@2 ~@14>".pickRestart({
  A: "[~ [c5,d5,g5]@3]/2", B: "[[g5,c6,d6]@9 ~@7]/2", C: "[[g5,c6,d6]@19 ~@13]/2", D: "[[g5,c6,d6]@5 ~@3]/2",
  E: "[[g5,c6,d6]@23 ~@9]/2", // Gsus4
})).s("gm_pad_sweep").gain(0.01).pan(0.2)

// other · taiko drum
const taiko_drum = note("<~@4 A B ~@10 C ~@15 A D C E ~@34 F G H I J K H I J K H I J K L ~@2>".pickRestart({
  A: "~@14 a-1!2", B: "a-1@3 ~@5", C: "f-1@9 ~@7", D: "a-1 ~", E: "e-1@3 ~@5", F: "f-1@5 ~@7 f-1 ~ e-1!2",
  G: "e-1 ~@2 g-1", H: "c0@9 ~@5 a0!2", I: "a0 ~", J: "f0 ~", K: "e0@11 ~@5", L: "c0@9 ~@7",
})).s("gm_taiko_drum").gain(0.31).pan(1)

// other · french horn · "Corno"
const french_horn = note("<~@5 A@2 ~@26 B@2 ~@38 C@2 ~@2 C@2 ~@2 C@2 ~@4>".pickRestart({
  A: "[~@7 g4@18 ~@7]/2", B: "[d4@3 g4@9 ~@4]/2", C: "[g4@6 c5@19 ~@7]/2",
})).s("gm_french_horn").gain(0.14).pan(0.8)

// other · orchestra hit · "Orch.hit"
const orchestra_hit = note("<~@31 A@3 ~@53>".pickRestart({
  A: "[~@8 c3@25 ~@15]/3",
})).s("gm_orchestra_hit").gain(0.72).pan(0.3)

// other · pizzicato strings · "Pizz"
const pizzicato_strings = note("<~@33 A B ~@38 C ~@3 D E F G H ~@5>".pickRestart({
  A: "~@8 [g3,g4,g5] ~ [c4,c5,c6] ~ [g3,g4,g5] [d3,d4,d5] ~@2", // G C G D
  B: "~@8 [g3,g4,g5] [d3,d4,d5] ~@2 [d3,d4,d5] [g2,g3,g4] ~ [e2,e3,e4]", // G D G E
  C: "~@2 [f3,f4,f5] ~ [g3,g4,g5] ~ [c4,c5,c6] ~ [f3,f4,f5] [c3,c4,c5] ~@2 [c3,c4,c5] [f2,f3,f4] ~ [a#1,a#2,a#3]", // F G C F C F A#
  D: "~@2 [g3,g4,g5] ~ [f3,f4,f5] ~ [g3,g4,g5] ~ [c4,c5,c6] [f3,f4,f5] ~@2 [f3,f4,f5] [c3,c4,c5] ~@2", // G F G C F C
  E: "[a#1,a#2,a#3] ~@13 [f4,f5] ~", F: "[f4,f5] ~ [e4,e5] ~ [c4,c5] ~ [f4,f5] ~ [e4,e5] ~ [c4,c5] ~@5",
  G: "~@10 [f3,f4,f5] ~ [g3,g4,g5] ~ [c4,c5,c6] ~", // F G C
  H: "[g3,g4,g5] [f3,f4,f5] ~@2 [c3,c4,c5] [f3,f4,f5] ~@3 [c3,c4,c5] ~@4 [a#1,a#2,a#3] ~", // G F C F C A#
})).s("gm_pizzicato_strings").gain(0.14).pan(0.7)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@52 A B C D E F@2 G A H I J A H K L M@4 ~@15>".pickRestart({
  A: "[c5,c6]@3 [f5,f6]", B: "[e5,e6]@3 [f5,f6]@5", C: "d6", D: "c6@7 ~", E: "c6@3 f6",
  F: "[[g5,g6]@2 a6 [f5,f6]@13]/2", G: "g6@7 ~", H: "[g5,g6]@2 [c6,c7] [f5,f6]@5", I: "[a5,a6]", J: "[g5,g6]@7 ~",
  K: "[d5,d6]", L: "[c5,c6]@7 ~",
  M: "[[f5,f6]@6 [g5,g6]@2 [a5,a6]@2 [c6,c7]@2 [f6,f7]@2 [e6,e7]@6 [g6,g7]@2 [f6,f7]@25 ~ g7@14 ~@2, ~@47 g6@14 ~@3]/4", // F G A C F E G F
})).s("gm_string_ensemble_1").gain(0.06).pan(0.7)

// other · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note("<~@54 d5 [c5@7 ~] [c5@3 f5] [~@2 a5 ~@5] ~ [g5@7 ~] ~@27>")
  .s("gm_string_ensemble_1").gain(0.02).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 B@36 A C D ~ A C D ~ A C D ~ E ~@2
>`.pickRestart({
  A: "x ~@2 x", B: "x ~@6 x ~@3 x ~@4", C: "~@15 x", D: "x ~@10 x!2 ~@3", E: "x",
})).gain(0.56)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~@41 A ~@3 A ~@3 A ~@6
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@15 x",
})).gain(0.32)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 C ~ D ~@15 E ~@21 A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@9 x ~@6", C: "~@9 x ~@3 x ~@2", D: "~@8 x!2 ~@6", E: "~@9 x ~ x ~@4",
})).gain(0.08)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@9 x!5 ~ x] ~@27 [~@7 x ~@8] ~@27 [~@15 x] ~@27>").gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<A@31 B A@17 C A@12 D A@3 E A@4 C A@13 F ~>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~ x!3 ~ x!3 ~ x!3 ~@3",
  D: "x ~ x!3 ~ x!3 ~ x!2 ~@2 x!2", E: "x ~ x!3 ~ x!3 ~@3 x ~ x!2", F: "x ~ x!3 ~ x!3 ~ x!2 ~@4",
})).gain(0.16)

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

// drums · open hat
const open_hat = s("oh").struct("<~@31 A ~@17 B ~@5 C ~@6 D ~@3 E ~@4 B ~@15>".pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x ~@4", D: "~@3 x", E: "~@5 x ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@31 [~@4 x!2 ~@10] ~@35 [~@13 x!2 ~] ~@19>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@17 B ~@5 B ~@3 C ~@4 A ~@3 A ~@2 B A ~@2 B A ~@2 B A ~@7 A ~@7 A B ~@5 B ~@3 B ~@3 B A ~@2
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x",
})).gain(0.4)

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

// drums · triangle
const triangle = s("triangles:35").struct("<~@5 [~@3 x!2 ~@2 x!3 ~ x!2 ~@3] ~@81>").gain(1.39)

stack(
  bass, electric_guitar_muted, epiano1, synth_strings_2, pad_sweep, taiko_drum, french_horn, orchestra_hit,
  pizzicato_strings, string_ensemble_1, string_ensemble_1_soft, kick, kick_soft, snare, snare_soft, low_tom, hihat,
  mid_tom, open_hat, high_tom, crash, congas, triangle
)

More by Battisti