Strudelify

Cosa restera (In a Song)

Eiffel 65

KeyA♭ minorTempo138 bpm
0:00/0:00
// Cosa restera (In a Song) — Eiffel 65
// 138 bpm, 4/4, key Ab minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 · synth bass 1 · "Cosa restera' (in"
const bass = note(`<
  ~@2 A B A B A B C D A B A B A B C D E F G F H I H J E F G F H I H J ~@2 A B A B A B C K A B A B A B C L ~ A B A B A B
  C L A B A B A B M N O P O P Q R Q L O P O P Q R Q L S ~ A B A B A B C L A B A B A B C L A B A B A B M N O P O P Q R Q
  L O P O P H I H J ~@3
>`.pickRestart({
  A: "~@2 ab2 ~@3 ab2 ~@3 eb2 ~@3 eb2 ~", B: "~@2 b1 ~@3 b1 ~@3 e2 ~@3 e2 ~", C: "~@2 db2 ~@3 db2 ~@3 e2 ~@3 e2 ~",
  D: "~@2 eb2 ~@3 eb2 ~@3 eb2 ~@3 db2 ~", E: "e2@7 db2", F: "gb2", G: "e2 db2", H: "e2", I: "ab2", J: "eb2",
  K: "~@2 eb2 ~@3 eb2 ~@7 db2 ~", L: "~@2 eb2 ~@3 eb2 ~@3 eb2 ~@3 eb2 ~", M: "eb1@2 eb1 ~", N: "eb1@2 eb1!6",
  O: "~@2 e2 ~@3 e2 ~@3 db2 ~@3 db2 ~", P: "~@2 gb2 ~@3 gb2 ~@3 gb2 ~@3 gb2 ~", Q: "~@2 e2 ~@3 e2 ~@3 e2 ~@3 e2 ~",
  R: "~@2 ab2 ~@3 ab2 ~@3 ab2 ~@3 ab2 ~", S: "~@2 g2 ~@3 g2 ~@3 g2 ~@3 g2 ~",
})).s("gm_synth_bass_1").gain(0.64)

// bass · synth bass 1 · "Cosa restera' (in" · soft notes
const bass_soft = note(`<
  ~@2 A B A B A B C D A B A B A B C D ~@18 A B A B A B C D A B A B A B C ~@2 A B A B A B C E A B A B A B F ~ G H G H I J
  I K G H G H I J I E@2 ~ A B A B A B C ~ A B A B A B C E A B A B A B F ~ G H G H I J I K G H G H ~@7
>`.pickRestart({
  A: "ab1 ~ ab1 ~ eb1 ~ eb1 ~", B: "b0 ~ b0 ~ e1 ~ e1 ~", C: "db1 ~ db1 ~ e1 ~ e1 ~", D: "eb1",
  E: "eb1 ~ eb1 ~ eb1 ~ eb1 ~", F: "~@3 eb1", G: "e1 ~ e1 ~ db1 ~ db1 ~", H: "gb1 ~ gb1 ~ gb1 ~ gb1 ~",
  I: "e1 ~ e1 ~ e1 ~ e1 ~", J: "ab1 ~ ab1 ~ ab1 ~ ab1 ~", K: "eb1 ~@7",
})).s("gm_synth_bass_1").gain(0.4)

// chords · marimba
const marimba = note(`<
  A@2 ~@51 B C B C B C D E B C B C B C F G ~@26 B C B C B C D E B C B C B C F G ~@19
>`.pickRestart({
  A: "db4 eb4 gb4 ab4 db4 eb4 gb4 ab4 db4 eb4 gb4 ab4 db4 eb4 gb4 ab4",
  B: "[eb5,b6] ~ [ab5,ab7] ~ [b5,ab6] ~ [ab5,db7] ~ [eb5,bb6] ~ [ab5,eb7] ~ [db6,gb6] ~ [eb5,eb6] ~", // Abm Ab E Db5 Eb5 Ab5 Gb5 Eb
  C: "[b4,e7] ~ [ab5,ab7] ~ [b5,eb7] ~ [ab5,db7] ~ [b4,b6] ~ [e5,e7] ~ [b5,bb6] ~ [e5,gb6] ~", // E5 Ab B Db5 B E Bmaj7 Esus2
  D: "[db6,ab6] ~ [ab5,ab7] ~ [db6,db7] ~ [ab6,eb7] ~ [e6,e7] ~ [ab5,e7] ~ [db6,ab6] ~ [ab5,db6] ~", // Db5 Ab Db Ab5 E Dbm Db5
  E: "[bb5,g6] ~ [eb5,bb5] ~ [bb5,bb6] ~ [eb6,b6] ~ [eb5,db7] ~ [eb6,gb7] ~ [bb5,eb7] ~ [eb5,ab6] ~", // Eb Eb5 Bb Abm Eb7 Ebm Eb5 Ab5
  F: "[eb5,ab6] ~ [bb5,ab7] ~ [eb6,db7] ~ [eb5,eb7] ~ [bb5,e7] ~ [eb6,e7] ~ [bb5,eb7] ~ [eb6,db7] ~", // Ab5 Bb7 Eb7 Eb Bbdim Emaj7 Eb5 Eb7
  G: "[eb5,eb6] ~ [bb5,eb7] ~ [eb6,bb6] ~ [eb5,b6] ~ [bb5,db7] ~ eb6 ~ [bb5,eb7] ~ eb6 ~", // Eb Eb5 Abm Bbm Eb5
})).s("gm_marimba").gain(0.32)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@18 A B C@5 D E F G@5 H I@2 J K J K J K L M J K J K J K L M ~@13 N O P@2 Q R Q R S T S U V W X@2 Y Z Y AA AB ~ J K J
  K J K L M ~@12 N O P@2 Q R Q R S T S U V W X@2 AC AD@2 H I@2 ~
>`.pickRestart({
  A: "~@7 db2, [b3,e4,ab4], e2@7 ~, ~ b4", B: "[gb2,db4,gb4,bb4]",
  C: "[e2 db2 [gb2,gb4,bb4]@2 [e2,e4,b4]@2 [ab2,eb4]@2 [e2,e4]@2, ab4, [b3,e4] ~@2 b3@2, ~ db4@5 ~@4]/5", // Gb E5 Ab5 E E5
  D: "[eb2,db4,eb4,gb4,bb4]", E: "~@7 db2, [b3,e4,ab4,ab6], e2@7 ~, ~ b4", F: "[gb2,db4,gb4,bb4,gb6]",
  G: "[[e2,e6] [db2,eb6] [gb2,gb4,bb4,db6]@2 [e2,e4,b4,e6]@2 [ab2,eb4,eb6]@2 [e2,e4,e6]@2, ab4, [b3,e4] ~@2 b3@2, ~ db4@5 ~@4]/5", // E Dbsus2 Gb E5 Ab5 E E5
  H: "[eb2,db4,eb4,gb4,bb4,eb6]", I: "[b4,g6]/2", J: "[b3,b4]@3 ~ [ab3,ab4]@2 [db4,db5]@2 [bb3,bb4]@3 ~@5",
  K: "[e4,e5]@3 ~ [eb4,eb5]@2 [db4,db5]@2 [b3,b4]@3 ~ [bb3,bb4]@3 ~", // E Eb Db B Bb
  L: "[ab3,ab4]@3 ~ [db4,db5]@2 [eb4,eb5]@2 [e4,e5]@3 ~ [ab3,ab4]@2 ~@2", // Ab Db Eb E Ab
  M: "[g3,g4]@3 ~ [bb3,bb4]@2 [b3,b4]@2 [db4,db5]@3 ~ [eb4,eb5]@3 ~", N: "[b3,eb4,ab4] [bb3,eb4,gb4]",
  O: "[b3,eb4,gb4] [b3,e4,ab4]", P: "[ab4 g4@3, [bb3,eb4]]/2", Q: "[e4,ab4,b4] [db4,e4,ab4]", R: "[db4,gb4,bb4]",
  S: "[e4,ab4,b4]", T: "[eb4,ab4,b4]", U: "[eb4,g4,bb4]", V: "[e4,ab4,b4,e6] [db4,e4,ab4,db6]", W: "[db4,gb4,bb4,gb6]",
  X: "[[e4,ab4,b4,e6] [db4,e4,ab4] [db4,gb4,bb4]@2, ~ db6@3]/2", Y: "[e4,ab4,b4,e6]", Z: "[eb4,ab4,b4,ab6]",
  AA: "[eb4,gb4,bb4,db5,eb6]", AB: "[eb4,g4,bb4,g6]", AC: "[e2,e4,b4,e6]", AD: "[[ab2,eb4,eb6] [e2,e4,e6], b3]/2",
})).s("gm_string_ensemble_2").gain(0.32)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@53 A B A B A B C D A B A B ~@30 A B A B A B C D A B A B ~@23>".pickRestart({
  A: "[ab3,b3,eb4] [bb3,eb4,gb4]", B: "[b3,eb4,gb4] [ab3,b3,e4]", C: "[ab3,db4,e4] [ab3,b3,e4]", D: "[g3,bb3,eb4]",
})).s("gm_string_ensemble_2").gain(0.16)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<A@2 ~@34 B C B C B C D E B C B C B C D E ~@34 F G C B C B C D E ~@33 F ~>".pickRestart({
  A: "[ab1,db4,eb4,gb4,ab4]/2", B: "b4@3 ~ ab4@2 db5@2 bb4@3 ~@5", C: "e5@3 ~ eb5@2 db5@2 b4@3 ~ bb4@3 ~",
  D: "ab4@3 ~ db5@2 eb5@2 e5@3 ~ ab4@2 ~@2", E: "g4@3 ~ bb4@2 b4@2 db5@3 ~ eb5@3 ~", F: "b4",
  G: "b4 ~@3 ab4@2 db5@2 bb4@3 ~@5",
})).s("gm_lead_2_sawtooth").gain(0.55)

// chords · piano
const piano = note(`<
  ~@18 A@3 B C D@2 E F@4 G H@2 I J@2 ~@33 K L K L M N M O K L K L M N M O ~@24 P Q K L K L M N M O K L K L G H@2 I J@2 ~
>`.pickRestart({
  A: "[eb5@2 ~@3 eb5@2 ab4@8 ~@3 b4 ~@2 b4@3, [e3,b3,e4,ab4]@14 [gb3,db4,bb4,db5]@18 [e3,b3,e4]@8 [db3,ab3,db4]@7 ~, ~@2 b4@5 ~@8 gb4@9, ~@3 db5@4 ~@9 ab4@8, ~@19 db5@2 ~@3]/3", // E Gb E5 Db5
  B: "ab4@5 ab4 b4 ab4, [gb3,gb4,db5]@15 ~", C: "eb5 db5 b4 db5@5, [e3,b3,e4]@15 ~",
  D: "[~@2 eb5 db5@2 eb5@2 ~ [e3,b3,ab4]@8, eb4@31 ~, [ab3,b4,ab5]@14 b4@17 ~]/2", E: "[eb2,eb4,gb4,db5]",
  F: "[eb5@2 ~@3 eb5@2 db5@3 db5 bb5@2 db5 b5 ~@3 b4 ~@8 gb5@2 e5 b4 eb5, [e3,b3,e4,ab4]@14 [gb3,db4,bb4]@18 [e3,b3,e4]@8 [db3,ab3,db4]@7 ~ [gb3,db5]@15 ~, ~@4 b4@10 ab4@16 gb4@16 gb4@15 ~@3, ~@3 db5@4 ~@9 ab4@5 ab4@3 ab4@5 ~@3, ~@38 db5@4 ~@10 b3@7 ~@5]/4", // E Gb E5 Db5 Gb5
  G: "eb5 db5 b4 db5@2 db5 gb5 b5, [e3,b3,e4,ab4]@15 ~", // E
  H: "[[b4,ab5]@2 [b4,eb5] [bb4,db5]@2 [b4,eb5]@2 ~@6 ab4 b4 ab4, eb4@31 ~, ab3@7 b4@3 b4@4 ~@2, ~@7 ab4@2 ab4@2 gb5@3 ~@2, ~@16 [e3,b3]@15 ~]/2", // E B Bbm B E5
  I: "eb5 db5 b4 ~@2 bb4@2 db5, [eb2,eb4,gb4]@15 ~, ~@6 db5@7 ~@3", J: "[b4,db5,g5]/2",
  K: "e5 ~ e5 ~@3 e5 ~ db5 ~ db5 ~@3 db5 ~", L: "gb5 ~ gb5 ~@3 gb5 ~@3 gb5 ~@3 gb5 ~",
  M: "e5 ~ e5 ~@3 e5 ~@3 e5 ~@3 e5 ~", N: "ab5 ~ ab5 ~@3 ab5 ~@3 ab5 ~@3 ab5 ~",
  O: "eb5 ~ eb5 ~@3 eb5 ~@3 eb5 ~@3 eb5 ~", P: "ab4 g4, [eb3,eb4,bb4]",
  Q: "g4 bb4 g4 bb4 g4 bb4 g4 bb4 g4 bb4 g4 bb4 g4 bb4 g4 bb4",
})).s("gm_piano").gain(0.4)

// chords · clavinet
const clavinet = note(`<
  ~@2 A B A B A B C D A B A B A B C E ~@18 A B A B A B C D A B A B A B C F G ~@16 H I H I J K J L H I H I J K J M L N A
  B A B A B C F ~@16 H I H I J K J L H I H I ~@7
>`.pickRestart({
  A: "~@2 [eb4,ab4] ~@3 [eb4,ab4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~", // Ab5 Eb5
  B: "~@2 [gb3,b3] ~@3 [gb3,b3] ~@3 [b3,e4] ~@3 [b3,e4] ~", C: "~@2 [ab3,db4] ~@3 [ab3,db4] ~@3 [b3,e4] ~@3 [b3,e4] ~",
  D: "~@2 [ab3,db4] ~ [ab3,db4] ~ [ab3,db4] ~ [ab3,db4] ~ [ab3,db4] ~ [ab3,db4] ~ [ab3,db4] ~", // Db5
  E: "~@2 [bb3,db4,ab4] ~ [bb3,db4,ab4] ~ [bb3,db4,ab4] ~ [bb3,db4,ab4] ~ [bb3,db4,ab4] ~ [bb3,db4,ab4] ~ [bb3,db4,ab4] ~", // Bbm7
  F: "~@2 [bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~", // Eb5
  G: "[eb2,eb3,g3,eb4] ~ [eb2,eb3,g3,eb4] ~ [eb2,eb3,g3,eb4] ~ [eb2,eb3,g3,eb4] ~ [eb2,eb3,g3,eb4] ~ [eb2,eb3,g3,eb4] ~ [eb2,eb3,g3,eb4] ~ [eb2,eb3,g3,eb4] ~", // Eb
  H: "[e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~ [db4,e4,ab4] ~ [db4,e4,ab4] ~ [db4,e4,ab4] ~ [db4,e4,ab4] ~", // E Dbm
  I: "[db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~", // Gb
  J: "[e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~ [e4,ab4,b4] ~", // E
  K: "[eb4,ab4,b4] ~ [eb4,ab4,b4] ~ [eb4,ab4,b4] ~ [eb4,ab4,b4] ~ [eb4,ab4,b4] ~ [eb4,ab4,b4] ~ [eb4,ab4,b4] ~ [eb4,ab4,b4] ~", // Abm
  L: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~", // Eb
  M: "[eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~", // Ebm
  N: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2!4",
})).s("gm_clavinet").gain(0.15)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@17 A ~@17 A ~@7 A ~@42 B ~@41 A ~>".pickRestart({
  A: "x!3 ~@13", B: "~ x ~@6",
})).gain(0.24)

// drums · clap
const clap = s("cp").struct("<A@2 ~@8 A@24 ~@10 A@8 ~@17 A@7 B A@9 ~ A@8 ~@16 A@7 B A@8 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@9 [~@7 x] ~@23 [~@3 x] ~@96>").gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@7 B ~@58 B ~@41 B ~@11>".pickRestart({
  A: "~@3 x!4 ~", B: "~@5 x ~ x",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~@8 B@8 ~ A ~@3 A ~@3 A ~@3 A ~@2 C ~@9 B@8 ~@17 B@17 ~ B@8 ~@16 B@12 ~ A ~@5
>`.pickRestart({
  A: "x!4", B: "~ x ~ x ~ x ~ x", C: "x",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@17 [~@3 x!2 ~@3] ~@58 [~@3 x!2 ~@3] ~@41 [~@3 x!2 ~@3] ~@11>").gain(0.48)

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

// drums · ride
const ride = s("rd").struct("<~@65 A@2 B A ~@34 A@6 B A ~@19>".pickRestart({
  A: "x!4", B: "~@2 x!2",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@2 ~@8 B@7 ~ A@16 ~@10 B@8 ~@17 B@17 ~ B@8 ~@16 B@12 C A@3 ~@3>".pickRestart({
  A: "x!8", B: "~@2 x!2 ~ x!2 ~@3 x!2 ~ x!2 ~", C: "~ x!7",
})).gain(1.62)

// drums · shaker
const shaker = s("sh").struct("<A@2 ~@8 B@7 ~ A@16 ~@10 B@8 ~@17 B@17 ~ B@8 ~@16 B@12 A@4 ~@3>".pickRestart({
  A: "x!8", B: "~@2 x!2 ~ x!2 ~@3 x!2 ~ x!2 ~",
})).gain(0.32)

stack(
  bass, bass_soft, marimba, string_ensemble_2, string_ensemble_2_soft, lead_2_sawtooth, piano, clavinet, kick, snare,
  snare_soft, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, cabasa, shaker
)

More by Eiffel 65