Strudelify

Incredibile romantica

Rossi Vasco

KeyG majorTempo70 bpm
0:00/0:00
// Incredibile romantica — Rossi Vasco
// 70 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 "Dist.Gt.1" distortion guitar (copy of ch 7 "Dist.Gt.2" distortion guitar)
// note: Full arrangement: all 72 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): Ac.guitar, Gt.Harm.
setcpm(70/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.

// other · piano · "Canto"
const piano = note("<~@12 A@2 ~@58>".pickRestart({
  A: "[~@4 d4 b3 d4@5 b3 d4@2 b3 g3@9 ~@8]/2",
})).s("gm_piano").gain(0.8)

// bass · fretless bass · "Fretless"
const bass = note(`<
  ~ A B C@3 B D@3 E F G H G H G H G I J K L M N O P Q R@2 P S T U T U T U T V J K W X Y Z X AA AB P AC AB@2 P AC AD@8 AE
  AF AG AH AE AH AE AI ~
>`.pickRestart({
  A: "~@6 g2 d2", B: "g1@7 b1", C: "[c2@4 d2 f2@8 ~ b2@8 g2 d2]/3", D: "[c2@12 d2@2 f2@13 ~ b2@20]/3", E: "g1 d2",
  F: "c2@12 ~ c2@3", G: "g1", H: "c2@9 ~ c2@2 g2@2 d2@2", I: "c2@14 ~ [c2,d2]", J: "d#2", K: "g1 f#1 e1@2",
  L: "d1@9 ~ d1@6", M: "a1@3 ~ a1@2 b1@2 c2@4 d2@4", N: "g1@5 ~ g1 ~ g1@5 ~ g1@2", O: "c2@2 c2 d2 d#2@2 f2@2",
  P: "g2 f#2 e2 d2", Q: "c2@8 ~ d2!7", R: "g2@8 ~@2 g2@4 d2 e2", S: "c2@8 d2 ~ d2@6", T: "g1@7 ~ g1 ~ g1@6",
  U: "c2@7 ~ c2 ~ c2@2 g2@2 d2@2", V: "c2@7 ~ c2 ~ c2@4 ~ [c2,d2]", W: "d1@4 ~ d1@3", X: "a1@2 a1 b1 c2@2 d2@2",
  Y: "g1@4 f#1@4 e1@7 ~", Z: "d1@9 d1 ~ d1 d1@3 ~", AA: "g2@7 ~ g2 ~ g2@3 ~ d2 e2", AB: "g2@7 ~ g2 ~ g2@4 d2 e2",
  AC: "c2@8 d2 ~ d2@5 ~", AD: "g3!2 ~ g3 g3@2 ~@2 g3!2 ~ g3!2 ~ g3 ~", AE: "g1@3 ~ f#1@4 e1@4 b1@4",
  AF: "d2@8 ~ c2!4 d2 d2@2", AG: "g1 f#1 e1 b1", AH: "d2@9 c2!4 d2 d2@2", AI: "d2 ~",
})).s("gm_fretless_bass").gain(0.32)

// chords · electric guitar clean · "Cl.Guitar"
const electric_guitar_clean = note("<A B A B A B A B A B A B C B C B C B C D E F G H ~@15 I@5 ~@28>".pickRestart({
  A: "d3@2 ~@2 [g3,d4]@2 [d3,g3,d4] [f3,b3,d4] [d3,f3,b3]@2 [f3,b3]@2 [f3,b3,f4,g4]@2 [d3,b3] [g3,b3], [g3,b3,d4,g4] [b3,g4] [f4,g4] ~, ~ d3@2 ~@2 d3@2 ~", // G5 Bdim Fdim G7 G Em Fsus2
  B: "e3@2 e3@2 [g3,c4,e4]@2 ~ [g3,e4] [c4,e4] ~@2 [d4,e4]!2 [g3,d4,e4] [g3,c4,e4]@2, c3@6 c3@3 [d4,e4]@2 ~@5, [g3,c4,e4]@4 ~@2 e3@2 e3@7 ~, ~@4 g3 c3@3, ~@10 g3@3 ~@3", // C Dsus2 Em7 C Dsus2 C
  C: "d3@2 ~@2 [g3,d4]@2 [d3,g3,d4] [f3,b3,d4] [d3,f3,b3]@2 [f3,b3]@2 [f3,b3,g4]@2 [d3,b3] [g3,b3], [g3,b3,d4,g4] [b3,g4] g4 ~, ~ d3@2 ~@2 d3@2 ~", // G5 Bdim Fdim G7 G Em
  D: "e3@2 e3@2 [g3,c4,e4]@2 ~ [g3,e4] c4 c4@7, c3@3 [c3,e3]@5, [g3,c4,e4] ~ [g3,e4]@2", // C
  E: "~@4 [a#3,d#4]@5 [a#3,d#4] d#4@2 g4@2 d#4 [c3,d4], ~@3 d#3@11 ~@2, ~@4 [g3,g4]@6 [g3,a#3]@5 ~", // D#5 Csus2 G Gm
  F: "~@3 a2 ~@2 d3 ~ b2 d4 ~@3 e4@2 [a2,d3,b3], [g2,g4]@2 d3@2 f#2@3 b3@2 b2@3 g3@4, ~ [b2,d3]@2 [g3,b3]@4 g3@4 d4@3 ~@2, ~@5 a2@3 e2@7 ~, ~@8 e3@2 e3@5 ~", // Bm7 G Bm G
  G: "~ [a#3,f4] ~@2 f#4@2 ~ f#4@2 g4 ~@2 g4 [d4,f#4] [a3,d4,f#4] [g3,b3,e4], a2, ~ d4@3 [a3,d4]@6 [d3,a3]@5 ~, ~@11 [d4,g4]@2 ~@3", // A#5 D Em D5 G5
  H: "[a2,e3,a3,c4]@3 ~ [a2,e3] ~ [b2,g3]@2 [c3,e3,g3,e4]@3 ~ [d3,a3,d4]@3 ~, e4 ~, ~@3 c4@4 ~ c4@2 ~@6, ~@3 a3@2 ~@6 a2@4 ~", // Am A5 Em C D5
  I: "[~@16 [d#4,g4]@4 ~ g3@2 ~@6 d#4@2 ~@9 b2 ~@4 e4@2 ~ [a3,d4,f#4]@4 [d4,f#4]@3 [d4,f#4]@2 [d4,g4] [a3,d4,g4] [d4,g4] [a3,d4,g4] [a3,d4,f#4] [d3,a3,d4,f#4] ~ e3@4 a2@2 b2@2 c3@3 ~@5, ~@15 d#3@10 a#3@6 b3@4 b3@3 d3@2 [e3,d4]@2 e3@2 g3@4 ~@4 a3@6 ~@6 a3@6 ~@10, ~@15 g3@5 g4@6 d#3@5 ~ [g2,b2]@4 f#2@3 b3@2 b2@6 d3@14 ~@19, ~@16 a#3@8 g3@6 ~ g3@12 d4@4 ~@17 [c4,e4]@12 ~@4, ~@20 d#4@3 d#4@4 g4@4 ~@3 d3@3 a2@3 e2@7 ~@13 a2@3 a2@4 ~@13]/5", // D# D G5 Dsus4 G5 Dsus4 D E7 …
})).s("gm_electric_guitar_clean").gain(0.1).pan(0.3)

// chords · acoustic guitar steel · "Ac.guitar"
const acoustic_guitar_steel = note("<~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B C@2 D E ~@16 F G H I ~@28>".pickRestart({
  A: "~@9 g3@3 g3 ~@3", B: "~@11 e4@5",
  C: "[[d#3,g3,a#3,d#4,g4]@4 ~@3 a#3@2 g4@3 [d#3,a#3,d#4]@3 ~@2 g3 ~@4 e2@2 ~@2 d4 ~ d4@2 [e3,g3] g3, ~@7 d#4@5 ~@3 g3@2 ~ g3@10 ~@4, ~@16 b2@3 ~@13]/2", // D# D#5 Em
  D: "[d3,d4,f#4]@4 ~@5 [a3,d4] g4@2 [a3,d4] a3 b3 ~, ~@12 a2@3 ~", E: "~ e4@2 ~@8 [g3,c4] ~@2 [a3,d4] d3",
  F: "~@4 a#3@3 a#3@2 ~ g3@2 [d#3,g3,a#3,d#4,g4]@3 ~, ~@9 g4@3 ~@4", // D#
  G: "~ g3 ~@4 e2@2 ~ d4!2 ~ d4@2 [e3,g3] [a2,g3], ~ d3@4 ~@11, ~ g3@5 ~@2", H: "~@9 a3 ~@4 b3 e4",
  I: "~ e4@2 ~ e3 ~@3 [e3,g3,e4]@3 [g3,c4] [d3,a3,d4]@2 [a3,d4] d3, ~@3 c4@5 ~@8, ~@3 a3@2 ~@11", // Em C5 D5
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.7)

// other · electric guitar muted · "Muted Gt."
const electric_guitar_muted = note("<~@32 A B A B A B A C ~@32>".pickRestart({
  A: "g1@7 ~ g1 ~ g1@3 ~@3", B: "c2@7 ~ c2 ~ c2@2 g3@2 d3@2", C: "c2@7 ~ c2 ~ c2@5 [c2,d2]",
})).s("gm_electric_guitar_muted").gain(0.29)

// chords · distortion guitar · "Dist.Gt.2"
const distortion_guitar = note(`<
  ~@24 A B C D E@2 F G ~@11 H I J K L M N O P M N Q ~@4 R S R S T U T U T U T V@2
>`.pickRestart({
  A: "g2@7 ~ g2@7 ~", B: "g2@7 ~ g2@8", C: "d4 c4 b3 a3", D: "g3@8 ~ a3!7", E: "[[g2,d3]@31 ~]/2",
  F: "[g2,d3] [f#2,c3] [e2,b2] [d2,a2]", G: "[c2,g2]@8 [d2,a2]@7 ~", H: "~@4 a2@2 b2@2 c3@4 a2@3 ~", I: "b2 a2 g2 d3",
  J: "f#3", K: "c3@4 c3@2 d3@2 e3@4 f#3@3 ~", L: "[g3,d4,g4]@7 ~ [g3,d4,f4]@8", M: "[g3,c4,e4]@7 ~ [g3,c4,d#4]@7 ~",
  N: "[g3,b3] [f#3,a3] [e3,g3] [d3,f#3]", O: "[c3,g3] [d3,a3]", P: "[g3,d4,g4] [g3,d4,f4]", Q: "[c3,g3]@7 ~ [d3,a3]@8",
  R: "[g2,d3,g3]!8 [g2,d3,f3]!8", S: "[g2,c3,g3]!6 [g2,c3,a3]!2 [g2,d#3,a#3]!4 [g2,d#3,c4]!4",
  T: "[g2,d3]@4 a3@3 ~ [e3,b3]@8", U: "[d3,a3]@8 ~ [c3,g3]!4 [d3,a3] [d3,a3]@2",
  V: "[[d3,a3]@15 ~ [b2,d3,g3]@15 ~, ~@15 g2@15 ~@2]/2", // D5 G
})).s("gm_distortion_guitar").gain(0.36).pan(0.6)

// chords · overdriven guitar · "Od Guitar"
const overdriven_guitar = note("<~@24 A B C D E F G H ~@11 I J K L M N O P Q R S T ~@8 U V U V U V U W ~>".pickRestart({
  A: "g3@2 d3 g3 f3@2 d3 f3", B: "e3@2 c3 d3 d#3@2 f3@2",
  C: "[d4,g4]@4 [c4,f#4]@3 [c4,d4,f#4,g4] [b3,e4]@4 [a3,d4]@3 [a3,b3,d4,e4]", D: "[g3,c4]@8 ~ [a3,d4]!7",
  E: "[c5,f5] [c5,f5]@5 ~ [d5,e5] [c5,f5] [c5,f5]@5 ~ [g4,a4]", F: "a4 g4@4 ~@2 [g4,a4] a4 a4@2 g4 a4 a4@2 g4",
  G: "d5@4 d5@4 c5 b4 ~ c5 [b4,c5] [a4,b4] [g4,a4]!2", H: "d4@8 f#4@7 ~", I: "~@2 a2 b2 c3@2 d3@2",
  J: "g2@4 f#2@4 e2@4 b2@3 ~", K: "d3@15 ~", L: "e4@3 ~ e4@2 f#4@2 g4@4 a4@3 ~", M: "f5@7 ~ f5@8", N: "f5@6 c#5@9 ~",
  O: "[g4,b4] [a4,b4,c5,d5] [a4,c5] [f#4,g4,a4,b4] [f#4,a4] [g4,a4,b4,c5] [g4,b4] [e4,f#4,g4,a4,b4] [e4,g4] [f#4,g4,a4,b4] [f#4,a4] [d4,e4,f#4,g4] [d4,f#4] [e4,f#4,g4,a4] [e4,g4] [b3,d4,f#4]", // G D7 Am Gmaj7 F#m Cmaj7 G Em …
  P: "[c4,e4]@8 f#4@2 g4 ~ a4 ~ d5@2", Q: "d5@8 ~ c5 ~ d5 c5@3 b4, ~@4 b4 ~@3",
  R: "b4 g4 g4@5 [g4,a4] [g4,a#4,d5] [g4,a#4,d5]@2 [g4,a4] [g4,a#4,d5] [g4,a#4,d5]@2 [g4,a4]", // Gsus2 Gm Gsus2 Gm Gsus2
  S: "d5@3 ~ d5@4 c5 b4 ~ [b4,c5]!2 [a4,b4] [g4,a4] [f#4,g4]", // Cmaj7 Asus2 Gsus2 Gmaj7
  T: "d4@8 [d4,f#4,a4]@2 [e4,g4,b4] ~ f4@2 f#4 ~, ~@3 [a4,c5]", U: "[b3,g4] [a3,f#4] [g3,e4] [f#3,b4]",
  V: "[d3,d5]@8 ~ [c3,g3]!4 [d3,a3]!2 ~", W: "[d3,d5]@15 ~",
})).s("gm_overdriven_guitar").gain(0.45)

// chords · guitar harmonics · "Gt.Harm"
const guitar_harmonics = note("<~@53 [~@15 a4] [f#4 ~@15] ~@14 [d5 c5 b4 d5] [f#5@15 ~] ~>")
  .s("gm_guitar_harmonics").gain(0.28)

// chords · lead 5 charang · "Charang"
const lead_5_charang = note("<~@55 A B A B A B A B C D C D C D C D ~>".pickRestart({
  A: "[d4,g4,b4] [d4,f4,b4]", B: "[c4,e4,g4] [c4,d#4,g4]", C: "[g4,b4] [f#4,a4] [e4,g4] [g4,b4]", D: "[a4,d5] ~",
})).s("gm_lead_5_charang").gain(0.66)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A@12 B C D B A B E F A@7 G A@2 H G E I J K L D M H B N G O@8 P H Q R Q F D S ~
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@6 x!2 ~@2 x ~@4", C: "x ~@7 x!3 ~@5", D: "x!3 ~", E: "x ~@3 x ~@3 x ~@6 x", F: "x",
  G: "x!2", H: "x ~@6 x!2 ~@7", I: "x ~@6 x!2 ~@2 x ~@3 x", J: "x ~@3 x ~ x ~ x ~@2 x ~@4", K: "x ~@6 x!2 ~ x ~@5",
  L: "x ~@6 x!2 ~@3 x!2 ~@2", M: "x ~@2 x ~@3 x!2 ~@2 x ~@4", N: "x ~@3 x ~@3 x ~@2 x ~@3 x",
  O: "x!2 ~@2 x ~@3 x!2 ~@2 x ~@3", P: "~@3 x ~@3 x ~@3 x ~@4", Q: "x ~@6 x!2 ~@6 x", R: "x ~@2 x ~@12", S: "x!4",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@55 [~@7 x]!8 ~@9>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@12 A@14 ~ B A@2 C A@12 D E A ~ A D F A@3 ~ A ~@8 G H A I A I ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!4", C: "~@5 x!2 ~", D: "~ x ~@2", E: "~@3 x", F: "~@5 x ~@2", G: "x!4",
  H: "~@4 x ~@6 x!5", I: "~@4 x ~@4 x!7",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@11 A ~@11 B ~ C ~@5 D ~@8 E ~@2 F ~@4 G ~@15 H ~@7>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@13 x!2 ~", C: "~@7 x!2 ~@7", D: "~@10 x!2 ~@4", E: "~@7 x!3 ~@6", F: "~@12 x!3 ~",
  G: "~@11 x!2 ~@3", H: "~@9 x!2 ~@5",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A ~@11 B ~@2 C D ~@2 E F ~@11 G H ~ A ~ F I B ~@2 J ~@9 K L ~ M ~ L C ~@2
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@7 x", C: "~@7 x ~@6 x!2", D: "~@12 x!4", E: "~@7 x ~@8", F: "~@11 x!2 ~@3", G: "~@13 x!2 ~",
  H: "~@3 x ~@3 x ~@7 x", I: "~@3 x ~@2 x!2 ~@5 x!2 ~", J: "~@3 x ~@2 x!2 ~@4 x!2 ~@2", K: "~@14 x!2", L: "~@9 x!7",
  M: "~@5 x!2 ~@2 x!7",
})).gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@12 A@8 B A@2 C ~@8 D A D A D A D A ~@3 E ~@11 F@8 ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~@3 x ~ x ~@2", C: "~ x ~@6", D: "~ x ~@3 x ~ x", E: "x!2 ~@6", F: "~ x!5 ~@2",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@2 B ~@3 C D ~@11 E F ~ E ~ G H A ~@2 I ~@9 A ~@5 J ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~@2 x!2 ~@2 x ~@5 x!2 ~@2", C: "~@2 x!2 ~@2 x ~@6 x ~@2", D: "~@5 x ~@2", E: "~@3 x",
  F: "~@2 x ~@3 x ~@6 x ~@2", G: "~@11 x ~@4", H: "~@2 x ~@8 x!2 ~@3", I: "~ x ~@6", J: "~@3 x ~@2 x!2 ~@5 x ~@2",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A ~ A ~ B C A@2 D ~@3 B ~@2 E F ~ A ~ G ~@3 B H ~ E I B ~@9 B A@8 ~@5 I ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~ x ~@5 x", D: "~@2 x!3 ~@3", E: "~@5 x ~@2", F: "~@2 x ~@4 x", G: "~@6 x!2",
  H: "~ x ~@4 x ~", I: "~ x ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@69 [~ x ~@4 x ~] ~@2>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@11 A@2 B A@2 C D ~@9 A@2 ~ E D A F A@2 D G H A D A ~@8 D H I A I A D A ~
>`.pickRestart({
  A: "x", B: "~ x!2 ~", C: "x ~@2 x", D: "x!3 ~", E: "~@3 x!2 ~@3", F: "x ~ x!3 ~@3", G: "x!2 ~@2", H: "~ x ~@2",
  I: "x ~ x!2",
})).gain(0.72)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@20 A ~@10 A ~@10 A ~@23 A ~ A ~@3>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@24 A@2 B C A D ~ E ~@12 F B G A H I J K A L H ~@8 L M N A N O ~@3>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!7 ~", D: "~ x!5 ~ x", E: "~ x!4 ~@3", F: "~@5 x!2 ~", G: "~ x ~ x ~ x ~@2",
  H: "~ x!5 ~@2", I: "~ x ~ x ~ x!3", J: "~ x ~ x!4 ~", K: "x!2 ~ x!5", L: "~ x!3 ~ x ~@2", M: "x!2 ~ x!2 ~@3",
  N: "~ x!3 ~ x ~ x", O: "~ x ~ x!5",
})).gain(0.56)

stack(
  piano, bass, electric_guitar_clean, acoustic_guitar_steel, electric_guitar_muted, distortion_guitar,
  overdriven_guitar, guitar_harmonics, lead_5_charang, kick, rim, snare, snare_soft, low_tom, hihat, hihat_soft,
  mid_tom, open_hat, high_tom, crash, crash_soft, ride
)

More by Rossi Vasco