Strudelify

Amici come prima

Daniele

KeyG majorTempo67 bpm
0:00/0:00
// Amici come prima — Daniele
// 67 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 46 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(67/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(`<
  A B C B A B C B A D@2 E A D@2 E A B C B@2 F G H I F J K A B C B A D@2 E A B C B A B C B L ~
>`.pickRestart({
  A: "g1@3 g1 b1@3 b1", B: "c2", C: "g1@5 ~ g1@2 b1@6 b1@2", D: "c2@3 c2 b1@3 b1", E: "a1@3 a1 d2@3 d2", F: "b1",
  G: "a1", H: "g2 f#2", I: "e2", J: "a1@12 ~ a1 b1@2", K: "c2@8 d2@7 ~", L: "g1",
})).s("gm_fretless_bass").gain(0.48)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<A@8 B@8 C@4 D ~@2 E@2 ~ F G H@4 I ~ J K L M N ~ O P@4 ~>".pickRestart({
  A: "[~@2 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 g4 [g3,d4,g4] [g3,d4,g4]@2 [g3,d4,g4]!8 d4 [d4,g4]@3 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 g4 [g3,d4,g4]!2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]!2 [g3,d4] [d4,g4] [d4,g4]@3 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 g4 [g3,d4,g4] [g3,d4,g4]@2 [g3,d4,g4]!8 d4 [d4,g4]@3 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 g4 [g3,d4,g4]!2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]!2 [g3,d4] [d4,g4]!2, ~@4 d4@6 ~@20 g3@4 ~@2 d4@6 ~@20 g3@3 ~@3 d4@6 ~@20 g3@4 ~@2 d4@6 ~@20 g3@2]/8", // G5 G G5 G G5 G G5 G …
  B: "[~@2 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 g4 [g3,d4,g4]!2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]!2 [g3,d4] [d4,g4] [d4,g4]@3 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 [g3,e4]!3 [g3,e4]@3 ~@2 [c4,f#4]!3 ~ c4 [c4,f#4], ~@4 d4@6 ~@20 g3@4 ~@2 d4@6 ~@19 [c4,f#4]@2 ~]/4", // G5 G G5 G G5 G G5 G …
  C: "[~@2 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 g4 [g3,d4,g4]!2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]!2 [g3,d4] [g3,d4,g4] [d4,g4]@3 [g3,d4,g4]!2 g4 [g3,g4]@5 [d4,g4] [g3,d4,g4] [g3,g4] [g3,d4,g4]@5 g4 [g3,d4,g4]!2 [d4,g4]@3 b3 c4 d4 e4 f#4 g4 a4 f#4, ~@4 d4@6 ~@26 d4@6 ~@11 g3@2 ~@9]/4", // G5 G G5 G G5 G G5 G …
  D: "g4@15 ~", E: "[~@4 c5 b4@2 a4@5 [d4,b4] [c4,a4]@2 [b3,g4]@5 ~@12, ~ d4 ~@14, ~@3 g4@2 ~@27]/2", F: "~@13 a2 b2 ~",
  G: "c3@8 d3@3 g4 ~ a3@3, ~@11 c4@3 ~@2, ~@3 f#4",
  H: "[~ b4@2 ~ c5 ~ d5 ~ d5@2 c5 b4@2 a4 g4@5 c5 b4 d4!2 d4@3 e4 c5 b4 a4 g4 g4@2 a4!2 b4 b4@5 ~ a4 g4 a4!2 ~@7 g4@5 ~ g4 b4 c5 b4 a4, ~@46 g4@7 ~@11, ~@51 d4@8 ~@5]/4",
  I: "g4@2 c4 b3 g3 e3 d3@9 ~", J: "~@9 g4!4 a4!3", K: "[a4,b4] b4!6 ~@2 g4!2 g4@2 g4 g4@2",
  L: "g4 a4@7 ~ [b4,d5] ~ [g4,b4] ~ [d4,g4,b4] ~@2", M: "~@9 d4@4 c4@3, ~ c4@8 ~@7, ~ d4@3 ~@4, ~@3 g4@13",
  N: "~@2 [d4,g4] ~@5 g4@4 g4@4", O: "~ g4 ~@3 d4@2 ~ d4@2 [g4,d5] ~@5",
  P: "[~@10 [e4,e5] ~ [d4,d5] [e4,e5] [d4,d5] [b3,b4]@5 ~@5 a4 g4 ~@3 d4@4 b4!2 ~@2 g4@3 [g4,b4,d5] ~@6 [d4,g4]@15 ~, ~@27 a4@6 ~@3 d5@4 ~@24, ~@29 g4@3 ~@15 g3@15 ~@2]/4", // E D E D B G G5
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@20 A B C@2 D B E@2 F@4 G@4 F@8 H ~>".pickRestart({
  A: "[g3,b3,e4]", B: "[f#3,a3,d4]", C: "[[e3,c4]@4 b3@2 a3 d4, g3@3 f#3, ~ d3]/2", D: "[e3,g3,b3]",
  E: "[[e3,g3,c4]@3 [d3,a3,d4]]/2", F: "[g2 b2 [c3,e4]@2 g2 b2 [c3,e4]@2, g3, d4 ~ d4 ~]/4",
  G: "[b3@2 [b2,a3]@2 [c3,e3]@2 [b2,d3]@2 [c3,e3]@2 [b2,d3]@2 [a2,e3]@2 ~ f#3, d4, g3@15 ~, ~@3 a3, ~@7 d3]/4", // B7 C Bm C Bm A5
  H: "[g2,b3,d4,g4]", // G
})).s("gm_string_ensemble_2").gain(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@20 A B C D E@2 F@6 G H I J K@2 L@7 ~>".pickRestart({
  A: "~ [b3,e4] [a3,f#4] b3@4 [b4,e5], ~@3 g4@5", B: "[d4,a4]@7 [f4,c#5] d5@2 [d4,a4]@6, ~ f#4",
  C: "[d4,g4]@5 [f#4,d5] [g4,e5] [e4,c5]", D: "b4@6 c5 b4 a4@2 d5@3 [c4,a4]@3, d4@13 ~@3",
  E: "[~@4 d5@2 b4@10 a4@4 [a4,f#5]@2 [f#4,d5]@4 [f#4,a4]@3 [d4,f#4]@3, d4@5 ~@3, g4 ~]/2", // D F#m D
  F: "[[e4,g4]@8 c5@8 e5@4 [b4,g5]@2 [a4,f#5]@4 g4@2 f#4 e4@3 ~@12 g4@7 ~@9 [a4,c5]@4 b4@8 a4@8 [g4,d5] ~ d4@2 [g4,d5] [d4,a4]!2 ~ [g4,d5] [d4,a4]!2 [g4,d5]!2 [d4,a4]!2 ~, ~@8 g4@12 ~@6 d5@14 b4@20 ~@22 a4 ~@13, ~@32 d4@49 ~@15]/6", // Em D Am G5 D5 G5 D5 G5 …
  G: "~@2 [g4,d5] [d4,a4] ~ [d4,a4] ~@4 [g4,d5] [d4,a4] ~ [d4,a4] ~@2", // G5 D5 G5 D5
  H: "~@2 [g4,d5] [d4,a4] ~ d4@2 ~@3 [g4,d5] [d4,a4] ~ d4@2 ~, ~@5 a4 ~@7 a4 ~@2", // G5 D5 G5 D5
  I: "~@2 [g4,d5] [d4,a4] ~ [d4,a4] ~@4 [g4,d5] [d4,a4] ~ [d4,a4] ~ a4", J: "c5 e4 ~ f#4, g4@3 ~, ~ d5",
  K: "[~@2 g4@2 f#4 g4 a4@4 g4@2 f#4 g4 a4@4 ~ g4 c4 g4@2 ~ d4 c4 ~ [d4,g4] ~ g4@2 c4, ~@21 d4 ~ c4@2 ~@3 c4@2 ~@2, ~@24 g4@2 ~@3 d4 ~@2]/2", // G5
  L: "[g3@2 g4@2 f#4 g4 ~@2 b3@2 g4@2 f#4 g4 ~@4 b3@2 d4@2 d3@2 d4@3 [d4,g4,d5] [g4,d5] [a4,e5] [g4,d5]@11 ~ [b3,g4] ~@3 [d4,a4]@4 [a3,g4] ~@3 [b3,a4]@2 [a3,g4] ~ [a3,g4]@2 [b3,d4] ~@3 g4@2 a4 ~@3 [a3,a4]@4 [b3,g4] ~@3 d4@4 [b3,a4] ~@3 a3@4 d4@6 [g4,g5]@16, b3@3 a4@2 ~@2 a4@3 ~ g3@2 ~@18 b3@3 ~@11 d5@11, ~@31 d4@2 ~@6 g4 ~@3 a4@5 ~@8]/7", // G5 A5 G5 Em D5 A7 B7 A7 …
})).s("gm_string_ensemble_1").gain(0.32)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note("<A@8 B@4 C@4 D@2 E@2 F G H@3 I J K L@4 M@4 N@4 O@5 ~>".pickRestart({
  A: "[~@2 g3!3 ~ g2@2 ~@6 b2@2 ~@2 g3@2 ~@2 g3@5 g3@2 g3 ~@4 g3!3 ~ g2@2 ~@6 b2@2 ~@8 g3@4 ~@2 g3@2, g2@5 g3@5 d3@4 g3@4 ~@12 g3@4 ~@3 g3@5 d3@4 g3@5 ~ g3@4 ~@4 d4@4, ~@8 b2@6 ~@2 c3@16 g2@5 ~@3 b2@6 ~@2 c3@14 ~@2, ~@12 d4@7 ~ d4@5 ~@19 d4@7 ~@3 d3@5 ~@5]/4",
  B: "[~@2 g3!3 ~ g2@2 ~@6 b2@2 ~@2 g3@2 ~@2 c3@2 ~@2 g3 ~@3 [b2,g3]@2 ~@2 g3@2 ~@2 c3@2 ~@2 g3 ~ d4 ~ [b2,g3]@2 ~@2 [g3,c4]!3 ~ a2@2 ~@2 [a3,d4]!3 a3 ~ a3, g2@5 g3@5 d3@4 g3@4 ~@4 g3@4 ~ g3@3 ~@8 g3@4 ~ g3@2 ~@8 [g3,c4]@5 ~@6, ~@8 b2@6 ~@2 c3@6 ~@2 b2@6 ~@2 c3@5 ~@3 b2@6 ~@2 a2@6 ~@2 d3@6 [d3,a3]@2, ~@12 d4@7 ~ d4@5 ~@3 d4@6 ~@2 d4@5 ~@4 d4@5 ~@11 d4@3]/4", // Em C5 D5 C5 D5
  C: "[~@2 g3!3 ~ g2@2 ~@6 b2@2 ~@2 g3@2 ~@2 c3@2 ~@2 g3 ~@3 [b2,g3]@2 ~@2 g3@2 ~@2 c3@2 ~@2 g3 ~ d4 ~ [b2,g3]@2 ~@2 [g3,c4]!3 ~ a2@2 ~@2 [a3,d4]!3 a3 ~ a3, g2@5 g3@5 d3@4 g3@4 ~@4 g3@4 ~ g3@2 ~@9 g3@4 ~ g3@3 ~@7 [g3,c4]@5 ~@6, ~@8 b2@6 ~@2 c3@6 ~@2 b2@6 ~@2 c3@5 ~@3 b2@6 ~@2 a2@6 ~@2 d3@6 [d3,a3]@2, ~@12 d4@7 ~ d4@5 ~@3 d4@6 ~@2 d4@5 ~@4 d4@5 ~@11 d4@3]/4", // Em C5 D5 C5 D5
  D: "[~@2 g3!3 ~ g2@2 ~@6 b2@2 ~@3 d4 d4@4 b3 ~@6 b3, g2@5 g3@5 d3@4 g3@4 g3@4 ~@4 d4@3 ~ d4@2, ~@8 b2@6 ~@2 c3@11 ~ c3@3 ~, ~@12 d4@7 ~@6 b3@2 b3@2 b3@2 ~]/2",
  E: "[~@2 g3!3 ~ g2@2 ~@6 b2@2 ~@3 g3 [g3,c4] [g3,c4]@2 [g3,c4]@2 c4 ~ [g3,c4] c4@2 ~ c4, g2@5 g3@5 d3@4 g3@4 [g3,c4]@2 ~@8 g3@4, ~@8 b2@6 ~@2 c3@13 ~ [g2,c4]@2, ~@12 d4@7 ~@13]/2", // C5
  F: "~@3 e4@13, ~ g3@15, ~ b3@7", G: "~@5 a3@3, ~ f#3@5 f#3@3 d4@7, ~@2 a3@3 a3@5 ~@6, ~@3 d4@4 f#4@9",
  H: "[~@14 g3@3 ~@5 g3@2 ~@3 d4@2 [f#3,a3] ~ g3 ~@4 f#4 e4@11, ~ e3@5 e3@6 ~@5 g3@5 ~@3 f#3@3 ~@5 g3@14 ~, ~@2 g3@2 ~ g3@4 ~ g3@3 c4@3 ~@2 b3@2 ~ b3@4 ~ a3@2 ~@3 b3@4 b3@13, ~@3 c4@8 g4@8 d4@7 ~@8 d4@2 ~@12]/3", // F#m
  I: "~@13 d4@3, ~ f#3@4 f#4@11, ~@2 a3@9 a3@5, ~@3 d4@10 ~@3", J: "~@3 d4 ~ c4@10 ~, ~ e3@14 ~, ~@2 g3@2 e4@11 ~",
  K: "~@3 c4@5 ~@3 g4 ~ [a3,d4]@2 d4, ~ e3@7 ~@2 d4@2 f#4@4, ~@2 g3@6 ~ a3@4 ~@3", // D5
  L: "[~@6 g2@2 ~@6 b2@2 ~@14 d4@2 ~@2 g3@3 ~ g2@2 ~@6 b2@2 ~ d4 ~ g4 ~@3 d4 ~ d4 ~@5 d4, g2@5 ~@3 b2@6 ~@2 c3@15 ~ [g2,g4]@6 ~@2 b2@6 ~@2 c3@15 ~, ~ g3@4 ~ g3@6 ~ g3@5 g3@8 g3@8 ~@3 g3@21 g3@6, ~@2 d4@3 d4@6 ~ d4@11 d4@7 ~@3 d4@7 d4@9 ~ d4@3 d4@2 ~@4 d4@2 d4@2 ~, ~@3 g4@9 ~@2 g4@5 ~ g4@6 ~ g4@5 ~@6 g4@6 g4@7 ~ g4@2 a4@2 g4@3 ~ g4@2 a4@2]/4", // G
  M: "[~@6 g2@2 ~@6 b2@2 ~@6 c3@2 ~@6 b2@2 ~@6 c3@2 ~@6 b2@2 ~@6 a2@2 ~@3 g4@2 ~ g4@2, g2@5 d4@5 g4@8 g4@7 ~ g4@7 ~ g4@7 ~ g4@7 ~ e4@6 d3@6 ~@2, ~@2 g3@9 d4@8 d4@8 d4@8 d4@8 d4@21, ~@8 b2@5 g3@8 g3@8 g3@8 g3@8 g3@6 c4@6 a3@6 ~, ~@16 c3@6 ~@2 b2@6 ~@2 c3@6 ~@2 b2@6 ~@2 a2@5 g3@5 c4@2 ~ c4@3]/4",
  N: "[~@6 g2@2 ~@6 b2@2 ~@14 d4@2 ~@2 g3@3 ~ g2@2 ~@6 b2@2 ~ d4 ~ g4 ~@3 d4 ~ d4 ~@5 d4, g2@5 ~@3 b2@6 ~@2 c3@15 ~ [g2,g4]@6 ~@2 b2@6 ~@2 c3@15 ~, ~ g3@4 ~ g3@6 ~ g3@5 g3@8 g3@8 ~@3 g3@21 g3@6, ~@2 d4@3 d4@6 ~ d4@11 d4@7 ~@3 d4@7 d4@8 ~@2 d4@3 d4@2 ~@4 d4@2 d4@2 ~, ~@3 g4@9 ~@2 g4@6 g4@6 ~ g4@5 ~@6 g4@6 g4@6 ~@2 g4@2 a4@2 g4@3 ~ g4@2 a4@2]/4", // G
  O: "[~@6 g2@2 ~@6 b2@2 ~@14 d4@2 ~@2 g3@3 ~ g2@2 ~@6 b2@2 ~ d4 ~ g4 ~@3 d4 ~ d4 ~@6 [d4,g4]@16, g2@5 ~@3 b2@6 ~@2 c3@15 ~ [g2,g4]@6 ~@2 b2@6 ~@2 c3@15 ~@17, ~ g3@4 ~ g3@6 ~ g3@5 g3@8 g3@8 ~@3 g3@21 g3@6 ~@16, ~@2 d4@3 d4@6 ~ d4@6 ~@5 d4@7 ~@3 d4@7 d4@9 ~ d4@3 d4@2 ~@4 d4@2 d4@2 b3@16 ~, ~@3 g4@9 ~@2 g4@6 g4@6 ~ g4@5 ~@6 g4@6 g4@4 ~@4 g4@2 a4@2 g4@3 ~ g4@2 a4@2 ~@16]/5", // G5 G
})).s("gm_acoustic_guitar_steel").gain(0.56).pan(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  [~@2 x ~@6 x!2 ~@5]
  [~@2 x ~@3 x ~ x!3 ~@3 x ~]
  [~@2 x ~@5 x!3 ~@3 x ~]!18
  [x!2 ~ x!3 ~ x]!8
  [~@2 x ~@5 x!3 ~@3 x ~]!8
  [x!2 ~ x!3 ~ x]!8
  x
  ~
>`).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<[~@4 x ~@2 x] ~@45>").gain(0.24)

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

// drums · ride
const ride = s("rd").struct("<~@44 x ~>").gain(0.4)

// drums · shaker
const shaker = s("sh").struct(`<
  [x ~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!42
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~]
  ~@2
>`).gain(0.32)

stack(
  bass, acoustic_guitar_steel, string_ensemble_2, string_ensemble_1, acoustic_guitar_steel_2, kick, snare, snare_soft,
  clap, ride, shaker
)

More by Daniele