Strudelify

Viaggia insieme a me

Eiffel 65

KeyE minorTempo83 bpm
0:00/0:00
// Viaggia insieme a me — Eiffel 65
// 83 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(83/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 · lead 2 sawtooth · "VIAGGIA INSIEME A"
const bass = note(`<
  ~@16 A B C D A E C D F@2 G H I D C J A B C D A E C J ~ K C B L M N M O P ~@3 Q@4 R S T U A B C D A E C D A B C D V W T
  X ~
>`.pickRestart({
  A: "c2 c3 c2 c3 c2 c3 c2 c3", B: "a1 a2 a1 a2 a1 a2 a1 a2", C: "e1 e2 e1 e2 e1 e2 e1 e2",
  D: "g1 g2 g1 g2 g1 g2 g1 g2", E: "b1 b2 b1 b2 b1 b2 b1 b2", F: "f1/2", G: "f2", H: "f1@7 ~",
  I: "f1 f2 f1 f2 f1 f2 f1 f2", J: "g1 g2 g1 g2 b1 b2 b1 b2", K: "a1 a2 a1 a2 a1 a2 g1 g2",
  L: "e1 e2 e1 e2 e1 e2 f1 f2", M: "a#1 a#2 a#1 a#2 a#1 a#2 c2 c3", N: "d2 d3 d2 d3 d2 d3 d2 d3",
  O: "f1 f2 f1 f2 d1 d2 e1 e2", P: "a1!4", Q: "f1/4", R: "f1", S: "g1", T: "e1", U: "g1@8 b1@7 ~", V: "c2", W: "b1",
  X: "g1 b1",
})).s("gm_lead_2_sawtooth").gain(0.8)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A@2 B@2 A@2 B@2 C@2 D@2 A@2 D@2 C@2 D@2 E F E F G@4 H@2 I@2 J@2 K@2 ~ L F M N O P Q R S@3 ~ E F E F G@4 H@2 I@2
  J@2 K@2 T@2 I@2 J@2 K@2 ~
>`.pickRestart({
  A: "[c2@15 ~ a1@16, [c4,e4]]/2", B: "[[e1,e4]@16 g1@7 ~ b1@7 ~, b3@31 ~, ~@16 d4@15 ~]/2",
  C: "[[c2,c4] [b1,b3], e4@31 ~]/2", D: "[[e1,e4] [g1,d4], b3@31 ~]/2", E: "[c4,f4,a4]", F: "[d4,g4,b4]",
  G: "[[a3,c4]@2 [b3,d4]@2 e4@2 ~ b4, g4@3 [d4,g4], ~@4 b3@3 ~]/4", H: "[g4 a4, [c4,e4]]/2",
  I: "[e4@16 d4@15 ~, [b3,g4]@31 ~]/2", J: "[c4 b3, [e4,g4]]/2", K: "[e4 d4, [b3,g4]]/2", L: "[e4,a4,c5]",
  M: "[e4,g4,c5]", N: "[d4,g4,b4]@3 [g4,c5]", O: "[f4,a#4,d5]@3 [e4,g4,c5]", P: "[f4,a4,d5]",
  Q: "[d4,f4,a#4]@3 [e4,g4,c5]", R: "[f4,a4,c5]@3 [e4,g#4,d5]", S: "[[e4,b4]@11 ~@5, c5@31 ~@17]/3",
  T: "[g4 ~@15 a4@16, [c4,e4]]/2", // C
})).s("gm_synth_strings_1").gain(0.48).pan(0.6)

// other · music box
const music_box = note(`<
  A B C D E F G H E F G H E I G J E F G H E I G J K L M N K L O P E F G H E I G J Q R S T U V W X Y Z B AA AB K L M N K
  L O P E F G H E I G J E F G H E I G J ~
>`.pickRestart({
  A: "c6@2 g4 c6 b5@2 g4 b5 [c4,g5] ~ [g4,f5] ~ e5@2 g4 ~, c4 ~@3 c5 ~@7 c5 ~@3", // C5 G7
  B: "c6@2 e4 c6 b5@2 e4 b5 [a3,g5] ~ [e4,f5] ~ e5@2 e4 ~, a3 ~@3 a4 ~@7 a4 ~@3", // A7 Fmaj7
  C: "[e3,a5] a5 b3 b5 [e4,b5] ~ b3 ~ [e3,c6] ~ [b3,a5] ~ [e4,b5] ~ b3 ~", // A5 E5 C B7 E5
  D: "[g3,c6] ~ [d4,c6] d6 [g4,d6] ~ [d4,b5] c6 [g3,b5] a5 [d4,g5] ~ g4 ~ d4 ~, ~@11 g5@2 ~@3", E: "c6@3 ~@13",
  F: "a5 ~@3", G: "g5@3 ~@13", H: "b5 ~@2 g5", I: "b5 ~@7", J: "b5 ~@3", K: "f5 ~@7", L: "g5 ~@7", M: "f5@3 ~@13",
  N: "g5 ~@3", O: "e5@3 ~@13", P: "g5 ~ b5 ~", Q: "~@8 g4 ~@3 d5 ~@3", R: "e5 ~@11 d5 ~ c5 ~",
  S: "g5 ~@7 g4 ~@3 g5 ~@3", T: "c5 ~@3 c5 ~ b4 ~ a4 ~@3 g4 ~ f4 ~", U: "e4 ~@7 d5 ~@3 e5 ~@3",
  V: "f5 ~@7 d5 ~@3 g5 ~ a5 ~", W: "d6 ~ a5 ~ f5 ~ a5 ~ a#5 a5 g5 ~ f5 ~ e5 ~",
  X: "d5 ~@2 c5 a#4 ~@2 a4 g4 ~@2 f4 e4 ~ f4 ~", Y: "~@6 a4 b4 c5 e5 a5 ~ b5 e5 [a5,f6] ~",
  Z: "[c4,b5] ~ g4 c6 b5@2 g4 b5 [c4,g5] ~ [g4,f5] ~ e5@2 g4 ~, c6@2 ~@2 c5 ~@7 c5 ~@3", // Cmaj7 C5 G7
  AA: "[e3,a5] a5 b3 b5 [e4,b5] ~ b3 ~ [e3,c6] ~ [b3,a5] ~ [e4,b5] ~ b3 ~, g4@7 ~@9", // A5 E5 C B7 E5
  AB: "[g3,c6] ~ [d4,c6] d6 [g4,d6] ~ [d4,b5] c6 [g3,b5] a5 [d4,g5] ~ g4 ~ d4 ~, b4@8 ~@3 g5@2 ~@3", // C5 D7 G5 G G5
})).s("gm_music_box").gain(0.56).pan(0.4)

// chords · lead 1 square
const lead_1_square = note("<~@40 A B C D E F G H@2 I@3 ~@26>".pickRestart({
  A: "~@3 d5, ~ g4", B: "e5@6 d5 c5, g4 ~@3", C: "d5 ~ d5 ~ g4@2 g5@2, g5 ~", D: "[c5,g5]@2 c5 b4 a4@2 g4 f4, ~ g5 ~@2",
  E: "g5 f5 g5 ~ d5@2 e5@2, e4@4 g5 ~@3", F: "f5@4 ~@2 g5 a5, ~ d5",
  G: "f5@2 a5@2 ~@2 a5@2 a#5 a5 g5@2 [f5,a5]@2 [e5,g5]@2, d6@2 d6 ~", // F Em
  H: "[[d5,f5]@3 [c5,e5] [a#4,d5]@3 [a4,c5] [g4,a#4]@3 [f4,a4] [e4,g4]@2 f4@8 a4 b4 c5 e5 a5@2 ~ e5 [a5,f6]@2, ~@7 a4@3 ~@4 b5 ~]/2", // Dm C A# Am Gm F Em Dm
  I: "[b5 a5 ~@22, e6@13 ~@3]/3",
})).s("gm_lead_1_square").gain(0.64).pan(0.6)

// chords · lead 1 square · soft notes
const lead_1_square_soft = note("<~@41 A B C D ~ E ~@2 F G ~@27>".pickRestart({
  A: "~ g4!2 ~", B: "~@2 c5@2 ~@2 c5 ~@9", C: "~@2 g5!2", D: "~@3 f5 ~@2 g5 ~", E: "~@2 f5 ~@5",
  F: "~@2 b5 a5 b5 a5 b5 a5", G: "b5 a5 ~@6",
})).s("gm_lead_1_square").gain(0.32).pan(0.6)

// other · glockenspiel
const glockenspiel = note(`<
  A B C D E F G H E F G H E I G I E F G H E I G I J G K G J G L M E F G H E I G I ~@9 A N O P J G K G J G L M E F G H E
  I G I E F G H E I G I ~
>`.pickRestart({
  A: "c6@2 ~ c6 b5@2 ~ b5 g5 ~ f5 ~ e5@3 ~", B: "c6@2 ~ c6 b5@2 e4 b5 [a3,g5] ~ f5 ~ e5@2 e4 ~, a3 ~@3 a4 ~@7 a4 ~@3",
  C: "[e3,a5] a5 ~ b5!2 ~ b3 ~ [e3,c6] ~ a5 ~ [e4,b5] ~ b3 ~", // A5 C E5
  D: "[g3,c6] ~ [d4,c6] d6 [g4,d6] ~ [d4,b5] c6 [g3,b5] a5 g5 g5@2 ~ d4 ~", E: "c6@13 ~@3", F: "a5@3 ~", G: "g5@3 ~",
  H: "b5@3 g5", I: "b5@3 ~", J: "f5@13 ~@3", K: "f5@3 ~", L: "e5@3 ~", M: "g5@7 ~ b5@7 ~",
  N: "c6@2 e4 c6 b5@2 e4 b5 [a3,g5] ~ [e4,f5] ~ e5@2 e4 ~, a3 ~@3 a4 ~@11", // A7 Fmaj7
  O: "[e3,a5] a5 b3 b5!2 ~ b3 ~ [e3,c6] ~ a5 ~ [e4,b5] ~ b3 ~", // A5 C E5
  P: "[g3,c6] ~ c6 d6 [g4,d6] ~ [d4,b5] c6 [g3,b5] a5 [d4,g5] g5@2 ~ d4 ~", // C5 G5 G G5
})).s("gm_glockenspiel").gain(0.48).pan(0.2)

// other · glockenspiel · soft notes
const glockenspiel_soft = note("<A B C D ~@45 A E F G ~@25>".pickRestart({
  A: "c4 ~ g4 ~ c5 ~ g4 ~ c4 ~ g4 ~ c5 ~ g4 ~", B: "~@2 e4 ~@7 e4 ~@5", C: "~@2 b3 ~ e4 ~@5 b3 ~@5",
  D: "~@10 d4 ~ g4 ~@3", E: "~@12 a4 ~@3", F: "~@4 e4 ~@5 b3 ~@5", G: "~@2 d4 ~@9 g4 ~@3",
})).s("gm_glockenspiel").gain(0.24).pan(0.2)

// chords · synth strings 1
const synth_strings_1_2 = note(`<
  ~@4 A@2 B@2 A@2 B@2 C@4 D@2 E@2 F@4 G@4 H I J K L@2 M@2 N@2 M@2 ~ O P Q R S T U V W@3 ~ X@4 H I J K L@2 M@2 N@2 M@2
  L@2 M@2 N@2 M@2 ~
>`.pickRestart({
  A: "[[c3,g4] [a2,a4], [c5,e5]]/2", B: "[[e2,e5]@2 g2 b2, [g4,b4], ~ d5]/2",
  C: "[[c3,c5] b2 e2 [g2,d5], g4, e5@3 ~, ~ b4@3]/4", D: "[g4 a4, [c5,e5]]/2", E: "[e5 d5, [g4,b4]]/2",
  F: "[c5 ~@2 d5, g4, e5@3 ~, ~ b4@3]/4",
  G: "[[c5,c6]@16 [b4,b5]@12 [g4,g5]@4 [a4,a5]@15 ~ [d5,d6]@8 [b4,b5]@4 [a4,a5]@2 [b4,b5]@2, f1]/4", H: "[f2,c5,c6]",
  I: "[d5,d6]@6 [g4,g5] [a4,a5], g2", J: "[b4,b5]@3 [c5,c6], e2@15 ~", K: "[g2,d5,d6]@2 [e5,e6] [f5,f6], ~ b2",
  L: "[g5 a5, [c6,e6]]/2", M: "[e6 d6, [g5,b5]]/2", N: "[c6 b5, [g5,e6]]/2", O: "[e5,g5,c6]", P: "b5@6 c6 d6, [d5,g5]",
  Q: "[c6,e6]@6 d6 c6, g5@15 ~", R: "[e5,g5,b5] [d5,g5,b5]", S: "[d5,f5,a#5]@3 [e5,g5,c6]", T: "[f5,a5,d6]",
  U: "d6 ~@7 d5@4 [c5,e5,g5]@4, [f5,a#5]@3 ~", V: "[a4,c5,f5]@11 ~ [b4,b5]@2 [f5,c6,f6]@2", W: "[e5,b5,e6]/3",
  X: "[[c5,c6]@8 [b4,b5]@6 [g4,g5]@2 [a4,a5]@8 [d5,d6]@4 [b4,b5]@2 [a4,a5] [b4,b5], f1]/4", // C B G A D B A B
})).s("gm_synth_strings_1").gain(0.56).pan(0.6)

// other · piano
const piano = note("<~@3 A@2 B C D E ~@59 F G B C D H I C J@2>".pickRestart({
  A: "[~@13 g5 d6 e6 c6@12 ~ g5 d6 e6, ~@7 g6@3 ~@6]/2", B: "a5@12 ~ g5 c6 b5", C: "g5@13 b5 c6 d6",
  D: "b5@5 c6 b5 g5@5 ~ g5 d6 e6", E: "c6@11 ~@5", F: "~@13 g5 d6 e6", G: "c6@12 ~ g5 d6 e6", H: "c6@11 ~@2 g5 d6 e6",
  I: "g5@12 ~ g5 c6 b5", J: "[~@5 c6 b5 g5@5 ~@2 d6 e6@3 ~@14, ~@13 g5@4 ~@15]/2",
})).s("gm_piano").gain(0.8).pan(0.6)

// other · piano · soft notes
const piano_soft = note("<~@76 [b5@5 ~@11] [~@2 d6 e6@2 ~ d6 e6@2 g5 d6 e6 ~@4, ~ g5@4 g5@4 ~@7]>")
  .s("gm_piano").gain(0.16).pan(0.6)

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

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

// drums · snare
const snare = s("sd").struct("<~@16 A@8 ~@3 B A@3 ~ A@8 ~ A@8 ~@12 A@12 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A B@3 A B@3 A B@3 A B@2 ~ A B@7 A@2 B@6 C ~@12 A B@3 A B@3 A B@3 A B@2 D ~
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!7 ~", D: "x!6 ~@2",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@48 [~@7 x] ~@29>").gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 [x!16]!15 x [x!16]!17 ~@12 [x!16]!15 ~@2>").gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@8 A ~@7 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.56)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@16
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!15
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!17
  ~@12
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!14
  ~@3
>`).gain(1.62)

// drums · shaker
const shaker = s("sh").struct("<~@16 [x!8]!15 x [x!8]!17 ~@12 [x!8]!14 ~@3>").gain(0.4)

stack(
  bass, synth_strings_1, music_box, lead_1_square, lead_1_square_soft, glockenspiel, glockenspiel_soft,
  synth_strings_1_2, piano, piano_soft, rim, kick, snare, hihat, open_hat, tambourine, crash, cabasa, shaker
)

More by Eiffel 65