Strudelify
Amore per te cover art

Gli Amori Son Finestre

Amore per te

Mango

KeyB minorTempo66 bpm
0:00/0:00
// Amore per te — Mango
// 66 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(66/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(`<
  ~@3 A B A B A B A B C D E F A B A B C D G H I J K L M N O P Q R S@2 ~@2 A B A B C D G H I J K L M N O P Q R S@2 I J K
  L M N O P Q R S@2 ~
>`.pickRestart({
  A: "d1 f#1", B: "b1@3 b1 a1@2 e2@2", C: "g1@5 ~ g1@2 d1@4 f#1@4", D: "b1@5 ~ b1@2 a1@4 e1@4",
  E: "d1@5 ~ d1@2 c1@6 g1@2", F: "c2@5 ~ g1@2 c1@4 c1@4", G: "b1@2 b1@3 ~ f#1@2 b1@7 ~",
  H: "g1 ~ g1@3 ~ g1 ~ g1@4 g2@4", I: "a1 e1", J: "b1@3 b1 b1@3 c#2", K: "d2@3 d1 d1@4", L: "f#1@6 f#1 ~ f#1@8",
  M: "e1@6 e1 ~ e1@8", N: "b1@6 b1 ~ b1@6 c#2@2", O: "d2@6 d1 ~ d1@8", P: "a1@6 a1 ~ a1@2 e2@2 b2@2 d#2@2",
  Q: "e2@6 e1 ~ e1@8", R: "b1@5 ~ b1 ~ b1@4 e1 f#1 a1 b1", S: "f#1",
})).s("gm_fretless_bass").gain(0.58)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@3 ~@10 B@2 C@2 ~ D E@2 F G H@2 I J K@2 L M@3 ~@4 N O N P@2 O Q R H@2 I J K@2 L M@3 ~@2 S@2 T@2 U V W X@3 ~@3
>`.pickRestart({
  A: "[c1,c2]/3", B: "[d3,f#3,a3,d4]/2", C: "d6/2", D: "~ e6", E: "[d6@3 c#6]/2", F: "d6", G: "g5",
  H: "[c#4@4 ~@4 f#3@7 [a3,c#4], e3 ~, ~@4 b3@11 ~]/2", I: "d4@3 e4, b3", J: "[f#3,f#4]@3 [g#3,g#4]@3 [a3,a4]@10",
  K: "[~@8 [d4,f#4]@7 [c#4,e4,c#5], [b3,g#4]@16 b3 ~@15, ~@6 b4@9 ~]/2", L: "[d4,f#4,d5]",
  M: "[~@3 d5, e4@2 [b3,b4,f#5], [a3,c#5]@17 ~@3 b5@28, a4@15 ~ [e3,b3,g#4]@16 ~@16, ~ e5@2 ~]/3", N: "~ c#6, d6",
  O: "[b5,d6] [a5,c#6]", P: "[[b5,d6] ~ [b5,d6] [a5,d6], ~ [a5,c#6]@2 ~]/2", Q: "[b5,d6]", R: "[g5,d6]",
  S: "[[a4,c#5,a5]@8 g#5@8 ~ f#5@13 [c#4,c#5,e5]@2, e4@17 ~@15, e5@15 ~ [f#4,d5]@15 ~, ~@8 b4@21 ~@3]/2", // A C#m D
  T: "[[d4,d5]@16 f#3@3 [g#3,g#4]@3 [a3,a4]@10, f#5, ~ [f#4,c#5], ~@8 a4@3 ~@5]/2", U: "b4@3 b4, [e4,g#4,e5]",
  V: "[b4,e5] ~@7 d5@6 [c#5,e5]@2, f#4@7 ~", W: "[f#4,d5,f#5]",
  X: "[e5@11 ~@25 d5@12, [a4,c#5] [e4,g#4,b4] [b3,b4,f#5], ~ e5@2 ~, ~@5 b5@7]/3", // A E B5
})).s("gm_string_ensemble_1").gain(0.29)

// chords · pad warm
const pad_warm = note(`<
  ~@3 A@4 B@4 C@4 A@4 D@2 E@2 F G H I J G H K L M ~@4 A@4 D@2 E@2 F G H I J G H K L M ~@2 F G H I J G H K L M ~@3
>`.pickRestart({
  A: "[d2 [f#2,c#4] [b2,b3,d4] [a2,e3,c#4] [d2,d4] [f#2,c#4] [b2,b3,d4] [a2,a3], f#3@3 ~ f#3@3 ~, a3@2 ~ a3@3 ~@2]/4", // F#5 Bm A D F#5 Bm A
  B: "[d2 [f#2,c#4] [b2,b3,d4] [a2,e3,c#4] [d2,d4] [f#2,c#4] [b2,b3,d4] [a2,a3], f#3@3 ~ f#3@3 ~, a3 ~@23 a3@24 ~@16]/4", // F#5 Bm A D F#5 Bm A
  C: "[[g2,g3,b3]@4 [d3,a3]@4 [b2,b3]@4 [a2,e3,c#4]@4 [d3,f#3]@4 [c3,e3,g3]@11 ~, d4@12 ~@4 d4@15 ~, ~ f#3@2 a3@2 ~@3]/4", // G D5 B A D C
  D: "[[g2,g3,b3] [d3,a3] [b2,b3] [a2,e3,a3,c#4], d4@3 ~, ~ f#3@2 ~]/2", E: "[[b2,f#3]@2 ~ a3, [b3,d4], ~ [g2,g3]]/2",
  F: "[a2,a3,c#4,e4] [e3,g#3,b3,e4]", G: "[b2,f#3,b3,d4]@7 [c#3,a3,c#4,e4]", H: "[d3,a3,d4,f#4]", I: "[f#2,a3,c#4,f#4]",
  J: "[e2,g#3,b3,e4]", K: "[a2,a3,c#4,e4]", L: "[e2,e3,g#3,b3,e4]", M: "[b2,b3,d4]@3 ~",
})).s("gm_pad_warm").gain(0.31).pan(0.6)

// chords · pad warm · soft notes
const pad_warm_soft = note("<~@3 A ~@2 B A ~@2 B ~@4 A ~@2 B ~@13 C ~@4 A ~@2 B ~@13 C ~@11 C ~@3>".pickRestart({
  A: "d4 ~", B: "~ [e3,c#4]", C: "[f#3,f#4]@3 ~",
})).s("gm_pad_warm").gain(0.18).pan(0.6)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@15 A B C D E F G H ~@3 I J ~@2 K L ~ M N O P A B C D E F G H ~@3 I J ~@2 K L ~ M N ~@3 I J ~@2 K L ~ M N ~
>`.pickRestart({
  A: "~ [a3,d4] ~@2 [a3,d4]!2 ~@10", B: "~ [a3,d4] ~@2 [a3,d4] d4 [a3,d4] ~@9", C: "~ [a3,d4] ~@2 [a3,d4] ~ a3 ~@9",
  D: "~ [a3,d4] ~@2 [a3,d4]!2 ~ [a3,d4] ~@8", E: "~ [g3,d4] ~@2 [g3,d4]!2 ~@3 [a3,d4] ~@2 [a3,d4] a3 ~@2",
  F: "~@4 b3 ~@4 [a3,d4] ~@2 [a3,c#4] ~@3", G: "~@5 [b3,d4] ~@2 [b3,d4] ~@2 [b3,d4] ~@2 b3!2",
  H: "~@4 [g3,d4] ~@2 [g3,d4] ~@4 [g3,d4] ~@3", I: "~@5 [e3,e4] [b3,b4] [d#3,d#4]", J: "[e3,e4]@3 ~",
  K: "~@5 [e4,e5] [b4,b5] [d#4,d#5]", L: "[e4,e5]@13 ~@3", M: "f#1", N: "f#1@15 ~", O: "[d2,a2,d3]",
  P: "[d2,a2,d3]@15 ~", // D5
})).s("gm_lead_8_bass_lead").gain(0.07).pan(0.3)

// chords · lead 8 bass lead · soft notes
const lead_8_bass_lead_soft = note("<~@16 A B ~ C D E F ~@15 A B ~ C D E F ~@25>".pickRestart({
  A: "~@5 a3 ~@10", B: "~@6 d4 ~@9", C: "~@14 a3 ~", D: "~@4 d4 ~@11", E: "~@15 d4", F: "~@9 g3 ~@6",
})).s("gm_lead_8_bass_lead").gain(0.04).pan(0.3)

// other · piano
const piano = note("<~@23 A@3 ~@5 B@2 C D@3 ~@8 A@3 ~@5 B@2 C E@4 ~@5 B@2 C F@2>".pickRestart({
  A: "[~@2 c#5@2 e5@3 d5@13 ~@4]/3", B: "[~@4 g#5 f#5 e5 d5@9]/2", C: "f#5@3 e5 f#5@2 g5@2 f#5 e5 d5@6",
  D: "[f#5@3 e5 f#5@2 g5@2 f#5 e5 d5@26 ~@12]/3", E: "[f#5@3 e5 f#5@2 g5@2 f#5 e5 d5@10 c#5@4 e5@6 d5@26 ~@8]/4",
  F: "[f#5@3 e5 f#5@2 g5@2 f#5 e5 d5@18 ~@4]/2",
})).s("gm_piano").gain(0.05)

// other · epiano2
const epiano2 = note("<~@21 A B ~@3 C D ~@2 C D ~@11 A B ~@3 C D ~@2 C D ~@6 C D ~@2 C D ~@4>".pickRestart({
  A: "~ d4, c#4 a4@3, ~ d4@2 c#4@5", B: "~@4 a4@11 ~, c#4@15 ~, ~@2 d4@13 ~", C: "~@5 e4 b4 d#4", D: "e4@3 ~",
})).s("gm_epiano2").gain(0.31).pan(0.7)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~ A@2 ~ B ~ B ~@4 C B ~ D ~@4 C B@2 ~@4 E F@2 ~@6 G@2 ~@4 C B@2 ~@4 E F@2 ~@9 E F@2 ~@7
>`.pickRestart({
  A: "[~@7 [c4,g4,d6] [d6,a6] [g4,a#4,d6,a6] [g#3,d#4,a#4,c5,g5,d6] [g#3,d#4,g5,d6] [a#4,c5,d6] [g#3,d#4,c5,g5] ~@18, ~@11 [c2,g2,c3]@21, ~@11 a6@2 ~@19]/2", // Csus2 D5 Gm G#maj7 A# G#maj7 C5
  B: "[f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3] ~ [f#2,b2,f#3,b3] ~@11", // B5
  C: "[d2,g2,d3,g3]@2 [d2,g2,d3,g3] ~ [d2,g2,d3,g3] ~@11", // G5
  D: "~ a3@2 ~ e3@2 ~ c3@2 ~ g2@2 ~@4, ~@3 a3@2 ~ [e3,a3]@2 ~@8", E: "[f#2,c#3,f#3]", F: "[[e2,e3] [f#3,b3], b2]/2",
  G: "[d1,d2,a2,d3]!2 ~@6", // D5
})).s("gm_overdriven_guitar").gain(0.09)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~ A ~@2 B ~ B ~@4 C B ~ D ~@4 C B@2 ~@19 C B@2 ~@26>".pickRestart({
  A: "~@8 c4 ~ c4 g4@2 ~@3", B: "~@6 [f#2,b2,f#3,b3] ~ [f#2,b2,f#3,b3] ~@7", C: "~@6 [d2,g2,d3,g3] ~ [d2,g2,d3,g3] ~@7",
  D: "~@9 [c3,e3,a3]@2 ~@5", // Am
})).s("gm_overdriven_guitar").gain(0.04)

// other · melodic tom
const melodic_tom = note("<~@3 A@11 B C A@6 D A@3 E A@3 E ~@6 A@7 D A@3 E A@3 E ~@4 A@3 E A@3 E ~@5>".pickRestart({
  A: "~@9 f2 ~@6", B: "~@9 f2 ~@3 d2 e1 ~", C: "~ e3 a2 ~ e2 ~ a#1 e1 ~ f2 ~@6",
  D: "~@9 [f2,f3] c2 ~ c3 [d2,a2] [e1,c2] ~", E: "~@9 f2 ~@3 a2 c2 ~",
})).s("gm_melodic_tom").gain(0.5).pan(0.4)

// other · timpani
const timpani = note("<~@2 A B ~@18 A B ~@6 A B ~@12 A B ~@6 A B ~@2 A B ~@6 A B ~@4>".pickRestart({
  A: "~@8 c2!8", B: "c2 ~@15",
})).s("gm_timpani").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  ~@3
  [x!2 ~ x!2 ~@3]!32
  [x ~ x!2 ~@2 x ~ x ~ x ~@3 x ~]
  [x ~ x!2 ~@2 x ~ x ~ x ~@5]
  [x!2 ~ x!2 ~@3]!32
  ~
>`).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@3 [~ x ~ x]!32 [~@4 x ~@2 x ~ x ~@2 x ~@2 x]!2 [~ x ~ x]!32 ~>").gain(0.43)

// drums · clap
const clap = s("cp").struct("<~@3 [~ x ~ x]!66 ~>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3
  [~@6 x ~@3 x!2 ~ x!2 ~]!30
  ~@4
  [~@6 x ~@3 x!2 ~ x!2 ~]!18
  ~@2
  [~@6 x ~@3 x!2 ~ x!2 ~]!10
  ~@3
>`).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@3 [x!7 ~]!66 ~>").gain(0.43)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@4 x!2 ~@10]!30 ~@4 [~@4 x!2 ~@10]!18 ~@2 [~@4 x!2 ~@10]!10 ~@3>").gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<~@3 [~@7 x]!66 ~>").gain(0.29)

// drums · ride
const ride = s("rd").struct("<~@35 [x!8]!2 ~@33>").gain(0.21)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@3 [x ~ x ~ x ~ x!2]!66 ~>").gain(1.45)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@3 [~ x ~ x ~ x ~@2]!66 ~>").gain(1.09)

// drums · shaker
const shaker = s("sh").struct("<~@3 [~ x ~@3 x ~@3 x ~@3 x ~ x]!66 ~>").gain(0.29)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@3 [~@3 x ~@3 x ~@3 x ~@4]!66 ~>").gain(0.21)

stack(
  bass, string_ensemble_1, pad_warm, pad_warm_soft, lead_8_bass_lead, lead_8_bass_lead_soft, piano, epiano2,
  overdriven_guitar, overdriven_guitar_soft, melodic_tom, timpani, kick, snare, clap, low_tom, hihat, mid_tom, open_hat,
  ride, crash, cabasa, cabasa_soft, shaker, shaker_soft
)

More by Mango