Strudelify

Una storia importante

Ramazzotti

KeyB♭ minorTempo128 bpm
0:00/0:00
// Una storia importante — Ramazzotti
// 128 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 128 bars on a 16-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 30.
setcpm(128/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(`<
  ~@24 A B C@2 A B D@2 E@2 F@2 E@2 ~@3 G H I J K L M N@2 H I J K L M O P Q L R S Q L R T U@2 V W X Y Z I J AA V W AB
  AC@2 AD H I J K L M N@2 H I J K L M O P Q L R@2 H I J K L M N@2 H I J K L M N@2 H I J K L M N@2 H I
>`.pickRestart({
  A: "bb2", B: "gb2", C: "[ab2@21 ~ c3@4 ab2@2 eb2@4]/2", D: "ab2/2", E: "eb2/2", F: "[bb1@3 f1]/2", G: "~@5 bb2 ab2@2",
  H: "db2@4 ~@2 db2 ~ db2@6 ~@2", I: "c2@5 ~ c2 ~ c2@7 ~", J: "bb1@5 ~ bb1 ~ bb1@7 ~", K: "ab1@5 ~ ab1 ~ ab1@6 ~@2",
  L: "gb1@4 ~@2 gb1 ~ gb1@7 ~", M: "f1@5 ~ f1 ~ f1@6 ~@2", N: "[bb1@5 ~ bb1 ~ bb1@5 ~ c2@7 ~ c2 ~ c2@2 bb1@2 ab1@4]/2",
  O: "bb1@5 ~ bb1 ~ bb1@8", P: "a1@5 ~ a1 ~ a1@8", Q: "bb1@5 ~ bb1 ~ bb1@5 ~ f1 ~", R: "ab1@4 ~@2 ab1 ~ ab1@7 ~",
  S: "ab1@4 ~@2 c3@4 ab2@2 eb2@3 ~", T: "ab1@8 ab2@7 ~", U: "bb1/2", V: "eb2@5 ~ eb2 ~ eb2@8",
  W: "db2@5 ~ db2 ~ db2@7 ~", X: "ab1@5 ~ ab1 ~ ab1@8", Y: "gb1@5 ~ gb1 ~ gb1@7 ~", Z: "db2@5 ~ db2 ~ db2@8",
  AA: "ab1@4 ~@2 ab1@2 ab1@7 ~", AB: "ab1@5 ~ ab1 ~ ab1@6 ab2 ~", AC: "f1@5 ~ f1 ~ f1@7 ~",
  AD: "~@2 f1 ~@3 f2 ~ f1@2 f2 ~ f2@2 f1 ~",
})).s("gm_fretless_bass").gain(0.39)

// chords · epiano2
const epiano2 = note("<A B C@2 A B C@2 D@4 E@4 ~@6 F@2 ~@14 G@4 ~@86>".pickRestart({
  A: "[bb3,db4,f4]@7 ~", B: "[ab3,db4,f4]@7 ~", C: "[[bb3,c4,eb4]@29 ~@3]/2",
  D: "[~ [ab2,bb3,c4,eb4], [bb2,bb3,db4,f4] ~, ~ ab3@3]/4", // Ab Bbm
  E: "[[bb3,db4] [bb3,db4] [ab2,bb3,c4,eb4]@2, [bb2,f4] ~, ~ ab3@3]/4", // Bbm Ab Bb5
  F: "[[bb2,f3,bb3]@3 [ab2,eb3,ab3]@3 [gb2,f3,bb3]@10]/2", // Bb5 Ab5 Gbmaj7
  G: "[[bb2,f3,bb3]@3 [ab2,eb3,ab3]@3 [f3,bb3]@16 ~@10, ~@3 gb2@12 ~]/4", // Bb5 Ab5 Bb5
})).s("gm_epiano2").gain(0.26)

// chords · epiano2 · soft notes
const epiano2_soft = note("<~@18 A@2 ~@108>".pickRestart({
  A: "[[f3,db4,f4]@29 ~@3, bb2]/2", // Db
})).s("gm_epiano2").gain(0.13)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~@60 A@2 B ~@10 C ~@2 D@2 E F@2 G ~@18 H@2 ~@26>".pickRestart({
  A: "[~@2 bb3@4 ab3@2 c4@4 ab3 ~ db4@4 ab3 ~ eb4@8 ~@2 db4 c4]/2", B: "db4@7 ~@9", C: "~ eb4 db4 f4 db4 f4 c4 f3",
  D: "[~@6 gb4@15 ~@11, ~@2 bb3@19 ~@11, ~@4 db4@17 ~@11]/2", E: "~@6 gb4@9 ~, ~@2 bb3@13 ~, ~@4 db4@11 ~",
  F: "[~@6 f4@13 ~@13, ~ c4@9 ~@6, ~@4 a3@15 ~@13]/2",
  G: "~@2 a3@2 ~@2 a3@2 ~@2 a3@2 f4@2 a3 ~, a2@6 ~@2 c4@7 ~, ~@2 f4@3 ~@3",
  H: "[~@2 bb3@4 ab3@2 c4@4 ab3 ~ db4@4 ab3 ~ c4@8 ~@4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.26)

// other · pad new age
const pad_new_age = note("<~@19 A@2 ~@11 B ~@2 A@2 ~@2 C D ~@87>".pickRestart({
  A: "[~@12 bb4 ~@3, ~ f5@2 f5@2 f5@2 f5@2 eb5@2 eb5@2 eb5@2 eb5@2 db5@2 db5@2 db5@2 db5@2 ~@7, ~ bb5 db6 f6 eb6 c6 ab5 eb6 db6 bb5 gb5 bb5 ~@4]/2",
  B: "eb5@13 ~@3", C: "~@12 gb4 ~ db5 ~", D: "bb4@2 db5 ~ gb4 ~ c5@2 ~@4 db5@2 ~@2",
})).s("gm_pad_new_age").gain(0.06).pan(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@2 B@2 A@2 C@2 ~@11 D E@2 ~@3 F G@2 ~ F H@2 I@2 ~@2 J@2 K@4 L@2 M N O P Q@2 R@2 S@2 O P T U V@2 W@2 ~@9 X Y@2 ~@6 Z@2
  L@2 T N O P Q@2 R@2 S@2 O P T U V@2 W@2 AA@2 S@2 O P Q@2 AB@2 S@2 O P Q@2 AA@2 S@2 O P Q@2 AC@2
>`.pickRestart({
  A: "[bb3,db4,f4]/2", B: "[[c4,eb4]@29 ~@3, ab3@31 ~]/2", C: "[[c4,eb4]@29 ~@3, ab3]/2",
  D: "~ [ab2,c4,eb4], bb2, [db4,f4]@13 ~@3", E: "[[eb2,db5]@8 [eb2,bb4]@23 ~, [f4,gb4]@31 ~]/2", F: "gb2",
  G: "[[c4,ab4], eb4@25 ~@7, ab2@21 ~@11]/2", H: "[[ab2,c4,ab4], eb4 ~]/2", I: "[gb3,bb3,db4]/2", J: "[bb3,db4,eb6]/2",
  K: "[[db4,f4]@6 [c4,eb4]@6 db4@15 ~@11 ab5@21 ~@5, bb4@29 bb4@31 ~@4, ~@3 f4@12 ~, ~ db5, ~@35 eb5@29]/4", // Db Cm
  L: "[ab4, f4@17 ~@15]/2", M: "bb4, f4 ~@15", N: "ab4", O: "[gb4,bb4]", P: "[f4,c5]", Q: "[[f4,bb4]@7 [ab4,c5]@9]/2",
  R: "[[f4,ab4]@5 ~@3]/2", S: "[bb4 ab4, f4]/2", T: "[f4,bb4]", U: "[gb4,db5]", V: "[db4, f4@17 ~@15]/2",
  W: "[~ ab2, [c4,eb4]]/2", X: "[c4,eb4], ab3 ~@7", Y: "[f3,ab3,eb4]/2", Z: "f2/2", AA: "[f4,ab4]/2",
  AB: "[ab4, f4@9 ~@23]/2", AC: "[[f4,ab4]@31 [f4,bb4]]/2",
})).s("gm_synth_strings_1").gain(0.11)

// chords · synth strings 1 · soft notes
const synth_strings_1_soft = note(`<
  A@8 ~@16 B@2 ~@2 B@2 ~@2 C@2 D@2 E@2 ~@2 F@2 ~@24 G@2 H@2 I ~@3 J@2 K@2 I L@3 ~@46
>`.pickRestart({
  A: "[bb2@16 gb2@16 ab2@31 ~ bb2@16 gb2@16 ab2@32, bb4@127 ~]/8", B: "[[db4,f4,bb4], bb2 ~]/2", C: "[eb6,gb6]/2",
  D: "[[ab3,db4,f4,eb6,f6]@3 [c4,eb4,c6,eb6]]/2", E: "gb6/2", F: "[~@6 ab6@9 ~]/2", G: "[bb2,f3,ab3,db4]/2",
  H: "[gb3,bb3,db4]/2", I: "[gb3,bb3,db4]", J: "[[bb2,f3,ab3], db4@3 ~@29]/2", K: "[[bb3,db4]@21 ~@11, gb3]/2",
  L: "[[f3,eb4], c4@5 ~@7, a3 ~@23]/3", // F7
})).s("gm_synth_strings_1").gain(0.07)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A B C@2 A B C@2 ~@7 D@2 ~@9 E@2 ~@3 D@2 ~@95>".pickRestart({
  A: "f4@2 bb3 db4@2 f4@3", B: "~@2 bb3 db4@2 f4@3, f4@5 ~@3", C: "[eb4@29 ~@3]/2", D: "[~@10 db4 ~ c4@2 bb3@12 ~@6]/2",
  E: "[~@2 bb3@5 ~ c4@6 db4@6 eb4@10 ~@2]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.26).pan(0.6)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@41 A B C D E F G H@2 I C D E F G J K ~@24 I C D E F G H@2 I C D E F G J K ~@4 I C D E L G M@2 I C D E L G H@2 I C D
  E L G H@2 I N
>`.pickRestart({
  A: "~@10 ab2@2 [ab3,db4,ab4]@2 [bb3,b3,c4,f4,gb4,g4] [g3,ab3,a3]", B: "[b2,f3,gb3] ~@15, [db3,ab3]", C: "[c3,ab3]",
  D: "[f3,bb3]", E: "[db3,ab3]", F: "gb3, bb3 ~@7", G: "[a3,c4]",
  H: "[[bb3,db4]@14 c3@12 bb2@2 ab2@3 ~, ~@7 [ab3,c4]@9]/2", I: "[db3,ab3], b2 ~@15", J: "bb3, db4@3 ~", K: "[a3,db4]",
  L: "[gb3,bb3]", M: "[bb3@14 c3@12 bb2@2 ab2@3 ~, db4@5 ~@2 [ab3,c4]@9]/2", N: "[c3,ab3]@15 [f3,bb3]",
})).s("gm_overdriven_guitar").gain(0.07).pan(0.8)

// other · acoustic guitar steel
const acoustic_guitar_steel_2 = note("<~@24 [bb4!16]!2 [ab4!16]!2 [bb4!16]!2 [ab4!16]!2 ~@96>")
  .s("gm_acoustic_guitar_steel").gain(0.13)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@56 A@2 B@2 C@2 B@2 C@2 ~@30 A@2 B@2 C@2 ~@26>".pickRestart({
  A: "[~@6 eb5@4 f5@4 f5@17 ~]/2", B: "f5@2 bb4 db5@2 eb5@3", C: "[eb5@15 ~]/2",
})).s("gm_overdriven_guitar").gain(0.21).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@24 A ~@16 B C@6 D E C@15 F C@15 G C@6 D E C@7 H C@2 D G C@6 D E C@6 D E C@6 D E C@2
>`.pickRestart({
  A: "x", B: "~@5 x ~@2", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~@2 x", E: "~@3 x!2 ~@2 x", F: "x ~@2 x ~@4",
  G: "x ~@2 x ~@3 x", H: "x ~@4 x ~@2",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@41 A B@7 C B@15 D A@15 E B@7 C B@11 F B@7 C B@7 C B@7 C B@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~ x ~@2 x ~ x ~", E: "~ x ~@2 x!3 ~", F: "~@2 x ~ x!3 ~",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@97 [~@3 x ~@4] ~@30>").gain(0.48)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@42 A B@6 C A B@5 D E A F@6 G ~@16 A B@6 C A B@5 D H A F@3 A B@6 C A B@6 C A B@6 C A B
>`.pickRestart({
  A: "~@2 x!6", B: "x ~ x ~ x ~ x!2", C: "~ x!2 ~ x ~ x!2", D: "x!8", E: "~ x!2 ~ x ~@3", F: "x ~ x!6",
  G: "x ~ x ~ x!4", H: "~ x!2 ~@5",
})).gain(0.24)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct(`<
  ~@42 A B@6 C A B@5 ~ C A@7 ~@17 A B@6 C A B@5 ~ C A@5 B@6 C A B@6 C A B@6 C A B
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~ x ~ x ~@2", C: "x ~@2 x ~ x ~@2",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@57 A ~@7 B ~@15 C ~@15 D ~@3 E ~@26>".pickRestart({
  A: "~@3 x", B: "~@5 x ~ x", C: "~ x ~@2 x!3 ~", D: "~@3 x ~@2 x ~", E: "~ x ~@6",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@65 [~ x ~@6] ~@31 [~@3 x] ~@30>").gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@65 [~@3 x ~@4] ~@62>").gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@23 A B ~@17 B ~@5 C ~ B ~@7 B ~@7 B ~@15 B ~@5 C ~ B ~@7 B ~@3 B ~@5 C ~ B ~@5 C ~ B ~@5 C ~ B ~
>`.pickRestart({
  A: "~@7 x ~@8", B: "x", C: "~@7 x",
})).gain(0.32)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@24 [x!8]!14 x ~@27 [~ x!15] [x!16]!14 [x!2 ~ x!13] ~@46>").gain(0.41)

stack(
  bass, epiano2, epiano2_soft, acoustic_guitar_steel, pad_new_age, synth_strings_1, synth_strings_1_soft,
  acoustic_guitar_nylon, overdriven_guitar, acoustic_guitar_steel_2, overdriven_guitar_2, kick, snare, low_tom,
  pedal_hat, pedal_hat_soft, mid_tom, open_hat, high_tom, crash, cabasa
)

More by Ramazzotti