Strudelify

Un anno d'amore

Mina

KeyA minorTempo62 bpm
0:00/0:00
// Un anno d'amore — Mina
// 62 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 53 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(62/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 · acoustic bass
const bass = note(`<
  A B C D E B F G E H I J K L M N O P Q R S@2 Q R S R T B F G E H I J K L M N O P Q R S@2 Q R S@2 Q U V W X
>`.pickRestart({
  A: "~@24 a2@2 ~ e2@2 c2@2 ~", B: "a1 c2 e2 a1", C: "d2@4 f2@4 a2@4 d2@3 ~", D: "g2@7 ~ f2@8 d2@8 b1@6 ~@2",
  E: "c2@7 ~ c2@8 e2@7 ~ e2@6 ~@2", F: "d2@8 f2@8 a2@7 ~ d2@6 ~@2", G: "g2 f2 d2 b1", H: "a1@7 ~ c2@8 e2@7 ~ a1@6 ~@2",
  I: "d2@8 f2@7 ~ a2@5 ~@3 d2@5 ~@3", J: "a2@7 ~ a2@7 ~ b2@6 ~@2 b2@6 ~@2", K: "f2@6 ~@2 f2@7 ~ e2@7 ~ e2@6 ~@2",
  L: "a2@7 ~ c3@7 ~ e3@8 c3@2 ~ a2@2 e2@2 ~", M: "d2@7 ~ f2@8 a2@7 ~ d2@6 ~@2", N: "a1@8 c2@7 ~ b1@7 ~ d#2@8",
  O: "f2@7 ~ b1@5 e1@9 ~@10", P: "a1@7 ~ c2@7 ~ e2@7 ~@9", Q: "d2@7 ~ f2@7 ~ a2@8 ~@8", R: "e2@7 ~ g#2@7 ~ b2@8 ~@8",
  S: "a1@7 ~ c2@7 ~ e2@8 ~@8", T: "a1@7 ~ d2@7 ~ a1@6 ~@2 a2@2 ~ e2@2 c2@2 ~", U: "e2@7 ~ b1@8 e1@3 ~@13",
  V: "b1@7 ~ b1@8 e1@8 e1@7 ~", W: "a1@8 c2@8 e2@8 c2@5 e2@2 ~", X: "a2@3 ~@29",
})).s("gm_acoustic_bass").gain(0.46)

// bass · synth bass 2
const bass_2 = note("<~@16 A B C D E F C G H I J K ~@10 A B C D E L M G N O P Q R S T>".pickRestart({
  A: "f2@7 ~ b1@5 e1@6 ~@13", B: "~@24 e2@2 ~ c2@2 a1@2 ~", C: "d2@7 ~@17 a2@2 ~ f2 ~ d2@2 ~",
  D: "e2@7 ~@17 b2@2 ~ g#2@2 e2 ~@2", E: "a2@7 ~@17 a2@2 ~ e2@2 c2@2 ~", F: "a1@5 ~@19 e3@2 ~ c3@2 a2 ~@2",
  G: "e2@6 ~@18 b2@2 ~ g#2@2 e2 ~@2", H: "a1@7 ~@17 a2@2 ~ e2@2 c2@2 ~", I: "e1@7 ~@17 b2@2 ~ g#2@2 e2@2 ~",
  J: "a1@7 ~@17 a2@2 ~ e2 ~ c2@2 ~", K: "a1@7 ~@25", L: "a1@5 ~@19 e2@2 ~ c3@2 a2 ~@2",
  M: "d2@6 ~@18 a2@2 ~ f2 ~ d2@2 ~", N: "a1@8 ~@13 c3 ~@2 a2@2 ~ e2@2 c2@2 ~", O: "a1@7 ~@17 e3 ~@2 c3@2 a2@2 ~",
  P: "d2@7 ~@17 a2@2 ~ f2@2 d2@2 ~", Q: "e2@7 ~ b1@8 e1@3 ~@13", R: "b1@7 ~ b1@7 ~ e1@7 ~ e1@7 ~",
  S: "a1@7 ~ c2@7 ~ e2@8 c2@5 e2@2 ~", T: "a2 ~@7",
})).s("gm_synth_bass_2").gain(0.2)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C D E F G H I J K L M N O P M Q R M@2 Q R M R S T U V W X Y Z AA M N O P M Q R M@2 Q R M@2 Q AB AC M ~
>`.pickRestart({
  A: "a4@24 ~@3 a4@2 ~@3", B: "~ d4@31", C: "f4@13 ~@3", D: "~ g4@12 ~@4 g#4@14 ~", E: "e4@22 ~@7 [e4,a4]@2 ~",
  F: "d3@29 ~@3", G: "f4@7 ~", H: "~ e4@11 ~@5 f4@12 ~@3", I: "~ e4@22 ~@2 e4@2 ~@5", J: "f4@12 [d4,f4] ~@3",
  K: "~@3 c4@8 ~@6 d#4@11 ~@4", L: "[a3,c4]@10 ~ [f3,a3,c4]@2 ~@3 d4@16",
  M: "~@8 [a3,e4,a4,c5,e5] ~@15 [a3,e4,a4,c5,e5] ~@7", N: "~@8 [a3,d4,f4,a4] ~@15 [a3,d4,f4,a4] ~@7",
  O: "~@8 [a3,c4,e4,a4] ~@15 [b3,d#4,f#4,a4] ~@7", P: "~@3 f4@2 e4@2 ~ [f3,a3,d#4,f4]@5 [e3,g#3,b3,e4]@10 ~@9",
  Q: "~@8 [d4,f4,a4,d5] ~@15 [d4,f4,a4,d5] ~@7", R: "~@8 [e4,g#4,b4,e5] ~@15 [e4,g#4,b4,e5] ~@7",
  S: "~@8 [d4,f4,a4,c5] ~@23", T: "[a3,c4,e4]@16 ~@11 [a3,c4] ~@4", U: "~ d4@31, f3",
  V: "f4@4 ~ e4@5 f4@2 e4@2 d4@2 [d4,f4]@4 e4@8 ~ d4@3, d4 ~@31", W: "~ c4@9 c4@2 b3@2 a3@3 g#3@11 ~@4",
  X: "~@4 [a3,c4]@2 ~@2 c4@2 ~@6 c4@5 ~@3 c4@3 ~ e4@2 ~@2", // Am
  Y: "~@3 e4 ~@2 e4 ~ e4@8 f4@2 ~@14, ~@2 f4 ~@13, ~@5 a4@2 d5@8 ~@17", Z: "~@3 c4@12 ~ [b3,d#4]@13 ~@3",
  AA: "[a3,c4]@9 ~@2 [a3,c4] ~@5 d4@13 ~@2", AB: "~@8 [e4,g#4,b4,e5] ~@23",
  AC: "~@8 [b3,d4,f4,a4,d5] ~@15 [e4,g#4,b4,e5] ~@7", // Bm7b5 E
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.4)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~ A B C@3 D E F G H I J ~@14 K L M N O P Q R ~@18>".pickRestart({
  A: "[c4,e4]@24 ~@3 [c4,e4]@2 ~@3", B: "[f3,a3]",
  C: "[b3@29 ~@3 e4@14 ~@2 [b3,e4]@14 ~@2 c4@22 ~@6 [a3,c4]@2 ~@2, d4 ~@30 c4@15 ~@16 e3@23 ~@11, ~@63 a3@22 ~@11]/3", // E5 Am
  D: "~@5 d4@27, ~ a3@29 ~@2, ~@3 f3@28 ~", E: "[g3,b3]@29 ~@3, d4 ~@31",
  F: "g3@15 ~ [b3,d4]@13 ~@3, c4@11 ~@4 g#3@14 ~@3", G: "[e3,a3,c4]@23 ~ [e3,a3,c4]@2 ~@6", H: "[a3,d4,a4]@12 a3 ~@3",
  I: "~@3 [e3,a3]@8 ~@5 [f#3,a3,b3]@14 ~@2", J: "[d#3,f3]@10 ~ d#3@2 ~@4 e4@15, ~ [e3,g#3,b3]",
  K: "e3@16 [e3,a3,c4,e4]@8 ~@3 e3 ~@4", L: "[d3,a3]", M: "[g3,b3]@13 ~@3 [g3,b3]@12 ~ b3@3",
  N: "[c3,e3,g3]@15 ~ [b2,d3,e3]@11 ~@5", // C E7
  O: "~@4 [a2,e3,g3]@2 ~@2 g3@2 ~@2 a3@2 ~@2 [e3,g3,a3]@5 ~@3 [e3,g3,a3]@3 ~ [g3,a3,c4]@2 ~@2, ~@4 [a2,e3]@3 ~@9, ~@11 b3@2 ~@19", // A7 Am7 A5
  P: "~@3 [a3,c4] ~@2 [a3,c4] [a3,d4,f4,a4] ~@3 f3 g3 a3 ~ c4 [d3,a3,c4]@2 ~@2 d4@2 ~@10, ~@4 d4@2 ~@2 g4@8 ~@3 e4@2 ~@11, ~@5 d5@2 ~@25", // Am Dm D7
  Q: "~@3 [a2,e3,g3]@12 ~ [f#3,a3]@13 ~@3", R: "[d#3,f3]@9 ~@2 [d#3,f3] ~@4 [e3,g#3,b3]@14 ~@2",
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.4)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~ A B C D E F G H I ~@3 J K L M ~@10 E F G H I ~@3 J K L M ~@14>".pickRestart({
  A: "~@5 [c4,e4]@9 [a3,c4]@2 [b3,d4]@4 ~ [a3,c4]@9 ~@2", B: "~@6 [f4,a4]@7 [d4,f4]@3 [e4,g4]@5 [d4,f4]@8 ~@3",
  C: "[f4,a4]@5 [e4,g4]@6 [f4,a4]@2 ~ [d4,f4]@3 [f4,a4]@4 [e4,g4]@8 [d4,f4]@3, ~@13 [e4,g4]@2 ~@17", // F Em F Dm F Em Dm Em
  D: "[c4,e4]@5 [c4,e4]@5 ~ [c4,e4]@2 ~@3 [g#3,b3]@2 [a3,c4]@2 [b3,d4]@8 ~@4, ~@13 [b3,d4]@2 c4@2 ~@15, ~@7 a3 ~@8", // C G#m Am Bm
  E: "~@4 [c4,e4]@8 ~ [a3,c4]@3 [b3,d4]@5 [a3,c4]@7 ~@4", F: "~@4 [f4,a4]@9 [d4,f4]@3 [e4,g4]@5 [d4,f4]@8 ~@3",
  G: "[f4,a4]@5 [e4,g4]@5 [f4,a4]@2 [e4,g4]@2 [d4,f4]@2 [f4,a4]@4 [e4,g4]@9 [d4,f4]@3", // F Em F Em Dm F Em Dm
  H: "[c4,e4]@4 ~ [c4,e4]@5 [c4,e4]@2 ~ b3 [a3,c4]@2 [g#3,b3]@2 [a3,c4]@2 [b3,d4]@10 ~@2, ~@6 d4 ~@9", // C Am G#m Am Bm
  I: "~@11 [c4,e4] b3@2 a3 ~", J: "[c4,e4]@5 [a3,c4]@3 [b3,d4]@5 [c4,e4]@13 ~@6",
  K: "f4@4 ~ [d4,f4]@3 [e4,g4]@5 [f4,a4]@14 ~@5, a4 ~@3", // Dm Em F
  L: "e4@2 ~ a3@2 [b3,d4]@2 ~ [c4,e4]@6 ~@2 [d#4,f#4,a4]@2 ~ b3@2 d#4@3 ~@2 d#4@4 ~@2, c4@5 ~@19 [b3,f#4]@7 ~", // Bm C D#dim B5
  M: "[d#4,f4,a4,c5]@5 b4@2 ~ [d#4,f4,a4,c5]@5 [e4,g#4,b4]@8 ~@11", // F7 E
})).s("gm_electric_guitar_jazz").gain(0.25).pan(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@17 A B C D E F G H I J ~@12 A B C D E F G H E F K L M ~>".pickRestart({
  A: "~@5 e5@3 c6@5 b5@3 a5@8 g5@8", B: "f5@8 a5@8 e6@8 d6@5 ~@3",
  C: "~@8 [e5,g#5]@3 [f#5,a5]@2 [g#5,b5]@2 ~ [g#5,b5]@3 [e5,g#5]@2 [f#5,a5]@3 [g#5,b5]@7 ~", D: "[a5,c6]",
  E: "~@8 e5@3 b5@2 a5@3 b5@14 ~@2", F: "~@8 e5@3 g5@2 f#5@3 f5@10 ~@6", G: "~@8 d5@3 e5@2 f5@3 e5@8 ~@8",
  H: "~@8 [d5,f5]@5 [c5,e5]@3 [d5,f5]@5 [c5,e5]@3 ~@8", I: "~@8 e5@3 g#5@2 f5@3 e5@10 ~@6",
  J: "e5@2 ~ a5@2 e5@3 f5@3 a5@2 f5@3 e5@2 ~@14", K: "~@8 d5@3 e5@2 f5@3 e5@5 ~@11",
  L: "[d5,f5] ~ [d5,f5] f5 d5 [d5,f5] ~@2 [d5,f5] ~ [d5,f5] ~@2 [d5,f5] ~ [e5,g#5] ~@2 [e5,g#5] g#5 e5 [e5,g#5] ~@2 [e5,g#5] ~ [e5,a5] ~@2 [e5,b5] ~@2", // Dm E A5 E5
  M: "[e5,a5]", // A5
})).s("gm_string_ensemble_2").gain(0.4).pan(0.6)

// other · vibraphone
const vibraphone = note("<~@2 A B C D E F G@3 H I ~@14 D E F J K L@2 M ~@18>".pickRestart({
  A: "~@5 a4@9 f4@2 ~ g4@4 ~@11", B: "a4@5 g4@5 ~ a4@2 g4@2 f4@2 a4@4 g4@8 ~@3", C: "~@5 e4@4 ~ e4@2 ~@20",
  D: "~@5 e4@7 ~@20", E: "~@4 a4@8 ~ f4@2 ~ g4@5 ~@11", F: "a4@5 g4@5 a4@2 g4@2 f4@3 ~@3 g4@8 ~ f4@3",
  G: "[~ e4@3 ~@6 e4@2 ~@2 c4@2 b3@2 c4@2 ~@2 f4@2 ~ e4@2 g#4@2 a4@2 ~ a4@2 ~@2 a4@2 b4 ~ c5@2 b4 ~ c5 ~ d5@2 e5 ~@2 c5@2 ~ c5 ~ b4@2 ~ c5 a4@2 ~ d5@8 ~@15 a4 g4 ~ f4 ~@2 f4@4, ~@21 d4@2 ~@8 b4@2 ~@23 c5 ~@39]/3",
  H: "~@3 e4 ~ f4@2 a4 b4 ~ c5@2 ~ c5 b4 a4 ~ d#5@3 f#4@5 ~@7",
  I: "~@2 f5@2 e5 ~ c5 ~ a4 ~@5 a4 c5 ~ b4@12 ~@3, ~@5 d5@2 ~@25",
  J: "~ e4@3 ~@6 e4@2 ~@2 c4@2 b3@2 c4@2 d4@2 f4@2 e4@2 g#4@2 a4@2 b4@2",
  K: "a4@2 ~ b4@2 ~ d5@2 ~ e5@2 c5@2 ~ a4 ~ b4@2 ~ a4 ~ b4@2 a4 ~@2 a4 ~ b4 ~ a4 ~, ~@5 c5@2 ~@6 b4@2 ~@10 b4@2 ~@5",
  L: "[b4@2 a4 b4 a4 f4@12 ~@2 d4 ~ f4 g4 ~ g#4 a4 b4 c5 d5@2 ~ e5@4 c5@4 a4 b4@4 a4@2 ~ b4@6 f#4@6 ~@5, ~@10 e4 ~@21]/2",
  M: "~@3 f5@3 e5@2 f5@3 c5@3 e5@4 d#5 ~ e5@3 e4@7 ~@2",
})).s("gm_vibraphone").gain(0.15).pan(0.7)

// other · vibraphone · soft notes
const vibraphone_soft = note("<~@2 A B C D E F G H I J K ~@14 D E F G ~ L ~@20>".pickRestart({
  A: "~@11 f4@2 ~@3", B: "~@29 f4@3", C: "e4@3 ~@10 d4@2 c4@2 b3@2 ~@13", D: "~@14 c4@2 d4@4 ~ c4@6 ~@5",
  E: "~@21 f4@4 ~@7", F: "~@17 a4@3 ~@12", G: "~@5 e4@4 ~@4 d4@2 ~@17", H: "~@27 b4 ~@4", I: "~@4 [b4,c5] a4@9 ~@18",
  J: "~@13 b4 ~@18", K: "~@9 f4 d4@2 f4 g4 ~@18, ~@4 g4 ~@11", L: "~@18 c#4 ~@13",
})).s("gm_vibraphone").gain(0.09).pan(0.7)

// chords · piano
const piano = note("<~@17 A B C D A B C D C E ~@12 A B C D A B C D A B F G D H>".pickRestart({
  A: "[a5,c6,e6,a6] ~@2 [a5,c6,e6,a6]!3 ~@2 [a5,c6,e6,a6] ~@2 [a5,c6,e6,a6] ~ [a5,c6,e6,a6] ~@2 [a5,c6,e6,a6] ~@2 [a5,c6,e6,a6]!3 ~@2 [a5,c6,e6,a6] ~@2 [a5,c6,e6,a6] ~ [a5,c6,e6,a6] ~@2", // Am
  B: "[f5,a5,d6] ~@2 [f5,a5,d6]!3 ~@2 [f5,a5,d6] ~@2 [f5,a5,d6] ~ [f5,a5] ~@2 [f5,a5,d6] ~@2 [a5,d6] [f5,a5,d6]!2 ~@2 [f5,a5,d6] ~@2 [f5,a5,d6] ~ [f5,a5,d6] ~@2, ~@13 d6@3 ~@16", // Dm F Dm D5 Dm
  C: "[g#5,b5,e6] ~@2 [g#5,b5,e6]!3 ~@2 [g#5,b5,e6] ~@2 [g#5,b5,e6] ~ [g#5,b5,e6] ~@2 [g#5,b5,e6] ~@2 [g#5,b5,e6]!3 ~@2 [g#5,b5,e6] ~@2 [g#5,b5,e6] ~ [g#5,b5,e6] ~@2", // E
  D: "[c6,e6,a6] ~@2 [c6,e6,a6]!3 ~@2 [c6,e6,a6] ~@2 [c6,e6,a6] ~ [c6,e6,a6] ~@2 [c6,e6,a6] ~@2 [c6,e6,a6]!3 ~@2 [c6,e6,a6] ~@2 [c6,e6,a6] ~ [c6,e6,a6] ~@2", // Am
  E: "[c6,e6,a6] ~@2 [c6,e6,a6]!3 ~@2 [c6,d6,f6,a6] ~@2 [c6,d6,f6,a6] ~ [c6,d6,f6,a6] ~@2 [c6,a6]@2 ~@14, ~@16 e6 ~@15", // Am Dm7 F
  F: "[g#5,b5,e6] ~@2 [g#5,b5,e6]!3 ~@2 [g#5,b5,e6] ~@2 [g#5,b5,e6] ~ [g#5,b5,e6] ~@2 [g#5,b5,e6] ~@15", // E
  G: "[d6,f6,a6,b6] ~@2 [d6,f6,a6,b6]!3 ~@2 [d6,f6,a6,b6] ~@2 [d6,f6,a6,b6] ~ [d6,f6,a6,b6] ~@2 [d6,e6,g#6,b6] ~@2 [d6,e6,g#6,b6]!3 ~@2 [d6,e6,g#6,b6] ~@2 [d6,e6,g#6,b6] ~ [d6,e6,g#6,b6] ~@2", // Bm7b5 E7
  H: "[c6,e6,a6] ~@7", // Am
})).s("gm_piano").gain(0.18).pan(0.6)

// other · timpani
const timpani = note("<~@16 A B ~@20 A B ~@10 C D E>".pickRestart({
  A: "~@24 e3!2 ~ e3!3 ~ e3", B: "a2@3 ~@13", C: "b2 ~@3 e2 ~ e2 ~", D: "a2@6 ~@15 a2!11", E: "a2 ~@7",
})).s("gm_timpani").gain(0.26).pan(0.6)

// other · timpani · soft notes
const timpani_soft = note("<~@50 [~@2 b2 ~@5] [~@16 a2!5 ~@11] ~>").s("gm_timpani").gain(0.13).pan(0.6)

// drums · snare
const snare = s("sd").struct("<~ A@8 B@2 A C A@3 D A@13 E A B F G A@3 D A@10 H A@2 ~>".pickRestart({
  A: "x ~@3 x!5 ~@3 x!5 ~@3 x!5 ~@3 x!4", B: "x ~@3 x!5 ~@3 x!5 ~@2 x!6 ~@2 x!5",
  C: "x ~@3 x!5 ~@3 x!5 ~@3 x!5 ~ x!3 ~@3", D: "x ~@3 x!5 ~@23", E: "x ~@3 x!5 ~@3 x!9 ~@3 x ~@2 x ~ x ~@2",
  F: "x ~@3 x!5 ~@3 x!5 ~@3 x!5 ~@2 x!2 ~@2 x", G: "x ~@3 x!5 ~@3 x!17 ~@3", H: "x ~@3 x!5 ~@3 x!5 ~@15",
})).gain(0.07)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~ A@8 B@2 A@5 C A@15 B A@5 C A@10 C A@2 ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x ~ x", C: "~ x ~@2",
})).gain(0.74)

// drums · ride bell
const ride_bell = s("rd").struct("<~@13 A B C D A@10 E ~@7 A B C D A@10 F A@2 G>".pickRestart({
  A: "x ~@2 x!3 ~@2 x ~ x ~@2 x ~@2 x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2",
  B: "x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2 x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2",
  C: "x ~@2 x!3 ~@2 x ~ x ~@2 x ~@2 x ~@2 x!3 ~@2 x ~ x ~@2 x ~@2", D: "x ~@2 x!3 ~@2 x ~@4 x ~@5 x ~@12", E: "x",
  F: "x ~@2 x!3 ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@12", G: "x ~@2 x ~@28",
})).gain(0.3)

// drums · shaker
const shaker = s("sh").struct("<~@12 [~@31 x] ~@40>").gain(0.22)

stack(
  bass, bass_2, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_jazz, string_ensemble_2, vibraphone,
  vibraphone_soft, piano, timpani, timpani_soft, snare, pedal_hat, ride_bell, shaker
)

More by Mina