Strudelify
Ti amo cover art

Ti amo

Ti amo

Tozzi

KeyA majorTempo60 bpm
0:00/0:00
// Ti amo — Tozzi
// 60 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 13 choir aahs (copy of ch 9 choir aahs, 0.375 beats late)
// note: Full arrangement: all 65 bars on a 24-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 27.
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.

// chords · piano
const piano = note(`<
  A B A C ~@20 D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H
>`.pickRestart({
  A: "[c#3,e3,a3]@6 ~@5 e1, a1@11 ~, ~ [c#3,e3,a3]", B: "[c#3,f#3,a3]@6 ~@5 e1, f#1@11 ~, ~ [c#3,f#3,a3]",
  C: "[f#1,c#3,f#3,a3]@2 [c#3,f#3,a3]!2, ~ f#1", D: "~@7 e1 b1 e2 b1 e1", E: "[a2,c#3,e3,a3]@5 e2 [a1,c#3,e3,a3]@6",
  F: "[f#2,c#3,f#3,a3]@5 c#2 [f#1,c#3,f#3,a3]@6", G: "b2@5 f#2 [b1,d3,f#3,b3]@6, [d3,f#3,b3] ~",
  H: "[e1,e3,g#3,b3]@10 e2@2 [e3,g#3,b3]@5 e2 ~@2 e2@4, ~ e1, ~@18 [e3,g#3,b3]@5 ~", // E
})).s("gm_piano").gain(0.4).pan(0.3)

// bass · fretless bass
const bass = note(`<
  A B A B ~@9 C D E F G H I J G H I K A B L M A B L M A B L M A B L M A B L M A B L M A B L M A B L M A B L M A B L M
>`.pickRestart({
  A: "a1 ~@3 a1@2 a1 ~@3 a1@2 a1 ~@3 a1@2 a1 ~@3 a1@2", B: "f#1 ~@3 f#1@2 f#1 ~@3 f#1@2 f#1 ~@3 f#1@2 f#1 ~@3 f#1@2",
  C: "a1", D: "f#1", E: "b1", F: "e1@12 ~@2 e1@2 e1 ~@3 e1@2 e1 ~", G: "a1@11 ~ a1 ~ a1@10", H: "f#1@11 ~ f#1 ~ f#1@10",
  I: "b1@11 ~ b1 ~ b1@10", J: "e1@11 ~ e1 ~ e1@5 ~ e1@4", K: "e1@11 ~ e1 ~ e1@2 b1@2 e2@2 b1@2 e1@2",
  L: "b1 ~@3 b1@2 b1 ~@3 b1@2 b1 ~@3 b1@2 b1 ~@3 b1@2", M: "e1 ~@3 e1@2 e1 ~@3 e1@2 e1 ~ e2@2 e2@4 b1@2 e1@2",
})).s("gm_fretless_bass").gain(0.45)

// chords · pad warm
const pad_warm = note("<A@4 ~@33 B@28>".pickRestart({
  A: "[a3,c#4,e4]/2", B: "[[c#4,e4]@2 d4 [g#3,e4], a3@3 ~, ~ b3]/4",
})).s("gm_pad_warm").gain(0.18).pan(0.6)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<A B A B A@2 C D E A C D E A C D E A C D E A C D E ~@40>".pickRestart({
  A: "[c#3,e3,a3]@3 [c#3,e3,b3]@3 [c#3,e3,a3]@3 [c#3,e3,b3]!3", // A C#m7 A C#m7
  B: "[c#3,f#3,a3]@3 [c#3,f#3,b3]@3 [c#3,f#3,a3]@3 [c#3,f#3,b3]!3", // F#m F#sus4 F#m F#sus4
  C: "[f#3,a3,c#4]@3 [f#3,b3,d4]@3 [f#3,a3,c#4]@3 [f#3,b3,c#4] [f#3,b3,d4] [f#3,b3,c#4]", // F#m Bm F#m F#sus4 Bm F#sus4
  D: "[d3,f#3,b3]@3 [d3,f#3,c#4]@3 [d3,f#3,b3]@3 [d3,f#3,c#4] [d3,f#3,d4] [d3,f#3,c#4]", // Bm Dmaj7 Bm Dmaj7 D Dmaj7
  E: "[e3,g#3,b3]@3 [e3,g#3,c#4]@3 [e3,g#3,d4]@3 [e3,g#3,c#4] [e3,g#3,d4] [e3,g#3,c#4]", // E C#m E7 C#m E7 C#m
})).s("gm_electric_guitar_jazz").gain(0.16)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A@4 ~@13 B C D E F G H I J@2 K@2 L@2 M N L@2 M N L@2 M N A@2 M O L@2 M O L P Q N R S Q N R S Q N R S Q N
>`.pickRestart({
  A: "[a3,a4] ~@5 [b3,b4]@6 [a3,a4] ~@5 [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5]@2", B: "a3 ~@11", C: "a3 ~@7", D: "b3 ~@7",
  E: "e4 ~@6 e4 ~@2 e4 ~", F: "a4@2 ~@12 a4@3 ~@7", G: "a4 ~@6 a4 ~@4", H: "b4@2 ~@12 b4@3 ~@7",
  I: "e5 ~@6 e5 ~@2 e5 ~", J: "[a2 f#2, a3]/2", K: "[b2 e2, b3]/2",
  L: "[a3,a4] ~@5 [b3,b4]@6 [a3,a4] ~@5 [c#4,c#5]@2 [d4,d5]@2 [e4,e5]@2", // A B A C# D E
  M: "[b3,b4] ~@5 [c#4,c#5]@6 [b3,b4] ~@5 [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5]@2", // B C# B C# D C#
  N: "[b3,b4] [a3,a4] [b3,b4] [c#4,c#5] [d4,d5] [c#4,c#5] [b3,b4] [a3,a4] [b3,b4] [c#4,c#5] [d4,d5] [c#4,c#5]", // B A B C# D C# B A …
  O: "[b3,b4] [a3,a4] [b3,b4] [c#4,c#5] [d4,d5] [c#4,c#5] [b3,b4] [a3,a4] [b3,b4] [c#4,c#5] [d4,d5] [e4,e5]", // B A B C# D C# B A …
  P: "[a3,a4] ~@5 [b3,b4]@6 [a3,a4] ~@5 [c#4,c#5]@2 [d4,d5]@2 [e4,e5] f#5", // A B A C# D E
  Q: "[a5,a#5,b5] ~@5 [c#4,c#5]@6 [b3,b4] ~@5 [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5]@2", // C# B C# D C#
  R: "[a3,a4] ~@5 [b3,b4]@6 [a3,a4] ~@5 [c#4,c#5]@2 [d4,d5]@2 e4 c#5", // A B A C# D
  S: "[e5,f5,f#5] ~@5 [b3,b4]@6 [a3,a4] ~@5 [c#4,c#5]@2 [d4,d5]@2 [e4,e5] f#5", // B A C# D E
})).s("gm_string_ensemble_1").gain(0.4).pan(0.8)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  A@4 ~@9 B@2 C D B@2 C D B@2 C D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H
>`.pickRestart({
  A: "a2 ~@5 b2@6 a2 ~@5 c#3@2 d3@2 c#3@2", B: "a3 ~@11", C: "b3 ~@11", D: "e3 ~@11", E: "[a1,a2] ~@7",
  F: "[f#1,f#2] ~@7", G: "[b1,b2] ~@7", H: "[e2,e3] ~@3 e3 ~@3",
})).s("gm_string_ensemble_2").gain(0.8).pan(0.3)

// other · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@28 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A>".pickRestart({
  A: "~@4 e2 ~@3",
})).s("gm_string_ensemble_2").gain(0.4).pan(0.3)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@3 [~@3 d4@3 ~@4 d4 ~] ~@61>").s("gm_electric_guitar_clean").gain(0.07)

// drums · kick
const kick = s("bd").struct(`<
  [x ~ x ~@2 x!2 ~ x ~@2 x]!4
  ~@9
  x!3
  [x ~@6 x!2 ~ x!2]
  [x ~@5 x!2 ~@4]!8
  [x ~ x ~@2 x!2 ~ x ~@2 x]!40
>`).gain(0.72)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B@2 C ~@17 D@4 E D@2 F E@3 G E@3 H E@3 F E@3 G E@3 G E@3 H E@3 I E@3 G J K L M
>`.pickRestart({
  A: "~ x!11", B: "x!12", C: "x!11 ~", D: "x!24", E: "~ x!23", F: "~ x!11 ~ x!11", G: "~ x!11 ~ x!2 ~@9",
  H: "~ x!14 ~@9", I: "~ x!11 ~ x!2 ~@2 x!3 ~@4", J: "~ x!2 ~ x!5 ~ x!5 ~ x!5 ~ x!2", K: "~ x!2 ~ x!20",
  L: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~", M: "~ x!5 ~ x ~@4",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~@3 B ~@3 B ~@3 A ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B>".pickRestart({
  A: "~@9 x ~ x", B: "~@20 x!4",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@28 B ~@3 B ~@7 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B>".pickRestart({
  A: "~@11 x", B: "~@5 x ~@2",
})).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~@16 x!4 ~@4] ~@7 [~@2 x] ~@3 [~@18 x!2 ~@4] ~@3 [~@18 x!2 ~@4]>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<A ~@24 A ~@2 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.4)

stack(
  piano, bass, pad_warm, electric_guitar_jazz, string_ensemble_1, string_ensemble_2, string_ensemble_2_soft,
  electric_guitar_clean, kick, snare, hihat, mid_tom, open_hat, high_tom, crash
)

More by Tozzi