Strudelify

E c'e ancora mare

Giorgia

KeyF majorTempo90 bpm
0:00/0:00
// E c'e ancora mare — Giorgia
// 90 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "P.GUITAR" named as a guitar, played on electric guitar clean (its breath noise patch is not one)
// 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(90/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 · "E CE ANCORA"
const bass = note(`<
  ~ A B C D E F C G H I J K L M B G N O P Q R F J D S T J D U M C D L V W X Y F Z AA AB AC AD AE AF AG AH AI AF AJ V ~
  AK AL M AM AN AO B AP Q AQ AR AS AK AT Q D AU AK AV Q D AU AW ~@6 AX D I AY AZ AG F BA BB D BC BD BE AG BF BA BG D M
  AY AZ D BH Q@2
>`.pickRestart({
  A: "~@8 c2@2 bb1 g1 c2@3 ~", B: "c2!3 ~ c2 ~ c2!2 ~@6 c2 ~", C: "c2!3 ~@3 c2!2 ~@6 c2@2", D: "bb1!3 ~@3 bb1!2 ~@8",
  E: "bb1!3 ~@3 bb1!2 ~@3 bb1 g1 f1 g1 bb1", F: "c2!3 ~@3 c2!2 ~@6 c2 ~", G: "bb1!3 ~ bb1 ~ bb1!2 ~@8",
  H: "bb1!2 g1@2 ~@2 f1 bb1 ~@3 bb1 g1 f1 g1 bb1", I: "c2!3 ~@3 c2!2 ~@8", J: "c2!3 ~ c2 ~ c2!2 ~@6 c2@2",
  K: "bb1!3 ~ bb1 ~ bb1!2 ~@6 bb1 ~", L: "bb1!3 ~@3 bb1!2 ~@3 bb1 bb1@3 ~", M: "c2!3 ~ c2 ~ c2!2 ~@8",
  N: "bb1!3 ~@3 bb1!2 ~@2 bb1!2 bb1@3 ~", O: "eb2!3 ~@3 eb2!2 ~@6 eb2 ~", P: "eb2!3 ~@3 eb2!2 ~@6 eb2@2",
  Q: "f2!3 ~@3 f2!2 ~@8", R: "f2!3 ~@3 f2!2 ~@5 f1 g1 bb1", S: "bb1!3 ~@3 bb1 ab1@4 ~ bb1@4",
  T: "[c2,c3]@2 [g1,g2] [gb1,gb2] [f1,f2] [c1,c2] [c2,c3] [b1,b2] [bb1,bb2] [g1,g2]@2 ~@5", // C G Gb F C B Bb G
  U: "bb1!3 ~@3 bb1!2 ~@3 bb1 g1@3 ~", V: "eb2!3 ~@3 eb2!2 ~@8", W: "eb2!3 ~@3 eb2!2 ~@3 eb2 eb2@3 ~",
  X: "f2!3 ~ f2 ~ f2!2 ~@8", Y: "f2!3 ~@3 f2!2 ~@3 c2 f2@3 ~", Z: "c2!3 ~ c2 ~ c2!2 ~@3 bb1 bb1@3 ~",
  AA: "eb2!3 ~@3 eb2!2 ~@5 eb1 bb1@2", AB: "ab1!3 ~@3 ab1!2 ~@6 g1@2", AC: "f1!3 ~@3 f1!2 ~@6 f1@2",
  AD: "[c2,c3]@2 [bb1,bb2] [g1,g2] [bb1,bb2]@2 [c2,c3] [b1,b2] [bb1,bb2] [g1,g2]@2 ~@5", AE: "c2!3 ~@3 c2!2 ~@4 g1@4",
  AF: "ab1!3 ~@3 ab1!2 ~@8", AG: "bb1!3 ~@3 bb1!2 ~@6 bb1@2", AH: "eb2!3 ~@3 eb2!2 ~@5 eb2 eb2@2",
  AI: "c2!3 ~ c2 ~ c2!2 ~@4 c2@3 ~", AJ: "bb1!3 ~@3 bb1!2 ~@6 bb1 ~", AK: "d2!3 ~ d2 ~ d2!2 ~@8",
  AL: "d2!3 ~ d2 ~ d2 d2@4 c2 a1@3 ~", AM: "c2!3 ~@3 c2!2 ~@3 c2 ~@4",
  AN: "[d2,d3]@2 [c2,c3] [a1,a2] [g1,g2] ~@2 [d2,d3] ~ [a1,a2] ~@6", AO: "d2!3 ~@5 d2@3 c2 a1@3 ~",
  AP: "c2!3 ~ c2 ~ c2!2 ~@2 c2!2 g2@3 ~", AQ: "f2!3 ~@3 f2!2 ~@3 f2 f2@3 ~", AR: "g2!3 ~ g2 ~ g2!2 ~@8",
  AS: "g2!3 ~@3 g2!2 ~@3 c2 f2@3 ~", AT: "d2!3 ~ f2 ~ d2!2 ~@3 c2 c2@3 ~", AU: "g1!3 ~@3 g1!2 ~@8",
  AV: "d2!3 ~@4 d2 e2@3 c2 g1 ~@3", AW: "d2!3 ~@3 d2!2 ~@8", AX: "d2@7 ~ c2@7 ~", AY: "f2!3 ~@3 f2!2 ~@5 f2 c2@2",
  AZ: "d2!3 ~@3 d2!2 ~@5 f1 c2@2", BA: "f2!3 ~@3 f2!2 ~@5 g1 ab1@2", BB: "a1!3 ~@3 a1!2 ~@2 a1!2 a1@3 ~",
  BC: "c2!3 ~@3 c2!2 ~@7 c2", BD: "f2!3 ~@3 f2!2 ~@5 f2 f2@2", BE: "d2!3 ~@3 d2!2 ~@5 d2 c2@2",
  BF: "c2!3 ~ c2 ~ c2!2 ~@5 c2!2 ~", BG: "a1!3 ~@3 a1!2 ~@2 e2@2 a2@3 ~", BH: "c2!3 ~@3 c2!2 ~@5 c2!2 ~",
})).s("gm_acoustic_bass").gain(0.48)

// other · electric guitar clean · "P.GUITAR"
const electric_guitar_clean = note(`<
  ~@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2 D@2 C@2 E@2 A@2 B@2 A@2 B@2 C@2 D@2 F G C H D I J H E C I H E C ~ K@2 A@2 K@2
  A@2 D@2 L@2 M N D E L O P D E L O ~@7 E Q D O E Q D O E Q D O E Q D O E Q D O E Q D ~
>`.pickRestart({
  A: "~@4 c4 d4 c4 g3 ~@2 g3 c4 d4 c4 ~@2", B: "~@4 bb3 c4 bb3 f3 ~@2 f3 bb3 c4 bb3 ~@2",
  C: "~@4 eb4 f4 eb4 bb3 ~@2 eb4 f4 eb4 bb3 ~@2", D: "~@4 f4 g4 f4 c4 ~@2 f4 g4 f4 c4 ~@2",
  E: "~@4 f4 g4 f4 bb3 ~@2 f4 g4 f4 bb3 ~@2", F: "~@4 eb4 f4 eb4 c4 ~@2 eb4 f4 eb4 c4 ~@2",
  G: "~@4 eb4 f4 eb4 c4 ~@2 eb4 f4 d4 bb3 ~@2", H: "~@4 eb4 f4 eb4 ab3 ~@2 eb4 f4 eb4 ab3 ~@2",
  I: "~@4 d4 eb4 d4 g3 ~@2 d4 eb4 d4 g3 ~@2", J: "~@4 d4 eb4 d4 g3 ~@2 d4 eb4 d4 bb3 ~@2",
  K: "~@4 d4 e4 d4 a3 ~@2 a3 d4 e4 d4 ~@2", L: "~@4 g4 a4 g4 d4 ~@2 g4 a4 g4 d4 ~@2",
  M: "~@4 f4 g4 f4 d4 ~@2 f4 g4 f4 d4 ~@2", N: "~@4 f4 g4 f4 d4 ~@2 f4 g4 e4 c4 ~@2",
  O: "~@4 e4 f4 e4 a3 ~@2 e4 f4 e4 a3 ~@2", P: "~@4 e4 f4 e4 a3 ~@2 e4 f4 e4 c4 ~@2",
  Q: "~@4 g4 a4 g4 c4 ~@2 g4 a4 g4 c4 ~@2",
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.6)

// other · overdriven guitar · "D.GUITAR"
const overdriven_guitar = note(`<
  ~@18 A@2 B@2 ~@2 C@2 ~@8 A@2 B@2 D@2 E F ~@19 G@2 H@2 I@2 J K ~ H@2 J K ~ H@2 ~@14 H@2 ~@6 H@2 ~@4 H@2
>`.pickRestart({
  A: "[[eb3,eb5]@31 ~]/2", B: "[eb3@31 ~]/2", C: "[g5@31 ~]/2", D: "[[c3,c5]@31 ~]/2", E: "ab4@3 g4@3 f4@2",
  F: "eb4@7 ~", G: "[[f3,f5]@31 ~]/2", H: "[f3@31 ~]/2", I: "[[d3,d5]@31 ~]/2", J: "bb4@3 a4@3 g4@2", K: "f4@7 ~",
})).s("gm_overdriven_guitar").gain(0.19).pan(0.4)

// chords · synth strings 1 · "STRINGS"
const synth_strings_1 = note(`<
  ~@27 A B@2 ~ A B@2 C@2 D@2 E@3 F@2 G@2 H I J@3 K@3 L@2 M@2 L@2 M@2 N@2 O@2 P@3 Q@2 R@2 S T@2 U@2 ~@5 V I W X@3 Y@3 Z W
  X@3 Y@3 Z AA@4 W AB@2
>`.pickRestart({
  A: "[bb4,eb5]", B: "[c5,f5]/2", C: "[g4,bb4,eb5]/2", D: "[ab4,c5,eb5]/2",
  E: "[[g4,c5,eb5]@14 [d5,f5]@2 [ab3,ab4,ab5]@3 [g3,g4,g5]@3 [f3,f4,f5]@2, ~@7 bb4@5, ~@2 eb5]/3", // Cm Dm Ab G F
  F: "[[eb3,eb4,eb5] [c5,f5], ab4]/2", G: "[[g4,c5,eb5]@3 [f4,bb4,d5]]/2", H: "[eb4,ab4,c5]", I: "[f4,bb4,d5]",
  J: "[bb4 ~ ab4, eb5, g4@2 ~, ~ c5@2]/3", K: "[[f4,d5]@4 [g4,eb5]@7 ~, bb4@11 ~]/3", L: "[c4,f4]/2", M: "[d4,g4]/2",
  N: "[a4,c5,f5]/2", O: "[bb4,d5,f5]/2",
  P: "[[a4,d5,f5]@14 [e5,g5]@2 [bb3,bb4,bb5]@3 [a3,a4,a5]@3 [g3,g4,g5]@2, ~@7 c5@5, ~@2 f5]/3", // Dm Em Bb A G
  Q: "[[f3,f4,f5] [d5,g5], bb4]/2", R: "[[a4,d5,f5]@3 [g4,c5,e5]]/2",
  S: "[bb3,bb4,bb5]@3 [a3,a4,a5]@3 [g3,g4,g5]@2, f5", T: "[[f3,f5] [d5,g5], bb4]/2", U: "[[a4,d5,f5]@15 ~]/2",
  V: "~ [g4,c5,e5]", W: "[g4,c5,e5]", X: "[c5 ~ bb4, f5, a4@2 ~, ~ d5@2]/3",
  Y: "[[g4,e5]@8 ~@11 e5@5, c5@2 db5, ~ a4@2, ~@8 f5@11 ~@5]/3", Z: "[bb4,d5,f5]",
  AA: "[[g4,e5] ~@2 bb4, c5 d5, ~ f5@3, ~ a4@2 ~]/4", AB: "[[a4,c5,f5]@15 ~]/2",
})).s("gm_synth_strings_1").gain(0.16)

// chords · pad new age · "PIANO PAD"
const pad_new_age = note(`<
  ~@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2 D@2 E@2 F@2 A@2 B@2 A@2 B@2 C@2 D@2 G@2 H I J K@2 L M N O L M P@4 Q@2 R@2 Q@2
  S@2 T@2 U@2 V W X Y@2 V W X Z@2 ~@5 AA M AB AC AD M AB AC AE M AB AC AD M AB AC AE M AB AC AD M AB AF@2
>`.pickRestart({
  A: "[eb3,g3,d4]/2", B: "[f3,bb3,d4]/2", C: "[g3,bb3,eb4]/2", D: "[ab3,c4,f4]/2", E: "[g3,c4,eb4]/2",
  F: "[[f3,bb3,d4]@11 [bb3,d4,f4]@5]/2", G: "[[g3,c4,eb4]@7 [f3,bb3,d4]]/2", H: "[ab3,bb3,eb4]", I: "[ab3,c4,eb4]",
  J: "[ab3,c4,f4]", K: "[[g3,c4,eb4]@3 [f3,bb3,d4]]/2", L: "[eb3,ab3,c4]", M: "[f3,bb3,d4]", N: "[g3,bb3,eb4]",
  O: "[g3,c4,eb4]", P: "[[g3,bb3,eb4]@31 ~ c4@32, ~@31 [e4,f4]@33]/4", Q: "[g3,c4,e4]/2", R: "[f3,a3,e4]/2",
  S: "[a3,c4,f4]/2", T: "[bb3,d4,g4]/2", U: "[[a3,d4,f4]@7 [g3,c4,e4]]/2", V: "[bb3,c4,f4]", W: "[bb3,d4,f4]",
  X: "[bb3,d4,g4]", Y: "[[a3,d4,f4]@3 [g3,c4,e4]]/2", Z: "[[a3,d4,f4]@31 ~]/2", AA: "~ [g3,c4,e4]", AB: "[g3,c4,e4]",
  AC: "[a3,c4,f4]", AD: "[a3,d4,f4]", AE: "[a3,db4,f4]@3 [a3,db4,e4]@5", AF: "[[a3,c4,f4]@31 ~]/2",
})).s("gm_pad_new_age").gain(0.3)

// chords · orchestral harp · "HARP" · Bb Dm C Em Dm F Em Gm …
const orchestral_harp = note(`<
  ~@77
  [g2 bb2 a2 c3 bb2 d3 c3 e3 [bb2,d3] [d3,f3] [c3,e3] [e3,g3] [d3,f3] [f3,a3] [e3,g3] [g3,bb3]]
  [[g2,a3] [bb2,a3,c4] [a2,g3,bb3] [c3,bb3,d4] [bb2,a3,c4] [d3,c4,e4] [c3,b3,d4] [e3,d4,f4] [bb2,d3,c4,e4] [d3,f3,e4,g4] [c3,e3,d4,f4] [e3,g3,f4,a4] [d3,f3,e4,g4] [f3,a3,g4,bb4] [e3,g3,f4,a4] [g3,bb3,a4,c5]]
  [[g2,a3,g4] [bb2,a3,c4,bb4] [a2,g3,bb3,a4] [c3,bb3,d4,c5] [bb2,a3,c4,bb4] [d3,c4,e4,d5] [c3,b3,d4,c5] [e3,d4,f4,e5] [bb2,d3,c4,e4] [d3,f3,e4,g4] [c3,e3,d4,f4] [e3,g3,f4,a4] [d3,f3,e4,g4] [f3,a3,g4,bb4] [e3,g3,f4,a4] [g3,bb3,a4,c5]]!2
  [[a3,g4] [a3,c4,bb4] [g3,bb3,a4] [bb3,d4,c5] [a3,c4,bb4] [c4,e4,d5] [b3,d4,c5] [d4,f4,e5] [c4,e4] [e4,g4] [d4,f4] [f4,a4] [e4,g4] [g4,bb4] [f4,a4] [a4,c5]]
  [g4 bb4 a4 c5 bb4 d5 c5 e5 ~@8]
  ~@24
>`).s("gm_orchestral_harp").gain(0.12)

// drums · kick
const kick = s("bd").struct("<[x!3 ~@3 x!2 ~@2 x ~@5]!106 [x!3 ~@3 x!2 ~@8]>").gain(0.45)

// drums · clap
const clap = s("cp").struct("<~ [~@3 x ~@4] ~@105>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!106 [~ x ~@2]>").gain(0.45)

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

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@17 [~@10 x!2 ~@4] ~@15 [~@10 x!2 ~@4] ~@73>").gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<[x!3 ~@3 x!2 ~ x!2 ~@3 x!2]!106 [x!3 ~@3 x!2 ~@8]>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x]!106 [~ x ~@2]>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@9 [~ x] ~@97>").gain(0.5)

// drums · china
const china = s("cr").struct("<~@105 x ~>").gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~@26 A ~ A ~ A ~ A ~ A ~ A ~ A ~@14 A@23 ~@9 A@20 ~@2>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<~@2 [x!8]!103 ~@2>").gain(0.2)

stack(
  bass, electric_guitar_clean, overdriven_guitar, synth_strings_1, pad_new_age, orchestral_harp, kick, clap, snare,
  low_tom, low_tom_soft, hihat, open_hat, high_tom, china, tambourine, shaker
)

More by Giorgia