Strudelify

L'azzurro

Suzanne Ciani

KeyA majorTempo55 bpm
0:00/0:00
// L'azzurro — Suzanne Ciani
// 55 bpm, 6/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 91 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(55/3)

// 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("<~@24 A B C D E ~@12 F G H I J ~@31 K L M N K L M N K L O P ~@2>".pickRestart({
  A: "a4 e5 a5 a4", B: "b4@3 b5@3 b5@3 a5@2 g#5", C: "c#5@2 [c#6,e6] [a5,c#6]", D: "d6 f#5 ~ f#5 ~ b5, ~ b5 ~",
  E: "a5 g#5", F: "a3 e4 a4 a3", G: "b3@3 b4@3 b4@3 a4@2 g#4", H: "c#4@2 [c#5,e5] [a4,c#5]",
  I: "d5 f#4 ~ f#4 ~ b4, ~ b4 ~", J: "a4 g#4", K: "e6 b5 e6 b6 e6 b5 e6 b5 e6 ~ f#6 g#6, ~@9 a6@2 ~",
  L: "a6 e6 a6 e7 a6 e6 ~ e6 a6 e7 e6 a6, a5@3 e6@2 ~ a6@2 ~@4",
  M: "f#6 c#6 f#6 c#7 f#6 c#6 f#6 c#6 f#6 a6 f#6 c#6, a5 e6!2 ~",
  N: "[a5,d6] a5 d6 a6 d6 a5 d6 a5 d6 a6 d6 a5, ~ e6 a6 ~", O: "a5 e6!2 ~", P: "a5 ~@2 e6@3 a6@3 ~@3",
})).s("gm_piano").gain(0.31)

// other · piano · soft notes
const piano_soft = note(`<
  ~@76
  [d6 a5 d6 a6 d6 a5 d6 a5 d6 a6 d6 a5]
  ~@10
  [f#6 c#6 f#6 c#7 f#6 c#6 f#6 c#6 f#6 a6 f#6 c#6]
  [d6 a5 d6 a6 d6 a5 d6 a5 d6 a6 d6 a5]
  [e6 b5 e6 b6 e6 b5 e6 b5 e6 ~ f#6 g#6, ~@9 a6@2 ~]
  [a6 ~@11]
>`).s("gm_piano").gain(0.15)

// chords · synth strings 2
const synth_strings_2 = note(`<
  A B@3 A B@3 A B@3 A C@3 D E F G D E F G H I J K L D E F G D E F G D E F G H I J K L D E F G D E F G D E F G D M N O P
  Q@3 P R@3 S T@2 U V W X Y Z@2 ~@11
>`.pickRestart({
  A: "[e3,a3] e4 a4@2", B: "[[f#3,a3]@3 ~@9 d3@3 a3@3 a3@3 a3@3 e3@8 ~@4, ~@3 e4@11 ~ e4@21, ~@3 d3 ~@2]/3",
  C: "[[f#3,a3] ~@3 d3 a3!3 e3@4, ~@3 e4@11 ~ e4@21, ~@3 d3 ~@2]/3", D: "[a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~", E: "f#2 ~@2",
  F: "d2 a2 a3 a2, ~ d3", G: "e3", H: "[a2,e3,a3]@2 ~@3 [a2,e3,a3]", I: "[b2,e3,b3]@2 ~@3 [b2,e3]",
  J: "[c#3,a3,c#4]@2 ~@3 [c#3,c#4]", K: "[d3,d4]", L: "e3@2 ~", M: "[f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@2 ~",
  N: "[d2,a2,d3]@2 ~ [d2,a2,d3]@2 ~", O: "[e2,b2,e3]@2 ~ [e2,b2,e3]@2 ~", P: "[a2,e3,a3]@3 e4@3 [a2,e3,a3]@4 ~@2, ~ a4",
  Q: "[[f#2,c#3,f#3,a3]@3 ~@3 [f#2,c#3,f#3]@4 ~@2 [d2,a2,d3]@3 a3@3 [d2,a2,d3,a3]@3 a3@3 [e2,b2]@4 ~@8, ~@3 e4@11 ~ e4@21, ~@6 e3@2 ~]/3", // F#m F#5 D5 E5
  R: "[[f#2,c#3,f#3,a3]@3 ~@3 [f#2,c#3,f#3]@4 ~@2 [d2,a2,d3]@3 a3@3 [d2,a2,a3]@3 a3@3 [e2,b2]@4 ~@8, ~@3 e4@11 ~ e4@21, ~@9 d3@3 e3@4 ~@2]/3", // F#m F#5 D5 E5
  S: "~@3 a3 b3 a3 b3@4 ~ a3", T: "e4@4 ~ a3 a3@4 ~ a3", U: "a3@4 b3 c#4 b3@4 a3 g#3", V: "~@5 b3, a3",
  W: "~ a3@9 b3@2", X: "~ a3@9 a3@2", Y: "a3@2 g#3 f#3@2 e3", Z: "a3/2",
})).s("gm_synth_strings_2").gain(0.41)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@12 A@2 ~@2 B@2 C@2 A@2 ~@2 D E F@3 G B C@2 B@2 C@2 B@2 H@2 I J K L M G B C@2 B@2 C@2 B@2 H@2 B@2 C@2 A@2 ~@2 A@2 ~@2
  N@4 O@2 ~@15
>`.pickRestart({
  A: "[a4@3 e5@3 a5@16 ~@2]/2", B: "e4@3 e4@8 ~", C: "[e4 e4@7]/2", D: "[e4,a4] e5 a5 a4, ~@3 e4@8 ~",
  E: "[e4,b4]@3 b5@3 b5@3 a5@2 g#5, ~@3 e4@8 ~", F: "[~@6 e6@3 c#6@3 d5@12 b4@10 a4 g#4, c#5 ~@5, ~ e4@11]/3",
  G: "e4@3 e4@8 ~, a4", H: "[e4 ~@3 a4 b4!2 a4, ~ e4@7]/2", I: "a4 e5 a5 a4", J: "b4@3 b5@3 b5@3 a5@2 g#5",
  K: "~ c#4@2 a4, c#5 ~", L: "[d4,b4] f#5 f#4 b3 ~ c#5, ~ d4@3 d4@2, ~ b5@2", M: "a5@6 ~@4 a4 g#4, ~ g#5",
  N: "[~@15 e5@3 ~@12 a5@8 ~@10, a4@6 a5@8 ~@4 e5@8 ~ e5@6 ~@15, ~ e5@2 ~ a4@2 ~@2 a4@2 ~@6]/4",
  O: "[~@3 a5@4 ~@5, a4 ~@3, ~ e5@2 ~@5]/2",
})).s("gm_string_ensemble_1").gain(0.2)

// other · kalimba
const kalimba = note("<~@20 A B C D ~@9 A B C D A B C E ~@5 A B C D A B C D A B C E A B C E F ~@28>".pickRestart({
  A: "a3 a3@3 a3@3 a3@3 a3@2", B: "~ a3@3 b3@3 b3@3 ~@2", C: "~ a3@3 a3@3 e4@3 a3@2", D: "~ a3@3 g#3@3 f#3@3 e3@2",
  E: "a3 a3@3 g#3@3 f#3@3 e3@2", F: "a3 ~@3",
})).s("gm_kalimba").gain(0.41)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@16 A B A ~ C D E F ~@5 A B A ~ C D E F C D E G ~@5 C D E F C D E F C D E G C D E G H ~@28
>`.pickRestart({
  A: "~ e4 a4 e4", B: "~ e4!2 ~", C: "a3 a3@2 ~ a3@2 ~ a3@2 ~ a3@2, ~ e4 a4 e4",
  D: "~ a3@2 ~ b3@2 ~ b3@3 ~@2, ~ e4!2 ~", E: "~ a3@2 ~ a3@2 ~ e4@2 ~ a3@2, ~ e4 a4 e4", F: "~ a3@3 g#3@3 f#3@3 e3@2",
  G: "a3 a3@3 g#3@3 f#3@3 e3@2", H: "a3 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.41)

// other · koto
const koto = note("<~@16 A B A ~ A B A ~@6 A B A ~ A B A ~ A B A ~@6 A B A ~ A B A ~ A B A ~ A B A ~@30>".pickRestart({
  A: "~@3 e4@2 ~ a4@2 ~ e4@2 ~", B: "~@3 e4@2 ~ e4@2 ~@4",
})).s("gm_koto").gain(0.31)

// other · pan flute
const pan_flute = note(`<
  ~@24 A B C D E F G H I J K L M ~@4 A B C D E N@2 O P J K L M Q R S T U V ~@2 W V ~@27
>`.pickRestart({
  A: "a4 e5 a5 a4", B: "b4@3 b5@3 b5@3 a5@2 g#5", C: "c#5@2 e6 c#6", D: "d6 f#5 b5@4", E: "a5 g#5", F: "a5",
  G: "c#6@9 b5@2 a5", H: "a5@3 d5@6 ~ e5@2", I: "f#5@3 g#5@3 f#5@3 e5@2 e6", J: "e6@4 c#6@5 c#6 d6 e6",
  K: "e6@3 d6 c#6 a5 e5@6", L: "f#5 g#5 a5 a5@6 c#5 d5 e5", M: "f#5 g#5 a5!2 b5@2 a5@3 a5@2 g#5",
  N: "[a5@3 e5 f#5 g#5 a5 b5 c#6 c#6@12 b5 a5 g#5, ~@2 f#5 a5 ~@4]/2", O: "a5 b4!2 c#5 d5@6 e5 f#5",
  P: "[d5,f#5]@3 [e5,g#5]@3 [d5,f#5]@3 [c#5,e5]@2 e6", Q: "a5@2 ~ [a4,c#5]@3 [a5,c#6]@2 [f#5,a5]@2 e5@2",
  R: "f#5 g#5 a5 a5@3 [f#5,a5]@2 [a5,c#6]@2 [c#6,e6]@2, c#5 f#5 ~@4", S: "d6@3 a5 f#5@2 a5@2 [b4,d5] e5 f#5@2, ~@3 c#5",
  T: "[d5,f#5]@3 [e5,g#5]@3 [d5,f#5]@2 a5@2 g#5@2", U: "a5@6 g#5@4 f#5 g#5", V: "c#5", W: "~@10 f#5 g#5",
})).s("gm_pan_flute").gain(0.31)

// other · cello
const cello = note("<~@24 A B C D E F G H I J ~ K L M ~@3 A B N O P Q G R I J ~ K L M S T U ~@33>".pickRestart({
  A: "a1@5 a1", B: "b1@5 b1", C: "c#2@4 ~ c#2", D: "d2@4 ~ d2", E: "e2!2", F: "e3@11 e4, e2@2 ~", G: "e4@9 d4@2 c#4",
  H: "a3@3 e3@7 f#3 g#3", I: "a3@3 b3@3 b3@3 a3@2 g#3", J: "a3", K: "~@9 g#3 b3 c#4",
  L: "d4 e4 f#4@2 g#4@2 f#4@3 e4@2 c#4", M: "c#4 ~", N: "~@3 c#4@6 ~ c#2@2, c#2@8 ~ a4@3",
  O: "b4 d4 f#4 b3 d4 d2, d2@2 ~", P: "~ d3 e3 f#3 g#3 a3 b3 c#4 d4 d4@3, e2!2", Q: "e3@11 e4", R: "a3@2 e3@8 f#3 g#3",
  S: "c#4@2 c#4!2 e4 a4", T: "~@3 d4 a3@2 ~@2 a3 b3 c#4@2, f#4 ~", U: "d4 e4 e4@2",
})).s("gm_cello").gain(0.31)

// chords · timpani
const timpani = note("<~@24 A B C D E F@12 A B C D E F@20 ~@25>".pickRestart({
  A: "a#2@4 ~ [a2,a#2]", B: "[a2,b2]@4 ~ [a2,b2]", C: "[b2,c#3]@4 ~ [a2,a#2]", D: "[a2,b2]@4 ~ [a2,a#2]",
  E: "[a2,b2]@2 ~", F: "a#2@2 ~",
})).s("gm_timpani").gain(0.41)

// other · woodblock
const woodblock = note(`<
  ~@12 A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A ~@33
>`.pickRestart({
  A: "~@3 [c5,c6]@2 ~@7", B: "~ [c5,c6]@2 ~@6 [c5,c6]@2 ~", C: "~@7 [c5,c6]@2 ~@3",
})).s("gm_woodblock").gain(0.2)

// drums · rim
const rim = s("rim").struct(`<
  ~@16 A B C A D E F D E F D E F D E F D E F D E F D E F D E F D E F D E F D E F D E F D E ~@33
>`.pickRestart({
  A: "~ x ~@7 x ~@2", B: "~@7 x ~@4", C: "~ x ~@2", D: "~@2 x ~@4 x ~@4", E: "~@2 x!2 ~@8", F: "~ x!2 ~@6 x ~@2",
})).gain(0.26)

// drums · china
const china = s("cr").struct("<~@21 [~ x ~@4]!38 ~@32>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@16 A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C ~@33
>`.pickRestart({
  A: "~ x ~@7 x ~@2", B: "~@7 x ~@4", C: "~ x ~@2",
})).gain(1.04)

stack(
  piano, piano_soft, synth_strings_2, string_ensemble_1, kalimba, acoustic_guitar_nylon, koto, pan_flute, cello,
  timpani, woodblock, rim, china, cabasa
)

More by Suzanne Ciani