Strudelify

Occhi di speranza

Ramazzotti

KeyB♭ majorTempo63 bpm
0:00/0:00
// Occhi di speranza — Ramazzotti
// 63 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 35, 4/4 at bar 35) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 13 piano (copy of ch 11 piano)
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(63/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 · electric bass finger
const bass = note("<~@22 A B C D A B C B E F G@2 H I J K L M@2 N O N O N O N P@4>".pickRestart({
  A: "bb1 d2", B: "c2 f1", C: "bb1@3 bb1 d2@4", D: "c2@4 f1@3 f1", E: "gb1@3 gb1 gb1@4", F: "g1@3 g1 ab1@4",
  G: "[a1@2 bb1@10 f1@3 f1]/2", H: "a1@3 a1 d2@3 d2", I: "c2@4 bb1@3 bb1", J: "bb1@4 f1@3 f1", K: "f1@2 a1 c2 g1@3 g1",
  L: "g1@4 g1@3 g1", M: "[c2@4 c2@2 [bb1,b1] [g1,ab1,a1] f1@16 bb1@8, ~@8 g1 ~@23]/2", N: "d2 c2", O: "f1 bb1",
  P: "[f1 f1@2 bb1@4 ~]/4",
})).s("gm_electric_bass_finger").gain(0.44)

// other · electric guitar muted
const electric_guitar_muted = note("<~@22 A B A C A D A E ~@22>".pickRestart({
  A: "~@2 d4!2 ~ d4!2 ~@3 c4!2 ~ c4!2 ~", B: "~@2 eb4!2 ~ eb4!2 ~@3 d4!2 ~ c4!2 ~",
  C: "~@2 eb4!2 ~ f3 g3 bb3 [c4,f4]@4 [f3,bb3]@4", D: "~@3 [c4,f4]@4 ~ d4@4 c4@3 ~, ~@8 a3@7 ~",
  E: "~@2 eb4!2 ~ eb4!2 ~@3 c4!2 ~ c4!2 ~",
})).s("gm_electric_guitar_muted").gain(0.18).pan(0.8)

// other · pad new age · Ebmaj7 Ebsus2
const pad_new_age = note("<~@21 [~@8 eb4 ~@2 f4 [d4,eb4] ~ c4 ~] ~@18 [eb4 ~@2 [eb4,f4] d4 ~ c4 ~@9] ~@11>")
  .s("gm_pad_new_age").gain(0.39)

// other · string ensemble 2
const string_ensemble_2 = note("<A@4 ~@11 B@2 C D E C F ~@8 F G H@2 I@2 J@5 ~@3 K L M N@5>".pickRestart({
  A: "f7/4", B: "[~ a6@3]/2", C: "bb6", D: "a6 c7", E: "b6", F: "a6", G: "bb6 b6", H: "[c7@4 d7@19 ~ f6@8]/2",
  I: "[e6@3 f6@3 bb6@2]/2", J: "[c7 bb6 c7@4 b6@4 bb6@4 a6@4 ~@2]/5", K: "~ bb6", L: "a6@2 bb6 a6@2 f6@2 g6@7 bb6@2",
  M: "a6@2 g6@3 f6@9 bb6@2", N: "[a6@2 bb6 a6@2 f6@2 g6@33 bb6@32 ~@8]/5",
})).s("gm_string_ensemble_2").gain(0.11).pan(0.3)

// chords · string ensemble 2
const string_ensemble_2_2 = note("<A B@3 ~@8 C@4 D@2 E@4 F G F H F G F I J@2 K@2 L@5 M@2 ~@4 N O P@5>".pickRestart({
  A: "[bb3,d4] [a3,c4], f4", B: "[[bb3,eb4]@2 d4 c4 [bb3,d4]@2 [a3,c4]@2 [bb3,eb4]@4, ~ f4@5, ~ a3 ~@4]/3",
  C: "[gb3@2 g3 ab3 a3 d4 c4 [e3,db4], d4@3 e4@2 f3@2 ~]/4", D: "[d4 c4 d4@2, f3]/2",
  E: "[c4@2 d4@3 e3 f3@2, f3@5 c4@3]/4", F: "[bb3,d4] [a3,c4]", G: "[bb3,eb4]@2 d4 c4, ~ a3", H: "[g3,eb4]",
  I: "[g3,eb4] [a3,c4]", J: "[[gb3,a3]@2 [g3,bb3] [ab3,b3,e4], d4@3 ~]/2", K: "[[a3,c4] [bb3,d4]@5 [f1,f3,a3,c4]@2]/2",
  L: "[[g3,db4]@4 [g3,c4]@2 d4@2 c4@4 d4@4 ~@10 a1 c2 b3@8 bb3@4, e3@3 f3@11 [g1,f3,d4]@6, ~@3 a3@3 bb3@4 a3@4 ~@6, ~@4 c4@3 ~@3]/5", // Gdim C5 G7
  M: "[[c2,g3,e4] [f1,a3,f4]@2 ~, c4@3 ~]/2", N: "[a3,c4] [bb3,eb4]", O: "d4 c4 [bb3,d4]@2, a3 ~",
  P: "[[a3,c4] [g3,eb4]@4 [f3,d4]@4 ~]/5", // Am Cm Dm
})).s("gm_string_ensemble_2").gain(0.48).pan(0.4)

// other · electric guitar muted
const electric_guitar_muted_2 = note("<~@22 A B C D C B C E ~@22>".pickRestart({
  A: "d4 ~ d4 ~ d4 ~ d4 ~ c4 ~ c4 ~ f4 ~ c4 ~", B: "eb4 ~ eb4 ~ eb4 ~ eb4 ~ d4 ~ d4 ~ c4 ~ c4 ~",
  C: "d4 ~ d4 ~ d4 ~ d4 ~ c4 ~ c4 ~ c4 ~ c4 ~", D: "eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~",
  E: "eb4 ~ eb4 ~ eb4 ~ eb4 ~ c4 ~ c4 ~ c4 ~ c4 ~",
})).s("gm_electric_guitar_muted").gain(0.29).pan(0.3)

// chords · piano
const piano = note(`<
  A B A C A B A C A B A D E F G H I J K@3 L A B A C A B A D E F M@2 N O@4 P@2 Q R S T Q R U@5
>`.pickRestart({
  A: "~@3 f3 ~@2 f4 f3, [bb2,bb3]@4 ~ f3@2 ~, d4 f4 c4 ~, ~ f3@2 ~ [d3,a3]@4", // Bb D5
  B: "~@3 f3 ~@3 f3, [c3,bb3] [f2,a3], eb4 f4 d4 c4, ~ f3@2 ~@2 f3@2 ~", // C7 F
  C: "~@3 g3 ~@3 g3, [c3,bb3] [f2,bb3], eb4 f4 eb4 f4, ~ g3@2 ~@2 g3@2 ~", // C7 Bb5
  D: "~@3 g3 ~@3 f3, [c3,bb3] [f2,a3], eb4 f4 c4 f4, ~ g3@2 ~@2 f3@2 ~", E: "~ a4@3, [gb2,d4], ~ a3@7",
  F: "~ bb4 ~ b4, [g2,d4] [ab2,e4], ~ bb3@3 ~ b3@3", G: "~@2 c5@2 d4 ~ f4@2, [a2,e4] [bb2,bb3], ~ c4@3 ~ f3@3",
  H: "c4 ~ f4@2 e4 ~ g4@2, [f2,a3] [a2,db4], ~ f3@3 ~ g3@3", // F A
  I: "~@3 a3 ~@3 a3, [d3,d4] c3, f4 a4 ~ a4, ~ a3@2 ~@2 a3@2 ~", // D
  J: "~@7 f3, [bb2,bb3], d4 f4 d4 f4, ~ f3@2 f3@2 f3@2 ~", // Bb
  K: "[~@19 f3 ~@3 g3, f2@2 g2@2 [g2,bb3] [c3,c4], a3@2 a3@2 b3@2 b3@2 d4 ~@3, c4 f4 c4 f4 d4 f4 d4 f4 ~ f4 e4 g4, ~ f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 ~@2 g3@2 ~]/3", // Gm C
  L: "[f2,a3,c4,f4]", M: "[~ c4 [bb0,bb1,f3,bb3,d4]@10 c4 ~ f4@2, [a2,e4] ~@5 [f1,f2,a3]@2, ~@13 f3@3]/2",
  N: "e4 ~ g4@2 ~@3 a3, [a1,a2,db4] [d2,d3,c4], ~ g3@3 e4@2 f4@2, ~@5 g3@2 ~", // A D7
  O: "[~@3 a3 ~@7 f3 ~@19 f3, [c2,c3] [bb1,bb2,bb3]@2 [f1,f2]@2 g2@2 [g2,bb3], ~ a3@2 ~ d4@2 f4@2 d4@2 f4@2 c4@2 f4@2 c4@2 f4@2 d4@2 f4@2 d4@2 f4@2 d4@2 f4@2, ~@2 a4@2 ~ f3@2 f3@2 f3@2 ~ a3@4 a3@4 b3@4 b3@4 ~@4, ~@13 f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 f3@2 ~]/4", // C Bb F Gm
  P: "[~@3 g3 [f2,a3,c4,f4]@8 ~@3 f3, [c3,c4] ~@2 [bb2,bb3], e4 g4 ~@4 d4 f4, ~ g3@2 ~@10 f3@2 ~]/2", // F C Bb
  Q: "~@2 f4 f3 ~@3 f3, [d3,a3] [c3,bb3], c4 ~ eb4 f4, ~ f3@2 ~@2 f3@2 ~", // D5 C7
  R: "~@3 f3 ~@3 f3, [f2,a3] [bb2,bb3], d4 c4 d4 f4, ~ f3@2 ~@2 f3@2 ~", // F Bb
  S: "~@2 f4 f3 ~@3 g3, [d3,a3] [c3,bb3], c4 ~ eb4 f4, ~ f3@2 ~@2 g3@2 ~", // D5 C7
  T: "~@3 g3 ~@3 f3, [f2,bb3] [bb2,bb3], eb4 f4 d4 f4, ~ g3@2 ~@2 f3@2 ~", // Bb5 Bb
  U: "[~@2 f4 f3 ~@7 g3 ~@7 g3 [bb2,f3,bb3,d4]@16 ~@4, [d3,a3] [c3,bb3]@2 [c3,bb3]@2 ~@5, c4 ~ eb4 f4 eb4 f4 eb4 f4 eb4 f4 ~@10, ~ f3@2 ~@2 g3@2 g3@2 g3@2 ~@2 g3@2 g3@2 g3@2 ~@21]/5", // Bb D5 C7
})).s("gm_piano").gain(0.4).pan(0.3)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B A C A B A C A B A D E F G H I J K J L M A B A C A B A D E F N@2 O P Q R J S@2 T U T V T U T C W@3
>`.pickRestart({
  A: "d4 f4 c4 f4", B: "eb4 f4 d4 c4", C: "eb4 f4 eb4 f4", D: "eb4 f4 c4 f4", E: "d4 a3 a4@6",
  F: "d4 bb3 bb4@2 e4 b3 b4@2", G: "e4 c4 c5@2 d4 f3 f4@2", H: "c4 f3 f4@2 e4 g3 g4@2", I: "f4 a3 a4 a3 c3 a3 a4 a3",
  J: "d4 f3 f4 f3 d4 f3 f4 f3", K: "c4 f3 f4 f3 c4 f3 f4 f3", L: "d4 f3 f4 f3 e4 g3 g4 g3", M: "f4",
  N: "[e4 c4 d4@10 c4 f3 f4@2]/2", O: "e4 g3 g4@2 e4 g3 f4 a3", P: "c3 a3 a4 a3 d4 f3 f4 f3",
  Q: "d4 f3 f4 f3 c4 f3 f4 f3", R: "c4 f3 f4 f3 d4 f3 f4 f3", S: "[e4 g3 g4 g3 f4@8 d4@2 f4@2]/2", T: "c4 f4 eb4 f4",
  U: "d4 c4 d4 f4", V: "eb4 f4 d4 f4", W: "[eb4 f4 d4@8 ~@2]/3",
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.8)

// chords · church organ · F
const church_organ = note("<~@17 [f5@3 g5, d5] [[c5,a5]] ~@33>").s("gm_church_organ").gain(0.19)

// other · orchestral harp
const orchestral_harp = note("<~@43 A B C ~@3 D@2 ~>".pickRestart({
  A: "~@14 eb5 g4", B: "g5 bb4 bb5 eb5 eb6 ~@9 d5!2", C: "c5 ~ d5 c5 ~ a4 ~ bb4 ~@8", D: "[~@2 bb6@5 ~]/2",
})).s("gm_orchestral_harp").gain(0.19)

// chords · pizzicato strings
const pizzicato_strings = note("<~@40 A B C D A E F G ~ H@3>".pickRestart({
  A: "~@8 [bb4,bb6] ~ [bb4,bb6] ~ [bb4,bb6] ~ [bb4,bb6]!2", // Bb
  B: "[a4,bb4,a6,bb6] [bb4,bb6] [a4,bb4,a6,bb6]!2 [bb4,bb6] [f4,a4,f6,a6] [bb4,bb6] [f4,g4,f6,g6] ~ [f4,g4,f6,g6] ~ [g4,g6] ~@2 [bb4,bb6]!2", // Bbmaj7 Bb Bbmaj7 Bb F Bb Fsus2 G …
  C: "[a4,bb4,a6,bb6] [bb4,bb6] [g4,a4,bb4,g6,a6] [g4,bb4,g6] [g4,a4,g6] [f4,g4,f6,g6] g4 [f4,g4,f6] ~ [f4,f6] ~ [f4,f6] ~@2 [bb4,bb6]!2", // Bbmaj7 Bb Gm Gsus2 Fsus2 F Bb
  D: "[a4,bb4,a6,bb6] [bb4,bb6] [a4,bb4,a6,bb6] [a4,bb4,a6] [a4,bb4,bb6] [f4,a4,f6,a6] bb4 [f4,g4,f6,g6] ~ [f4,g4,g6] ~ [g4,g6] ~@4", // Bbmaj7 Bb Bbmaj7 F Fsus2 G
  E: "[a4,bb4,a6,bb6] [bb4,bb6] [a4,bb4,a6,bb6] [a4,bb4,a6] [bb4,bb6] [f4,a4,f6,a6] [bb4,bb6] [f4,g4,a4,f6,g6] ~ [f4,g4,f6,g6] ~ [g4,g6] ~@2 [bb4,bb6]!2", // Bbmaj7 Bb Bbmaj7 Bb F Bb F Fsus2 …
  F: "[a4,bb4,a6,bb6] [bb4,bb6] [g4,a4,bb4,g6,a6] [g4,bb4,g6,bb6] [g4,a4,g6] [f4,g4,f6,g6] ~ [f4,g4,f6] ~ [f4,f6] ~ [f4,f6] ~@2 [bb4,bb6]!2", // Bbmaj7 Bb Gm Gsus2 Fsus2 F Bb
  G: "[a4,bb4,a6,bb6] [bb4,bb6] [a4,bb4,a6,bb6] [a4,bb4,a6] [a4,bb4,bb6] [f4,a4,f6,a6] bb4 [f4,g4,f6,g6] ~ [f4,g4,f6,g6] ~ [g4,g6] ~@4", // Bbmaj7 Bb Bbmaj7 F Fsus2 G
  H: "[~@8 [bb4,d5,f5,bb5]@33 ~@7]/3", // Bb
})).s("gm_pizzicato_strings").gain(0.19)

// chords · pizzicato strings · soft notes
const pizzicato_strings_soft = note("<~@41 A B C ~ D E F ~@4>".pickRestart({
  A: "~@4 [a4,a6] ~@2 a4 ~@8", B: "~@3 bb6 a6 ~ g6!2 ~@8", C: "~@3 bb6 a6 ~ bb6 a4 ~ f6 ~@6", D: "~@3 bb6 [a4,a6] ~@11",
  E: "~@4 a6 ~ [g4,g6] g6 ~@8", F: "~@3 bb6 a6 ~ bb6 a4 ~@8",
})).s("gm_pizzicato_strings").gain(0.11)

// drums · kick
const kick = s("bd").struct("<~@22 A B A B A B A@4 C D E@5 B ~@12>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!2", C: "x ~@2 x ~@12", D: "~@4 x ~@2 x", E: "x ~@3 x ~@2 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@22 [~ x ~ x]!10 [~ x ~@2] [x!8 ~@4 x ~@3] [~ x ~ x]!5 ~@13>").gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@29 [~@7 x] ~@9 [~ x ~@3 x!2 ~@9] ~@12>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<A@2 B@2 A@7 C A@9 D A@3 E A@3 F A@2 G H I@2 J K I L M N@7 O P ~@2>".pickRestart({
  A: "x ~ x!7 ~ x ~ x ~ x!2", B: "x ~ x!7 ~ x!6", C: "x ~ x!7 ~ x ~ x ~ x ~", D: "x", E: "x ~ x!7 ~ x ~ x ~@3",
  F: "x ~ x!4 ~@2 x ~ x ~ x ~ x!2", G: "x ~ x!2 ~@12", H: "~@10 x!6", I: "x ~ x ~ x ~ x!3 ~ x!6",
  J: "x ~ x ~@3 x!3 ~ x!6", K: "x ~ x ~ x ~@3 x ~ x!6", L: "x!2 ~@2", M: "~@8 x!8", N: "x!5 ~ x!10", O: "x!16",
  P: "x!8 ~@8",
})).gain(0.16)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A@2 B@2 A@7 C A@9 ~ A@10 D E F@5 ~@2 G@7 ~@4>".pickRestart({
  A: "~ x ~@7 x ~ x ~ x ~@2", B: "~ x ~@7 x ~@6", C: "~ x ~@7 x ~ x ~ x ~ x", D: "~ x ~@14", E: "~@9 x ~@6",
  F: "~ x ~ x ~ x ~@3 x ~@6", G: "~@5 x ~@10",
})).gain(0.08)

// drums · open hat
const open_hat = s("oh").struct("<~@25 [~@7 x] ~@3 [~@3 x ~@4] ~@7 [~@3 x ~@4] ~@14>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@29 [~@13 x ~@2] ~@22>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@32 [~@4 x ~@8 x!3] [x!9 ~@7] ~@2 [~ x ~@2] ~@2 [~ x] ~@12>").gain(0.32)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@32 [~@8 x!5 ~@3] ~@19>").gain(0.16)

stack(
  bass, electric_guitar_muted, pad_new_age, string_ensemble_2, string_ensemble_2_2, electric_guitar_muted_2, piano,
  acoustic_guitar_steel, church_organ, orchestral_harp, pizzicato_strings, pizzicato_strings_soft, kick, snare, low_tom,
  hihat, hihat_soft, open_hat, mid_tom, crash, crash_soft
)

More by Ramazzotti