Strudelify

'O mare e tu

Andrea Bocelli

KeyA minorTempo94 bpm
0:00/0:00
// 'O mare e tu — Andrea Bocelli
// 94 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/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(`<
  ~@20 A B C D B@2 E F G H G@2 I J K L M G I N K A O N K P@2 Q R@2 S@2 Q T@2 U V W X V Y E F G H G@2 I J Z AA M G I N Z
  A O N K AB@3 AC AD AB@2 AE AC AD AB@3 AC AD AB@2 AE AC AD AB@3 AC AD AF@2
>`.pickRestart({
  A: "a#1@2 a#1@2 a#1@2 a#1 d2", B: "a#1!3 f2", C: "a1@2 a1 c#2 a1@2 e2 d2", D: "a1!4", E: "a1!3 e2",
  F: "a1@2 a1@2 a1 c#2 e2 c#2", G: "a#1@2 a#1@2 a#1@2 a#1 f2", H: "a#1@2 a#1@2 f1 a#1 d2 f1",
  I: "a#1@2 a#1@2 a#1 d2 f2 d2", J: "a1@2 a1@2 a1@2 a1 e2", K: "a1@2 a1@2 e1 a1 c2 a1", L: "f1 b1 d2 b1 d2@2 d2 b1",
  M: "f1@3 ~ f1@3 ~ f1@4 b1@4", N: "a1@2 a1@2 a1@2 a1 c2", O: "a#1@2 a#1@2 f1 a#1 d2 a#1",
  P: "[a1 a1@2 a1 a1@2 a1 a1@2 a1!2 a1@2 e2!2 a1]/2", Q: "a1 a1@2 a1 a1@2 a1!2",
  R: "[d2 d2@2 d2 d2@2 d2 d2@2 d2!2 d2@2 a1 f1 a1]/2", S: "[a1 a1@2 a1 a1@2 a1 a1@2 a1!3 e1 a1!2 e1]/2",
  T: "[d2 d2@2 d2 d2@2 d2 d2@2 d2!2 d2@2 d2!2 c2]/2", U: "a#1@2 a#1@3 ~ a#1@2 a#1@4 a#1@2 d2@2",
  V: "a#1@2 a#1@3 ~ a#1@2 a#1@4 f2@4", W: "a1!3 c#2 a1@2 e2 c#2", X: "a1@2 a1@3 ~ c#2@2 a1@4 a1@4",
  Y: "a#1@2 a#1@3 ~ a#1@2 a#1@4 f2@2 d2@2", Z: "a1@2 a1@2 a1 c2 e2 c2", AA: "e1 b1 d2 b1 d2@2 d2 b1",
  AB: "e1!4 e1@2 e1 b1", AC: "a1!4 a1@2 a1 e1", AD: "a1!5 c2 e2 c2", AE: "e1!5 g#1 b1 e1", AF: "a1/2",
})).s("gm_acoustic_bass").gain(0.35)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@3 B@2 A C D B@2 E@3 B@2 E@3 B F G@2 H@2 G I H@2 ~@17 E@3 B@2 E@3 B F G@2 H@2 G I H@2 ~@44
>`.pickRestart({
  A: "~@7 g3, a2, ~@2 g3@7 ~ g3@4 ~@2, ~ e3@3, ~@3 e4@3 e4@2",
  B: "~@7 a3, d3, ~ d4@5 d4@2, ~@4 a3@5 ~ a3@4 ~@2, ~@3 f4@5",
  C: "~@7 g3, a2, ~@2 g3@7 ~ g3@4 ~@2, ~ e3@3, ~@3 e4@3 c#4@2",
  D: "~@6 d4 c#4, a2, ~@2 g3@7 ~ g3@6, ~ e3@3, ~@3 e4@3 ~@2",
  E: "~@7 g3, a2, ~@2 g3@7 ~ g3@4 ~@2, ~ e3@3, ~@3 c#4@3 e4@2",
  F: "~@7 d3, d3@13 ~@3, ~@2 d4@7 ~ d4@4 ~@2, ~@4 a3@5 ~@3 a3@4, ~@3 f4@5",
  G: "~@7 e3, a#2, ~ a3@5 a3@2, ~@4 e3@5 ~ e3@4 ~@2, ~@3 d4@5",
  H: "[~@5 e3 ~@8 e4 c#4, a2@15 ~ a2@16, ~@2 a3@10 a3@5 ~ a3@14, ~@4 e3@5 ~@5 e3@5 ~ e3@5 ~ e3@6, ~@6 c#4@15 ~ c#4@6 ~@4]/2",
  I: "~@7 [a#2,e3], a#2@13 ~@3, ~ a3@5 a3@2, ~@4 e3@5 ~ e3@4 ~@2, ~@3 d4@5", // A#dim
})).s("gm_acoustic_guitar_nylon").gain(0.29)

// other · string ensemble 2
const string_ensemble_2 = note("<~@15 A@3 B@2 ~@7 C D@2 ~@20 E@3 F ~@8 C D@2 ~@42>".pickRestart({
  A: "[~@14 [e3,a3,c#4]@4 ~@12 [e3,a3,c#4]@4 ~@8 g4@2 a4@3 ~]/3", B: "[~@7 [d3,f3,a3,d4]@2 ~@7]/2",
  C: "~@4 [f4,f5,f6] [e4,e5,e6] [d4,d5,d6] [c4,c5,c6]", D: "[[a#3,a#4,a#5]@31 ~]/2", E: "~@3 [e3,a3,c#4]",
  F: "~@3 [d3,f3,a3,d4]", // Dm
})).s("gm_string_ensemble_2").gain(0.39).pan(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@20 A@2 B@2 A@2 B@2 C@5 D@2 E@4 D@2 F@2 D@2 ~@10 A@2 B@2 A@2 B@2 C@5 D@2 E@4 D@2 F@2 D@2 G@20 H@7
>`.pickRestart({
  A: "[e3,a3,a#3,d4]@2 e4 ~ e4 ~ [e3,a3,a#3,d4]@2 e4 ~ e4 ~ e4 ~ e4 ~, e4 ~@5 e4 ~@9", // Dsus2
  B: "[e3,a3,c#4]@2 e4 ~ e4 ~ [e3,a3,c#4]@2 e4 ~ e4 ~ e4 ~ e4 ~, e4 ~@5 e4 ~@9", C: "[f4,f5]/5", D: "[e4,e5]/2",
  E: "[d4,d5]/4", F: "[f4,f5]/2", G: "[e5,e6]/5", H: "[[e5,e6]@111 ~]/7",
})).s("gm_string_ensemble_1").gain(0.32)

// chords · taiko drum · E5
const taiko_drum = note("<~@28 [[e3,b3] ~@5 [e3,b3] ~@9]!77 [[e3,b3] ~@15] ~>").s("gm_taiko_drum").gain(0.64)

// other · acoustic guitar steel · A#maj7 Dmaj7 Dsus2
const acoustic_guitar_steel = note(`<
  ~@57
  [~ a3!11 [a3,a#3]@2 g3@2]
  [~@2 g3 ~ e3 d3 ~ e3 [c#3,d3] c#3 [d3,e3] f3 g3@2 c#3@2, ~ a3@2 ~@13]
  ~@48
>`).s("gm_acoustic_guitar_steel").gain(0.26).pan(0.4)

// other · banjo · Dmaj7 Dsus2
const banjo = note(`<
  ~@57
  [~@2 a4!10 a#4@2 g4@2, ~@12 a4 ~@3]
  [~@2 g4 ~ e4 d4 ~ e4 [c#4,d4] c#4 [d4,e4] f4 g4@2 c#4@2, ~ a4@2 ~@13]
  ~@48
>`).s("gm_banjo").gain(0.15).pan(0.7)

// other · banjo · soft notes
const banjo_soft = note("<~@57 [~ a4 ~@14] ~@49>").s("gm_banjo").gain(0.08).pan(0.7)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@15 A@3 B@2 C D E@2 C D E@2 F@5 G@2 H@4 I@2 J@2 K@2 ~@5 L@3 M ~ C D E@2 C D E@2 F@5 G@2 H@4 I@2 J@2 K@2 N@20 O@7
>`.pickRestart({
  A: "[~@7 [e3,a3,c#4]@2 ~@6 [e3,a3,c#4]@2 ~@7]/3", B: "[~@7 [d3,f3,a3,d4]@2 ~@7]/2",
  C: "[e3,a3,a#3,d4] ~@2 [e3,a3,a#3,d4] ~@4", D: "[e3,a#3,d4] ~@2 [e3,a3,a#3,d4] ~@4",
  E: "[e3,a3,c#4] ~@2 [e3,a3,c#4] ~@4", F: "[a#2,f3,a#3,d4]/5", G: "[a2,e3,a3,c4]/2", H: "[a3 a#3, [f3,d4]]/4",
  I: "[a3,c4]/2", J: "[f3,a#3,d4]/2", K: "[e3,a3,c4]/2", L: "~@3 [e3,a3,c#4]", M: "~@3 [d3,f3,a3,d4]",
  N: "[[g#3,b3]@3 [a3,c4]@2, e3]/5", O: "[[g#3,b3]@48 [a3,c4]@63 ~, e3@111 ~]/7",
})).s("gm_synth_strings_1").gain(0.4)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@80 A@3 B@2 A@3 B@2 A@3 B@2 A@3 B@2 A@3 B@2 ~@2>".pickRestart({
  A: "[e3,g#3,b3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,g#3,b3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~", // E
  B: "[e3,a3,c4,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,a3,c4,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~", // Am E Am E
})).s("gm_string_ensemble_1").gain(0.55).pan(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@28 [x!8]!77 x ~>").gain(0.32)

// drums · bongos
const bongos = s("bongo:4").struct("<~@80 [~@3 x ~@12]!25 ~@2>").gain(0.63)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@80 [~@3 x ~@4]!25 ~@2>").gain(0.63)

// drums · congas
const congas = s("conga:13").struct("<~@80 [~@8 x ~@2 x ~@2 x ~]!25 ~@2>").gain(0.77)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@83 [~@14 x!2] x ~@22>").gain(1.62)

// drums · shaker
const shaker = s("sh").struct("<~@28 [~@3 x ~@4]!52 [x!8]!24 [x ~ x ~ x ~ x ~ x ~ x!6] x ~>").gain(0.32)

// drums · claves
const claves = s("clave:2").struct("<~@30 A@3 B@8 A@4 ~@12 A@6 ~@2 A@3 B@8 A@4 B@25 ~@2>".pickRestart({
  A: "~@3 x ~@2 x ~@4 x ~@4", B: "~@11 x ~@4",
})).gain(1.18)

// drums · triangle
const triangle = s("triangles:35").struct("<~@90 x ~@16>").gain(4.18)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@27 A ~@16 A ~@17 A ~@16 A ~@4 A ~@22>".pickRestart({
  A: "~@7 x",
})).gain(2.86)

// drums · rim
const rim = s("rim").struct("<~@28 [~@3 x]!77 ~@2>").gain(0.56)

stack(
  bass, acoustic_guitar_nylon, string_ensemble_2, string_ensemble_1, taiko_drum, acoustic_guitar_steel, banjo,
  banjo_soft, synth_strings_1, string_ensemble_1_2, tambourine, bongos, bongos_2, congas, cabasa, shaker, claves,
  triangle, bell_tree, rim
)

More by Andrea Bocelli