Strudelify

Arcobaleno

Celentano

KeyD minorTempo123 bpm
0:00/0:00
// Arcobaleno — Celentano
// 123 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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
const piano = note(`<
  ~@5 A@2 ~ B@2 C D ~@9 E@2 ~@2 F@2 G ~@21 A@2 ~ B@2 C D ~@9 A@2 ~ B@2 C D ~@13 E@2 ~@2 F@2 G ~ F@2 G ~ F@2 G ~@4
>`.pickRestart({
  A: "[~@5 [e2,e3] g2 [bb2,bb3]@4 [a2,a3]@5, ~@12 g3 ~@19]/2", B: "[~@10 [a2,a3]@2 [d3,d4]@2 [e3,e4]@17 ~]/2",
  C: "[d3,d4] [db3,db4]", D: "[d3,d4]@15 ~", E: "[~@10 e3@2 g3 ~ bb3@8 a3@10]/2",
  F: "[~@10 ab3@2 b3@2 d4@9 ~ db4@7 ~]/2", G: "d4@3 ~",
})).s("gm_piano").gain(0.62).pan(0.3)

// other · piano · soft notes
const piano_soft = note("<~@101 A@2 B>".pickRestart({
  A: "[~@10 ab3@2 b3@2 d4@9 ~ db4@7 ~]/2", B: "d4@3 ~",
})).s("gm_piano").gain(0.21).pan(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A@2 B C D E F C A@2 B C D E F C A@2 B C D E F C G@3 H@3 I J K L I J A@2 B C D E F C A@2 B M D E F C A@2 B C D E F
  C A@2 B C D E F C G@3 N@3 I K@2 L I K A@2 B C D E F C D E F C D E ~@6
>`.pickRestart({
  A: "[[f3,a3] [g3,bb3], d4@31 ~]/2", B: "f4 e4, [g3,a3,db4]", C: "e4 d4, [f3,a3]", D: "[f3,a3,d4]", E: "[ab3,b3,e4]",
  F: "f4@7 ~ e4@8, [g3,a3,db4]", G: "[d4 eb4 d4, [a3,c4,gb4]]/3", H: "[g4 gb4 f4, [bb3,d4]@47 ~]/3", I: "[g3,a3,db4]",
  J: "[a3,d4,f4]@15 ~", K: "[a3,d4,f4]", L: "[ab3,b3,d4,e4]", M: "e4@7 ~ d4@8, [f3,a3]",
  N: "[g4@15 ~ gb4@16 f4@16, [bb3,d4]@47 ~]/3", // Bb
})).s("gm_synth_strings_1").gain(0.29)

// chords · synth strings 1 · soft notes · A7 F Dm E A7 F
const synth_strings_1_soft = note(`<
  ~@98
  [f4@7 ~ e4@8, [g3,a3,db4]]
  [e4 d4, [f3,a3]]
  [[f3,a3,d4]]
  [[ab3,b3,e4]]
  [f4@7 ~ e4@8, [g3,a3,db4]]
  [e4 d4, [f3,a3]]
>`).s("gm_synth_strings_1").gain(0.12)

// bass · electric bass finger
const bass = note(`<
  ~@4 A B C D E B F G A H C I E J C K A H C I E L C K M N O P Q R S T U V W X A H C I E J C K A B C D E B F G A H C I E
  J C K A B C D E B F G M N Y P Q R S T U V W X A H C I E J C K E J C K E J Z ~@5
>`.pickRestart({
  A: "d1@13 ~ d1@2", B: "e1@13 ~ e1@2", C: "a1@13 ~ a1@2", D: "d1@7 d2", E: "c2@13 ~ c2@2", F: "a1!2", G: "d1@8 d1@7 ~",
  H: "e1@15 ~", I: "d2", J: "b1", K: "d1@11 ~ a1@2 d2@2", L: "b1@15 ~", M: "gb1@7 gb1", N: "eb2 eb1", O: "d2@5 d2@3",
  P: "g1@5 d2 g2@2", Q: "gb2@5 d2@2 gb2", R: "f2@5 d2@2 f2", S: "e2@4 a1@3 a1", T: "d1@5 d1 a1 d2", U: "c2@7 c2",
  V: "b1@7 b1", W: "a1@7 a1", X: "d2@3 d1@3 a1 d2", Y: "d2@5 d1@3", Z: "a1@13 ~@3",
})).s("gm_electric_bass_finger").gain(0.5)

// bass · electric bass finger · soft notes
const bass_soft = note("<~@98 [~@7 a1] [d1@11 ~ a1@2 d2@2] [c2@13 ~ c2@2] b1 [a1@13 ~ a1@2] [d1@11 ~ a1@2 d2@2]>")
  .s("gm_electric_bass_finger").gain(0.19)

// chords · epiano1
const epiano1 = note(`<
  ~@4 A B C A D E F G A B C A D E F G A B C A D E F G H I J K L M N O P Q N R A B C A D E F G A B C A D E F G A B C A D
  E F G A B C A D E F G H I J K L M N O P Q N R A B C A D E F G D E F G D E F ~@5
>`.pickRestart({
  A: "~@4 [f3,a3,d4] ~@5 [f3,a3,d4] ~@5", B: "~@4 [g3,bb3,d4] ~@5 [g3,bb3,d4] ~@5",
  C: "~@4 [g3,a3,db4] ~@5 [g3,a3,db4] ~@5", D: "~@4 [a3,c4] ~@5 [a3,c4] ~@5", E: "~@4 [e3,ab3,b3] ~@5 [e3,ab3,b3] ~@5",
  F: "~@4 [a3,db4,f4] ~@5 [a3,db4,f4] ~@5", G: "~@4 [f3,a3,e4] ~@5 [f3,a3,d4] ~@3 [f3,a3,d4] ~",
  H: "~@4 [c4,d4] ~@5 [c4,d4,gb4]@3 ~@3, ~@2 gb4 ~@5", I: "~@4 [c4,eb4] ~@5 [c4,eb4,gb4]@3 ~@3, ~@2 gb4 ~@5",
  J: "~@4 [c4,d4] ~@5 [c4,d4,gb4]@2 ~@4, ~@2 gb4 ~@5", K: "~@4 [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@3 ~@3",
  L: "~@2 [bb3,d4,gb4] ~@2 [bb3,d4,gb4] ~@2", M: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2",
  N: "~@2 [a3,db4,g4] ~@2 [a3,db4,g4] ~@2", O: "~@2 [d4,f4] ~@2 [a3,d4,f4] ~@2, ~@4 a3 ~@11",
  P: "~@2 [c4,f4] ~@2 [c4,f4] ~@2, ~@4 a3 ~@5 a3 ~@5", Q: "~@2 [ab3,b3,e4] ~@2 [ab3,b3,e4] ~@2",
  R: "~@4 [d4,f4]@2 ~@4 [a3,d4,f4]@3 ~@3, ~@4 a3 ~@11", // Dm
})).s("gm_epiano1").gain(0.51).pan(0.7)

// chords · epiano1 · soft notes · Fmaj7 Dm Am E Aaug Fmaj7 Dm
const epiano1_soft = note(`<
  ~@99
  [~@4 [f3,a3,e4] ~@5 [f3,a3,d4] ~@3 [f3,a3,d4] ~]
  [~@4 [a3,c4] ~@5 [a3,c4] ~@5]
  [~@4 [e3,ab3,b3] ~@5 [e3,ab3,b3] ~@5]
  [~@4 [a3,db4,f4] ~@5 [a3,db4,f4] ~@5]
  [~@4 [f3,a3,e4] ~@5 [f3,a3,d4] ~@3 [f3,a3,d4] ~]
>`).s("gm_epiano1").gain(0.17).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@28 A B C D E F G@2 H I J K ~@8 L M N O P Q R S ~@8 L M N O P Q R S T U V@2 W X Y@2 Z AA AB AC ~@20
>`.pickRestart({
  A: "c5@3 a4", B: "c5", C: "a4 d5", D: "bb4@4 g4@2 bb4 c5", E: "d5@5 a5@3", F: "bb5@3 d5",
  G: "[db5@10 g5@5 f5@12 f5@2 ~ g5@2]/2", H: "a5", I: "ab5", J: "g5", K: "f5@3 e5@3 d5@2", L: "f5@3 bb5, bb4",
  M: "[a4,a5]", N: "g5@12 g5@3 ~", O: "g5 f5", P: "f5@3 a4@3 f5@2", Q: "e5", R: "~ bb4 a4 f5", S: "e5@8 d5@7 ~",
  T: "[c5,a5]@11 ~ [a4,d5]@4", U: "c5@3 g5",
  V: "[a4@8 ~@4 c6@3 ~ bb4@8 g4@4 [bb4,bb5]@2 [c5,c6]@2, gb5@15 bb5@12 ~@5, ~ d5 ~@2]/2", W: "[d5,d6]@5 a5@3",
  X: "g5@6 g5 a5, ~@3 d5", Y: "[[db5,bb5]@11 e5@4 f5@9 ~ a4@2 f5@2 ~ g5@2]/2", Z: "f5@3 d5, a5", AA: "e5 d5, ab5",
  AB: "db5 a4, g5", AC: "f5@3 e5@3 d5@2, d5@11 ~@5",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.4)

// chords · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@4 A@2 B@4 C D ~@16 E@3 F@3 G H@2 I J K L M N O@2 P@2 Q R@2 S@4 T D ~ U@2 V W X Y Z R@2 AA@4 T D AB@3 F@3 G AC@2 I J
  K ~ U@2 AD ~ AE Y AF ~ AE Y AF ~ AE Y AF ~ AE Y AF
>`.pickRestart({
  A: "[[bb3,bb4] [a3,a4], d4]/2", B: "[db4@2 e4 [f3,f4]@3 [e3,e4]@2, [g3,g4]@3 d4@5]/4", C: "[f3,f4] [e3,e4]",
  D: "[e3,e4] [d3,d4], a3", E: "[d4 eb4 [c4,d4], gb4@47 ~, c4@2 ~]/3", F: "[g4 gb4 f4, [bb3,d4]]/3",
  G: "g4 e4, [a3,db4]", H: "[[d4,f4]@11 ~ e4@2 ~@2 d4@15 ~, a3@31 ~, ~@14 f4@17 ~]/2", I: "[ab3,d4,e4]",
  J: "[g3,a3,db4]", K: "[a3,d4,f4]", L: "a4", M: "g4@5 d4@3", N: "db4@15 ~",
  O: "[e4@8 ~@8 a4@15 ~, a3 ~, ~@8 d4@23 ~]/2", P: "[b4@4 db5@2 a4 g4, e4]/2", Q: "e4@4 d4 e4 f4 a4",
  R: "[bb3 a3, d4]/2", S: "[db4@2 e4 [f3,f4]@3 [e3,e4]@2, [g3,g4]@23 ~ d4@40]/4", T: "[f3,f4]",
  U: "[~@5 e3 g3 bb3@4 a3@5]/2", V: "e4@3 d4@5", W: "a3@7 ~ c3@8", X: "b2@9 ~ ab3@2 b3@2 d4@2", Y: "d4 db4",
  Z: "a3@4 d4 e4 f4 a4", AA: "[db4@15 ~ e4@8 [f3,f4]@24 [e3,e4]@16, [g3,g4]@3 d4@5]/4",
  AB: "[d4@16 eb4@16 [c4,d4]@15 ~, gb4@47 ~, c4@2 ~]/3", AC: "[[d4,f4]@12 e4@2 ~@2 d4@15 ~, a3@31 ~, ~@14 f4@17 ~]/2",
  AD: "e4@6 d4@9 ~", AE: "~@10 ab3@2 b3@2 d4 ~", AF: "e4@8 d4@7 ~",
})).s("gm_string_ensemble_1").gain(0.32)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B@2 ~@5
>`.pickRestart({
  A: "x ~@6 x", B: "x",
})).gain(0.76)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@98 [~@7 x] x [x ~@6 x] x [x ~@6 x] x>").gain(0.31)

// drums · snare
const snare = s("sd").struct("<~@28 [~ x]!71 ~@5>").gain(0.61)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@99 [~ x]!5>").gain(0.23)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@4 A B C B C B C B A B C B C B C B A B C B C B C B A B C B C B C B C B C B A B C B C B C B A B C B C B C B A B C B C
  B C B A B C B C B C B A B C B C B C B C B C B A B C B C B C B C B C B C B C B C B C B
>`.pickRestart({
  A: "~ x!7", B: "x!7 ~", C: "x!8",
})).gain(0.46)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@7 x",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@7 A ~@7 A ~@7 A ~@11 A ~@7 A ~@7 A ~@7 A ~@7 A ~@11 A ~@19>".pickRestart({
  A: "x",
})).gain(0.46)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@5 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
})).gain(0.23)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 [~ x ~ x ~ x ~ x]!100>").gain(1.55)

// drums · shaker
const shaker = s("sh").struct("<~@4 [x ~ x ~ x!3 ~]!92 [~@2 x ~ x!3 ~] [x ~@4 x ~@2] [~@5 x ~@2]!2 ~@4>").gain(0.46)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@96 x [~ x!3] [x!4]!2 [x ~ x ~ x!3 ~]!4>").gain(0.15)

stack(
  piano, piano_soft, synth_strings_1, synth_strings_1_soft, bass, bass_soft, epiano1, epiano1_soft, string_ensemble_1,
  string_ensemble_1_2, kick, kick_soft, snare, snare_soft, pedal_hat, open_hat, crash, tambourine, cabasa, shaker,
  shaker_soft
)

More by Celentano