Strudelify
Nella mia citta cover art

1999 · Sirtaki

Nella mia citta

Mango

KeyD majorTempo116 bpm
0:00/0:00
// Nella mia citta — Mango
// 116 bpm, 4/4, key D major. 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(116/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.

// chords · string ensemble 1 · "nellamia"
const string_ensemble_1 = note(`<
  ~@24 A@2 ~@3 B@3 C D@2 E@2 F G@2 H@2 I J@2 K L M N@3 O@2 P@2 Q R S@8 T@2 U@4 ~@6 A@2 ~@3 B@3 C D@2 E@2 F G@2 H@2 I J@2
  K L M N@3 O@2 P@2 Q R V@2 W X Y Z AA I J@2 K L M N@3 O@2 AB ~
>`.pickRestart({
  A: "[b4@3 a4@3 b4@3 a4@3 d5@2 a4@2]/2", B: "[b4@3 a4@3 d5@5 b4@13]/3", C: "a4", D: "d4/2",
  E: "[b3 e4 [g4,b4]@4 b4@2, e5 ~@3]/2", F: "a4@4 d4@11 ~, d5", G: "[c4 a4@7, e5]/2", H: "[g4@2 e4 b3 d4@2 g4@2, g5]/2",
  I: "f#4 a4, f#5", J: "[~ e4 b3 d4, e5, c5 ~]/2", K: "[f#4,d5]", L: "[e4,e5]", M: "[g4,b4]",
  N: "[d5@2 ~@2 a4 c5, a4@2 ~, ~ e5@2]/3", O: "[b4,g5]/2", P: "[a4,a5]/2", Q: "e5@3 d5 e5@4, b4", R: "d4 b3, d5",
  S: "[[d4,e4]@2 ~ b4 ~@7 b4 ~@2 f#4@2, e3, a3 e4, f#4@32 d4@24 f#4@55 ~@17, ~@16 e4@17 ~@15 g4@32 d4@16 [b3,d4]@32]/8", // Dsus2 Bm
  T: "[~@7 [e5,e6], g4@4 e5 [a4,a5] [d5,d6]@2, [b3,b4]@3 [b3,b4]@5, ~ d4@3, ~ e4]/2", // E A D B
  U: "[~@7 b4@4 a4@12 d5@4 b4@3 a4@2]/4", V: "[e2 g2, g3]/2", W: "[d2,f#3]", X: "a2@2 b2 c3", Y: "e3", Z: "e2",
  AA: "d4 g4", AB: "[a4,a5]",
})).s("gm_string_ensemble_1").gain(0.19)

// bass · electric bass finger
const bass = note(`<
  ~@9 A B C D@2 E F@2 G E H@2 I@2 J K L K E H@2 I@2 J K M N O M P Q R O K S T U V W E X Y N O K P Z AA ~@9 AB E F@2 G E
  H@2 I@2 J K L K E H@2 I@2 J K M N O M P Q R O K S T U V W E X Y N O K P Z AA ~@6 O K S T U V W E X Y N O K ~
>`.pickRestart({
  A: "e1", B: "g1", C: "d1", D: "a1/2", E: "d1@4 ~@2 d1 ~ d1@4 ~@2 d1 ~",
  F: "[d1@4 ~@2 d1 ~ d1@2 ~ d1 c1@2 d1@6 ~@2 d1 ~ d1@5 ~ d1 ~]/2", G: "d1@4 ~@2 d1 ~ d1@2 ~ d1 c1@2 d1@2",
  H: "[d1@4 ~@2 d1 ~ d1@2 ~ d1 c1@2 e1@6 ~@2 e1 ~ e1@4 ~@2 e1 ~]/2",
  I: "[e1@4 ~@2 e1 ~ e1@2 ~ e1 d1@2 g1@6 ~@2 g1 ~ g1@4 ~@2 g1 ~]/2", J: "f1@5 ~ f1 ~ c2 ~ f1@5 ~",
  K: "d1@5 ~ d1 ~ d1@5 ~ d1 ~", L: "d1@5 ~ d1 ~ d1@2 ~ d1 c1@2 d1@2", M: "d1@4 ~@2 d1 ~ d1@5 ~ d1 ~",
  N: "e1@4 ~@2 e1 ~ e1@5 ~ e1 ~", O: "g1@4 ~@2 g1 ~ g1@5 ~ g1 ~", P: "a1@4 ~@2 a1 ~ a1@5 ~ a1 ~",
  Q: "a1@7 ~ a1 ~ a1@4 g1 ~", R: "e1@5 ~ e1 ~ e1@5 ~ e1 ~", S: "a1@5 ~ a1 ~ a1@5 ~ a1 ~",
  T: "b1@4 ~@2 b1 ~ b1@5 ~ b1 ~", U: "b1@5 ~ b1!2 f#2@2 b1@2 d2@4", V: "e1@4 ~@2 e1 ~ e1@4 ~@2 e1 ~",
  W: "g1@4 ~@2 g1 ~ g1@4 ~@2 g1 ~", X: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~", Y: "a1@6 ~@2 a1 ~ a1@4 g1 a1",
  Z: "b1@4 ~@2 b1 ~ b1@4 ~@2 b1 ~", AA: "b1@5 ~ b1!2 f#2@2 b1@2 d2@3 ~", AB: "~ e2, e1@11 ~@5",
})).s("gm_electric_bass_finger").gain(0.54)

// bass · ocarina
const bass_2 = note("<~@57 A@2 B@4 C@2 D ~@44 D E F G@2 D ~@14>".pickRestart({
  A: "e2/2", B: "[g1@63 ~]/4", C: "g1/2", D: "e2", E: "g1", F: "d2", G: "a1/2",
})).s("gm_electric_bass_finger").gain(0.47).pan(0.3)

// other · tubular bells
const tubular_bells = note("<~@35 A B C D ~@7 A B C D ~@38 A B C D ~@7 A B C D ~@18 A B C D ~@5>".pickRestart({
  A: "e6 ~@5 d6 ~ b5 ~@5 d6 ~", B: "e6 ~ f#6 ~ e6 ~ d6 ~ b5 ~@7", C: "f#6 ~@3 d6 ~@3 a6 ~@3 d6 ~@3", D: "c6 ~@15",
})).s("gm_tubular_bells").gain(0.27).pan(0.2)

// other · shakuhachi
const shakuhachi = note("<~@58 A B C D E F G@3 ~@63>".pickRestart({
  A: "~ d5 e5 f#5 a5@4", B: "g5@8 f#5@6 g5 f#5", C: "e5 ~", D: "~ a4 b4 c#5 b4 a4 b4 c#5", E: "b4 e5", F: "d5, e5 ~@15",
  G: "[c#5 b4]/3",
})).s("gm_shakuhachi").gain(0.15).pan(0.9)

// chords · piano
const piano = note("<A@2 B@2 C@2 D@2 E C@2 D@2 E ~@116>".pickRestart({
  A: "[~@6 f#4@25 ~, e3@31 ~, ~@2 b3@29 ~, ~@4 e4@27 ~]/2", B: "[~@3 f#4@13, e3, ~ b3@15, ~ e4@7]/2",
  C: "[~@8 e5 ~@3 b4@4, [e3,e5]@15 ~ g3@15 ~, ~@2 b3@6 ~ f#5@7, ~@6 d5@7 ~ d5@5 ~ [d4,e5]@12, ~@4 b4@7 d5@5]/2", // E Dsus2
  D: "[~@13 c5@3, b4@11 b4@5, d3@8 ~ e4@7, ~ a3@3 a3@4, ~@8 a4@23 ~]/2", E: "~@3 g5, a3, ~ b4@7, ~ c5@3, ~@3 b5@2 a5@3",
})).s("gm_piano").gain(0.48).pan(0.3)

// chords · pad metallic
const pad_metallic = note("<A@2 B@2 C D@3 ~ C D@3 ~@117>".pickRestart({
  A: "[~@2 e5 f#5@13, e4@31 ~, ~ b4@15]/2", B: "[~@2 e5 f#5@13, e4, ~ b4@15]/2", C: "~@6 d5@2 ~@5 d5@2 ~, e4, e5 b4",
  D: "[e5 f#5 e5 ~@9 a4@12, d4 a3@2, ~@3 d5@5 ~@16, ~ b4@2 ~@3]/3",
})).s("gm_pad_metallic").gain(0.17).pan(0)

// other · kalimba
const kalimba = note(`<
  ~@14 A@6 B@2 A C A@5 B@2 A C A@2 B A@2 C@2 B A@2 C A@2 B A@2 C@2 B A@2 C D A ~@10 A@6 B@2 A C A@5 B@2 A C A@2 B A@2
  C@2 B A@2 C A@2 B A@2 C@2 B A@2 C D A ~@6 A@2 C A@2 B A@2 C@2 B A@2 ~
>`.pickRestart({
  A: "d3 ~ d4 ~ d4 ~ d3 ~ d4 ~ d4 ~ d3 ~ d4 ~", B: "e3 ~ e4 ~ e4 ~ e3 ~ e4 ~ e4 ~ e3 ~ e4 ~",
  C: "c3 ~ c4 ~ c4 ~ c3 ~ c4 ~ c4 ~ c3 ~ c4 ~", D: "[d3,e3] ~ d4 ~ d4 ~ d3 ~ d4 ~ d4 ~ d3 ~ d4 ~",
})).s("gm_kalimba").gain(0.17).pan(0)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@57 A B C D A B C D A B ~@63>".pickRestart({
  A: "~ a3 [b3,e4] ~ [b3,e4] [a3,d4] ~ [a3,d4], ~ d4@3 ~@2 [b3,e4]@2, ~@3 [c#4,f#4]@5", // E5 D5 E5 F#5
  B: "~@2 [b3,e4] ~ [b3,e4] [a3,d4] ~ [a3,d4], [f#3,b3]@2 ~ [c#4,f#4]@5, ~ [a3,d4]@3 ~@2 [b3,e4]@2", // E5 D5 B5 F#5 D5 E5
  C: "b3 [a3,d4] [b3,e4] c#4 [b3,e4] [a3,d4] ~ [a3,d4], ~@3 f#4@5, ~@3 [b3,e4]", // D5 E5 D5 E5
  D: "[f#3,b3] a3 [b3,e4] [c#4,f#4] d4 c#4 [b3,e4] [a3,d4], ~@2 d4@6 g4@7 ~, ~@5 f#4@3", // B5 E5 F#5 E5 D5
})).s("gm_acoustic_guitar_steel").gain(0.21).pan(0.2)

// chords · piano
const piano_2 = note(`<
  ~@4 A B C D@2 A B C D@2 E@6 F@2 B G H@3 E@2 F@2 B G E@2 A B C D@2 A B C I J@2 A B C D@2 A B C I J@2 F@2 ~@8 E@6 F@2 B
  G H@3 E@2 F@2 B G E@2 A B C D@2 A B C I J@2 A B C D@2 A B C I J@2 A B C K@3 B C I J@2 A B C D@2 A B E@2
>`.pickRestart({
  A: "[e3,g3,b3,e4]", B: "[g3,b3,d4,g4]", C: "[d3,f#3,a3,d4]", D: "[a3,c4,e4,a4]/2", E: "[d3,f#3,a3,d4]/2",
  F: "[e3,g3,b3,e4]/2", G: "[f3,a3,c4,f4]", H: "[d3,f#3,a3,d4]/3", I: "[a3,c4,e4,a4]", J: "[b3,d4,f#4,b4]/2",
  K: "[a3,c4,e4,a4]/3", // Am
})).s("gm_piano").gain(0.3)

// chords · pad warm
const pad_warm = note(`<
  ~@14 A@4 B@2 C@2 D E F@3 B@2 C@2 D E G@2 H@2 I J@2 K@2 L@2 M@2 N@2 I J@2 N@2 I O M@2 P@8 Q@2 A@4 B@2 C@2 D E F@3 B@2
  C@2 D E G@2 H@2 I J@2 K@2 L@2 M@2 N@2 I J@2 N@2 I O M@2 R@2 I S@3 T L@2 M@2 N@2 I J@2 N@2 I ~
>`.pickRestart({
  A: "[d4 e4 ~ a4, f#4, a3@3 ~, ~ d4]/4", B: "[a3,d4,f#4]/2", C: "[[b3,d4,e4,g4]@31 ~]/2", D: "[b3,d4,g4]",
  E: "[a3,c4,f4]", F: "[f#4@2 a3, [d4,e4]]/3", G: "[~ e4, [a3,d4,f#4]]/2", H: "[[b3,e4]@16 [b3,d4]@15 ~, g4]/2",
  I: "[a3,d4,f#4]", J: "[a3,c4,e4]/2", K: "[e4@16 d4@15 ~, [b3,g4]@31 ~]/2", L: "[[d4,f#4] [c4,e4], a3]/2",
  M: "[b3,d4,e4,f#4]/2", N: "[e4 d4, [b3,g4]]/2", O: "[a3,c4,e4]",
  P: "[[e4,f#4] ~@6 g4, e3, a3@47 e4@49 f#4@18 ~@14, d4@2 f#4@3 d4@3, ~ g4@3 b3@4]/8", Q: "[~ e4, f#4]/2",
  R: "[[b3,d4,g4]@31 ~, e4 ~]/2", S: "[a3@15 ~ a3@15 ~ [g3,b3]@16, e4, c4@31 ~@17]/3", T: "d4@15 ~",
})).s("gm_pad_warm").gain(0.17).pan(0)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@13 A ~@20 B ~@26 A ~@4 A ~@20 B ~@27 C ~@14>".pickRestart({
  A: "~@3 x", B: "~ x ~@4 x ~", C: "~@5 x ~@2",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@5 B A@3 C D E@2 F E@16 G ~@22 A@10 D E@2 F E@8 F E@7 G ~@42>".pickRestart({
  A: "x!8", B: "~ x!7", C: "x!6 ~@2", D: "~ x ~ x!3 ~ x", E: "x!2 ~ x!3 ~ x", F: "x!2 ~ x!3 ~@2", G: "x ~@2 x!3 ~ x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@13 A B@3 C B@16 D B@9 E F B@9 E F ~@4 A ~@4 G B@3 C B@8 C B@7 D B@9 E F B@9 E F ~@6 B@3 E F B@3 ~@6
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~@2 x ~ x ~@6 x!2 ~@3", E: "~ x!2 ~@2 x!2 ~", F: "~ x!2 ~@3 x ~",
  G: "~@4 x ~@6 x!2 ~@3",
})).gain(0.48)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@34 A ~@52 A ~@27 A ~@8 B@5 ~>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~ x",
})).gain(0.16)

// drums · high tom
const high_tom = s("ht").struct("<~@34 A ~@26 A ~@4 B ~@20 A ~@27 C ~@14>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@2 x!3 ~@5 x!2 ~@4", C: "~@6 x!2",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct(`<
  ~@35 A B@8 C D A B@8 C D ~@31 A B@8 C D A B@8 C D ~@6 E B@2 C D A B F G@4 ~@2
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x ~@2 x!2 ~@2 x", D: "x ~@2 x!3 ~ x", E: "x!2 ~ x!5", F: "x!3 ~ x ~ x ~", G: "x!4",
})).gain(0.32)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@123 [~@3 x ~ x ~ x] [~ x ~ x ~ x ~ x]!4 [x!8] ~>").gain(0.08)

// drums · china
const china = s("cr").struct(`<
  ~@9 A ~@3 B A ~@19 B A ~@9 B A ~@9 B A ~@9 A ~@19 B A ~@9 B A ~@9 B A ~@5 C ~@3 B A ~@8
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.48)

// drums · triangle
const triangle = s("triangles:35").struct("<~@57 [~@7 x] ~@4 [~@4 x ~ x!2] ~@2 [~@3 x] ~@64>").gain(2.09)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@61 [~@3 x] ~@68>").gain(1.04)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@59 [~@5 x ~@3 x ~@6] [~ x ~@14] ~@2 [~@3 x ~@4]!2 ~ x ~@63>").gain(1.43)

stack(
  string_ensemble_1, bass, bass_2, tubular_bells, shakuhachi, piano, pad_metallic, kalimba, acoustic_guitar_steel,
  piano_2, pad_warm, kick, snare, low_tom, hihat, mid_tom, mid_tom_soft, high_tom, ride, ride_soft, china, triangle,
  jingle_bells, bell_tree
)

More by Mango