Strudelify

Cogli la prima mela

Angelo Branduardi

KeyE minorTempo140 bpm
0:00/0:00
// Cogli la prima mela — Angelo Branduardi
// 140 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 119 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(140/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 F G A H C I J K G A H C I J K L M N O P M Q R S M N O P M Q R S T A B C D E F G A H C I J K G A H C I J K L
  M N O P M Q R S M N O P M Q R S T A B C D E F G A H C I J K G A H C I J K L A H C I J K L A H C I J K L A H C I J K U
  ~
>`.pickRestart({
  A: "e2@12 a1@11 ~", B: "e2@8 b2@2 e2@2 a1@11 ~", C: "e2@3 ~ b1@8 e1@12", D: "e2@12 b1@11 ~",
  E: "e2@12 b1@7 ~ b2@2 e2@2", F: "a1@11 ~ e2@2 ~@2 b1@8", G: "e1@3 g1 b1 d2", H: "e2@8 b2@2 ~@2 a2@11 ~",
  I: "e2@2 b1 b2", J: "e2@12 b1@6 b2@5 ~", K: "a2@11 ~ e2@2 ~@2 b1@8", L: "e1@12 e2@2 d2 ~@3 b1@4 a1 ~",
  M: "g1@6 e2 ~ f#2@4", N: "g2@11 ~ g2@2 ~@2 g2@4 f#2@4", O: "e2 a1", P: "d2@6 d3@6 d2@4 a1@3 ~ f#1@4",
  Q: "g2@12 b1@11 ~", R: "c2 e2 d2 f#2", S: "e2@10 ~@2 e2@2 d2@3 ~ b1@4 a1@2", T: "e2@3 g2 b2 d3", U: "e1 ~",
})).s("gm_acoustic_bass").gain(0.45)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G A B C D E F G A B C D E F G H I J K H L M@2 H I J K H L ~ N O A B C D E F G A B C D E F G A B C D E F P
  H I Q K H L M@2 H I Q K H L ~ R S A B C D E F G A B C D E F G A B C D T F P A B C D T U G A B C D T U G A B C D T V@2
  ~
>`.pickRestart({
  A: "~@4 e5@2 g5@2 e5@2 g5@2 ~@6 c5@5 ~, b4@12 a4@11 ~, ~@2 e4",
  B: "~@4 e5@2 g5@3 ~ e5@2 [c4,c5]@4 e4@2 [c4,c5]@5 ~, b4 ~", // C
  C: "[e4,g4,e5]@2 ~@2 [d#4,d#5]@6 f#4@2 e5@5 ~ e5@5 ~, ~@4 f#4 ~@7 [e4,g4]@12", // Em D# Em
  D: "~@4 [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [a4,d5]@2 ~@2 [a4,d5]@8, e4 b3", // E5 D5
  E: "~@4 [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~@2 [a4,d5]@3 ~ [a4,d5]@6 ~, e4@12 b3@11 ~", // E5 D5
  F: "e5@4 c5@2 a4@2 c5@2 e5@2 [b4,e5]@3 ~ [d#4,b4,d#5]@7 ~, a3 ~, e4 ~@11 e4 ~@11", // E5 G#m
  G: "~@18 b4@5 ~, e5, e4@5 ~ e4@6, ~@4 b4@13 ~@7, ~@6 g4@11 ~@7", H: "[d4,g4,b4]@10 ~@2 [e4,g4,c5]@3 ~ [c4,g4,a4]@7 ~",
  I: "[d4,g4,b4]@11 ~ b4@2 c5@2 ~ c5 a4@2 g4@2 f#4@2, ~@12 d4@11 ~, ~@8 b4 ~@3", // G
  J: "[b3,g4]@12 [a3,a4,c#5]@11 ~, b4@5 ~@7", K: "[a3,a4]@6 f#4 g4 a4 b4 c5 a4, d5@11 ~",
  L: "d5@2 c5@2 d5@8 d#5@4 b4@4 d#5@3 ~, [d4,g4]@12 [b3,d#4,a4]@11 ~", // G5 B7
  M: "[~@26 g4@5 ~@9 b3@8, ~@22 b3@13 ~ e4@12, ~@24 e4@9 ~ g4@14]/2",
  N: "~@3 g5@2 ~ g5@2 e5@2 g5@2 ~@2 [d5,f#5]@10, [e4,b4]@11 ~ [e4,b4]@10 ~@2, ~@5 e5@2 ~@17", // D E5
  O: "~@2 g5@2 e5@2 g5@2 e5@2 g5@2 ~@2 [d5,f#5]@9 ~, [e4,b4]@5 ~ [e4,b4]@6", // D E5
  P: "~@18 b4@5 ~, e5, e4@10 ~@2 e4@11 ~, ~@4 b4@13 ~@7, ~@6 g4@11 ~@7", Q: "[b3,g4] [a3,a4,c#5], b4@5 ~@7",
  R: "~@3 g5 ~@2 g5@2 e5@2 g5@2 ~@2 [d5,f#5]@10, [e4,b4]@11 ~ [e4,b4]@10 ~@2, ~@5 e5@2 ~@17", // D E5
  S: "~@2 g5@2 e5@2 g5 ~ e5@2 g5@2 ~@2 [d5,f#5]@9 ~, [e4,b4]@5 ~ [e4,b4]@6", // D E5
  T: "~@4 [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~@2 a4@2 ~@2 d5@6 ~, e4@12 b3@11 ~, ~@12 d5@3 ~ a4@6 ~@2", // E5
  U: "e5@4 c5@2 ~ c5@3 e5@2 [b4,e5]@3 ~ [d#4,b4,d#5]@7 ~, a3 ~, e4 ~@5 a4@2 ~@4 e4 ~@11", // E5 G#m
  V: "[e5@4 c5@2 ~ c5@3 e5@2 [b4,e5]@3 ~@9 e4@24, a3@4 ~@3 e3@9, e4 ~@5 a4@2 ~@4 e4 ~@3 [d#4,b4,d#5]@7 b3@25]/2", // E5 G#m
})).s("gm_acoustic_guitar_steel").gain(0.32)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B C D@2 E F ~@15 G H I J K L M ~ G H I J K L M ~ A B C D@2 E F A B C D@2 E F A B C D@2 E F ~ G H I J K L M ~ G H I J
  K L M ~ A B C D@2 E F A B C D@2 E F A B C D@2 E F A B C N D E F A B C D@2 E F A B C D@2 O@3
>`.pickRestart({
  A: "b4@2 ~@2 b4 ~ b4 ~ b4 ~ b4@2 c5@4 a4@8", B: "g4@11 ~ a4 ~@3 a4 ~ a4@2 b4@2 a4@2", C: "g4@4 f#4@8 e4@11 ~",
  D: "f#4@2 g4@2 a4@2 g4@2 f#4@2 e4@2 d4@4 b3@7 ~", E: "a4@2 ~@2 a4 ~ a4@2 b4@2 a4@2 g4@4 f#4@7 ~", F: "e4@11 ~",
  G: "~@12 g4@2 a4@2 ~ a4 f#4@2 e4@2 d4@2, ~@8 g4 ~@3", H: "b3 ~@11", I: "~@6 d4 e4 ~ g4 a4 f#4, ~@17 f#4@2 ~@5",
  J: "g4 ~@5", K: "b4@2 a4@2 ~@7 g4 f#4@4 g4@4 d#4@4, ~@4 b4@9 ~@11", L: "g4@11 ~ [d4,f#4]@12, e4@3 ~@5",
  M: "[b3,e4] ~", N: "f#4@2 g4@2 a4@2 g4@2 f#4 ~ e4@2 d4@4 b3@7 ~",
  O: "[a4@2 ~@2 a4 ~ a4@2 b4@2 a4@2 g4@4 f#4@6 ~@2 e4@22 ~@26, ~@22 e3@27 ~@23, ~@23 b3@26 ~@23]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.38).pan(0.1)

// other · electric guitar clean
const electric_guitar_clean = note("<~@3 A B ~@36 A B ~@36 C D ~@5 A B ~@31>".pickRestart({
  A: "~@13 d4@3 ~@8", B: "~@13 d4@4 ~@7", C: "~@13 d5@3 ~@8", D: "~@13 d5@4 ~@7",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.8)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D@2 E F ~@31 A B C D@2 E F G H I J@2 K L M N O P Q ~ R ~@13 S T U@2 A B C D@2 E F A B C D@2 E F M N O P Q ~ R M
  N O P Q ~ R M N O P Q ~ R M N O P Q ~@3
>`.pickRestart({
  A: "b4@2 ~@2 b4 ~ b4 ~ b4 ~ b4@2 c5@2 ~@2 a4@2 ~@6", B: "g4@4 ~@8 a4 ~@3 a4 ~ a4@2 b4@2 a4@2",
  C: "g4@2 ~@2 f#4@3 ~@5 e4@4 ~@8", D: "f#4 g4 a4 g4 f#4 e4 d4 ~ b3 ~@3",
  E: "a4 ~@3 a4 ~ a4 ~ b4@2 a4@2 g4 ~@3 f#4 ~@7", F: "e4 ~@7", G: "b5@2 ~@2 b5 ~ b5 ~ b5 ~ b5@2 c6@2 ~@2 a5@2 ~@6",
  H: "g5@4 ~@8 a5 ~@3 a5 ~ a5@2 b5@2 a5@2", I: "g5@2 ~@2 f#5@3 ~@5 e5@4 ~@8", J: "f#5 g5 a5 g5 f#5 e5 d5 ~ b4 ~@3",
  K: "a5 ~@3 a5 ~ a5 ~ b5@2 a5@2 g5 ~@3 f#5 ~@7", L: "e5 ~@7",
  M: "[g5,b5]@2 [f#5,a5]@2 [g5,b5]@2 [b4,e5]@2 [e5,g5]@2 [g5,b5] ~ [a5,c6]@2 [g5,b5]@2 [a5,c6]@2 a5@2 c5@2 [f#5,a5]@2, ~@18 e5 ~ e5 ~@3", // G F#m G E5 Em G Am G …
  N: "[g5,b5]@2 [f#5,a5] ~ [g5,b5] ~ [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@2 [d5,g5]@2 [e5,a5]@2 c5@2 [d5,g5]@2 [e5,a5]@2", // G F#m G F#m Em D C G5 …
  O: "[f#5,a5]@2 [g5,b5]@2 [f#5,a5]@2 ~@2 [d#5,f#5]@3 ~ [e5,g5]@4 ~@2 [f#5,a5]@2 [g5,b5]@2 [a5,c6]@2", // F#m G F#m D#m Em F#m G Am
  P: "[g5,b5]@3 ~@3 [f#5,a5]@2 [g5,b5]@2 [a5,c6]@2 [b5,d6]@5 ~@7", // G F#m G Am Bm
  Q: "[e5,g5]@6 [a4,f#5]@2 [b4,g5]@2 [c5,a5]@2 [d5,b5]@5 ~@7", // Em D Em F G
  R: "e5@2 b5@2 ~@2 [e5,g5]@2 ~@2 [e5,g5] ~ [e5,g5]@6 ~@6, g5 ~ g5 ~@21", // Em
  S: "[b4,d5]@2 [c5,e5]@2 [b4,d5]@3 ~@5 [g4,b4]@2 ~@2 g4@2 ~@2 [d#4,f#4]@4, ~@7 [a4,c5] ~@4, ~@15 b4@2 ~@7", // Bm C Bm G D#m Am
  T: "[e4,g4]@10 ~@2 [d4,f#4]@11 ~", U: "[[b3,e4]@5 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.32)

// chords · accordion
const accordion = note("<~@21 A@2 B@2 C@2 D E F G H@2 C@2 D E ~@22 A@2 B@2 C@2 I E F G H@2 C@2 I E ~@44>".pickRestart({
  A: "[d4@3 e4 c4@2 d4@6, g4]/2", B: "[[b3,d4,g4]@11 ~ e4@11 ~ [d4,f#4]@23 ~, ~@11 c#4@11 ~@26, ~@12 a4@35 ~]/2",
  C: "[d4@11 ~ e4@3 ~ c4@7 ~ d4@10 ~@2 [b3,d#4,a4]@11 ~, g4@8 g4@9 ~@7]/2", // B7
  D: "[c4,g4]@11 ~@2 d4@11, e4@8 ~@3 f#4@13, ~ a4", E: "[e3,b3]@13 ~@11", F: "d4@3 e4 c4@2, g4 ~@23", G: "d4",
  H: "[[b3,d4]@11 ~ e4@11 ~ [d4,f#4]@23 ~, g4 ~@10 c#4@11 ~@26, ~@12 a4@35 ~]/2", // Bm D
  I: "[c4,g4]@11 ~ [d4,a4]@12, e4@8 ~@3 f#4@13", // C5 D5
})).s("gm_accordion").gain(0.13)

// drums · kick
const kick = s("bd").struct("<[x!2]!117 ~@2>").gain(0.57)

// drums · rim
const rim = s("rim").struct("<~@21 [~@2 x!2 ~@8]!15 ~@23 [~@2 x!2 ~@8]!15 ~@45>").gain(0.26)

// drums · clap
const clap = s("cp").struct("<[~ x ~@2]!117 ~@2>").gain(0.38)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<[~ x ~@4]!117 ~@2>").gain(0.26)

// drums · low tom
const low_tom = s("lt").struct("<[x!2]!117 ~@2>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@21 [~@2 x]!15 ~@23 [~@2 x]!15 ~@45>").gain(0.45)

// drums · shaker
const shaker = s("sh").struct("<[x!12]!117 x ~>").gain(0.32)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_nylon, electric_guitar_clean, string_ensemble_1, accordion, kick, rim,
  clap, clap_soft, low_tom, open_hat, shaker
)

More by Angelo Branduardi