Strudelify

L'altra madre

Fiorella Mannoia

KeyF majorTempo79 bpm
0:00/0:00
// L'altra madre — Fiorella Mannoia
// 79 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(79/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 · electric bass finger
const bass = note(`<
  A B C D E F G H I J K L M N O P Q J R S T U O P Q J R S V W X Y Z AA AB AC AD AE AF O P Q J R S V U O P Q J R S V W X
  Y Z AA AB AC AD AE AF ~ O P Q J R S T W X Y Z AA AB AC AD AE AF O P Q J R S V U O P Q J R S V U AG@2
>`.pickRestart({
  A: "f1@6 ~ c1 ~ c1 c1@5 ~", B: "f1@6 ~ c1 ~ c1 c1@3 b0 c1@2", C: "d1@6 ~ a1 ~ a1 a1@5 ~",
  D: "d2@6 ~ a1 ~ a1 a1@4 d2 ~", E: "c2@6 ~ g1 ~ g1 g1@5 ~", F: "c2@6 ~ g1@2 g1 g1@2 ~ e1@3",
  G: "f1@6 ~ c1@2 c1 c1@5 ~", H: "f1@6 ~ c1@2 c1 c1@3 b0 c1@2", I: "d1@6 ~ a1 ~ a1 a1@4 ~ a1",
  J: "d2@6 ~ a1 ~ a1 a1@4 d2 a1", K: "c2@6 ~ g1@2 g1 g1@5 g1", L: "c2@6 ~ g1 ~ g1 g1@4 d2 c2",
  M: "bb1@6 ~ f1 ~ f1 f1@4 ~ f1", N: "bb1@7 f1 ~ f1 f1@2 g1@4", O: "f1@6 ~ c1 ~ c1 c1@4 g1@2",
  P: "f1@6 ~ c1@2 c1 c1@3 c1 db1@2", Q: "d1@6 ~ a1 ~ a1 a1@4 c2 a1", R: "c2@6 ~ g1 ~ g1 g1@4 d2 g1",
  S: "c2@7 g1 ~ g1 g1@3 ~ g1 ~", T: "bb1@6 ~ f1 ~ f1 f1@5 ~", U: "bb1@6 ~ f1@2 f1 f1@2 c2@3 ~",
  V: "bb1@6 ~ f1@2 f1 f1@5 ~", W: "bb1@6 ~ bb1 c2@4 f1@4", X: "bb1 ~ bb1@5 bb1 d2@7 ~", Y: "c2@6 ~ c2 ~ c2 c2@2 f1@4",
  Z: "bb1@6 ~ bb1 d2@7 ~", AA: "c2@6 ~ g1 c1@4 a1@4", AB: "bb1@5 ~ c2 db2 d2 a1 d1@6", AC: "c1@5 ~ c1 db1 ~ c1 db1@5 ~",
  AD: "d1@5 a1 c2 a1 bb1@7 ~", AE: "c2 ~ c2@4 ~ c2 ~ bb1 g1@4 c1@2", AF: "c1 ~@7", AG: "f1/2",
})).s("gm_electric_bass_finger").gain(0.39)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@6 A@7 B@2 ~@24 A@7 B@2 ~@17 A@7 B@2 ~@8 C@16 D@2>".pickRestart({
  A: "[~@11 e3@3 f3@4 ~@9 e3@3 f3@4 ~@9 e3@3 f3@4 ~@9 e3@3 f3@4 ~@12 c3@4 ~@12 c3@4 ~@9 e3@3 f3@2, ~@3 a3@5 g3@6 ~@5 a3@5 g3@6 ~@5 a3@5 g3@6 ~@5 a3@5 g3@6 ~@5 a3@5 g3@10 ~ a3@5 g3@10 ~ a3@5 g3@6 ~@2, ~@6 f3@5 ~@11 f3@5 ~@11 f3@5 ~@11 f3@5 ~@11 f3@5 e3@7 ~@4 f3@5 e3@7 ~@4 f3@5 ~@5]/7",
  B: "[~@11 e3@3 f3@17 ~, ~@3 a3@5 g3@6 ~@18, ~@6 f3@5 ~@21]/2",
  C: "[~@11 e3@3 f3@4 ~@9 e3@3 f3@4 ~@9 e3@3 f3@4 ~@9 e3@3 f3@4 ~@12 c3@4 ~@12 c3@4 ~@9 e3@3 f3@4 ~@9 e3@3 f3@2, ~@3 a3@5 g3@6 ~@5 a3@5 g3@6 ~@5 a3@5 g3@6 ~@5 a3@5 g3@6 ~@5 a3@5 g3@10 ~ a3@5 g3@10 ~ a3@5 g3@6 ~@5 a3@5 g3@6 ~@2, ~@6 f3@5 ~@11 f3@5 ~@11 f3@5 ~@11 f3@5 ~@11 f3@5 e3@7 ~@4 f3@5 e3@7 ~@4 f3@5 ~@11 f3@5 ~@5]/8",
  D: "[~@11 e3@3 f3@18, ~@3 a3@5 g3@6 ~@18, ~@6 f3@5 ~@21]/2",
})).s("gm_electric_guitar_clean").gain(0.31).pan(0.4)

// other · synth strings 2
const synth_strings_2 = note("<~@29 A@2 ~@23 A@2 ~@16 A@2 ~@26>".pickRestart({
  A: "[~@3 f3@7 ~@6]/2",
})).s("gm_synth_strings_2").gain(0.08)

// other · pad warm
const pad_warm = note(`<
  ~@38 A B@2 C@2 D@2 E@2 ~@17 A B@2 C@2 D@2 E@2 ~@8 A B@2 C@2 D@2 F@2 B@2 C@2 D@2 F@2 G@2
>`.pickRestart({
  A: "~@3 a4", B: "[c5@7 a4]/2", C: "[c5@7 d5]/2", D: "[c5@27 ~ d5@4]/2", E: "[c5@3 f4@13]/2",
  F: "[c5@3 ~@11 a4@2, ~@3 f4@13]/2", G: "c5/2",
})).s("gm_pad_warm").gain(0.39)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F@2 B D@2 E G H I J K L@2 M N O@2 P B D@2 E Q R@2 S T U V W X Y Z AA J K L@2 M N O@2 P B D@2 E Q R@2 S T U V
  W X Y Z AA ~ P B D@2 E Q R@2 S T U V W X Y Z AA J K L@2 M N O@2 J K L@2 M N O@2 AB@2
>`.pickRestart({
  A: "a3@2 ~@2 [a3,c4]@2 [c3,f3] [c3,f3,g3,c4]@2 ~ [g3,c4]@2 [c3,f3,g3,c4]@2 ~ [c3,f3], [c3,f3,c4]@3 [c3,f3]@3 ~@3 [c3,f3]@3 ~@4, ~ a3 ~@5 [g3,c4]", // Am F5 Csus4 C5 Csus4 F5 C5
  B: "[c3,f3,a3,c4]@2 ~@2 [a3,c4]@2 [c3,f3] [c3,f3,g3,c4]@2 ~ [g3,c4]@2 [c3,f3,g3,c4]@2 ~ [c3,f3], ~ [a3,c4] ~@5 [g3,c4], ~@3 [c3,f3]@3 ~@3 [c3,f3]@3 ~@4", // F Am F5 Csus4 C5 Csus4 F5 Am …
  C: "[d3,f3,a3,c4]@2 ~@2 c4@2 [d3,f3] [d3,f3,g3,c4]@2 ~ [g3,c4]@2 [d3,f3,g3,c4]@2 ~ [d3,f3], ~ [a3,c4] a3@6, ~@3 [d3,f3]@3 ~@3 [d3,f3]@3 ~@2 [g3,c4]@2", // Dm7 Dm Dm7 C5 Dm7 Dm Am Dm …
  D: "[d3,f3,a3,c4]@2 ~@2 [a3,c4]@2 [d3,f3] [d3,f3,g3,c4]@2 ~ [g3,c4]@2 [d3,f3,g3,c4]@2 ~ [d3,f3], ~ [a3,c4] ~@5 [g3,c4], ~@3 [d3,f3]@3 ~@3 [d3,f3]@3 ~@4", // Dm7 Am Dm Dm7 C5 Dm7 Dm Am …
  E: "[c3,f3,g3,c4]@2 ~@2 [g3,c4]@2 [c3,f3] [c3,e3,g3,c4]@2 ~ [g3,c4]@2 [c3,e3,g3,c4]@2 ~ [c3,e3], ~ [g3,c4] ~@5 [g3,c4], ~@3 [c3,f3]@3 ~@3 [c3,e3]@3 ~@4", // Csus4 C5 F5 C C5 C C5 F5 …
  F: "[[c3,d3,g3,c4]@2 ~@2 [g3,c4]@2 c3 [c3,e3,g3,c4]@2 ~ [g3,c4]@2 [g3,c4]@2 ~@2 [f3,a3,c4]@2 ~@2 [a3,c4]@2 [c3,f3] [c3,f3,g3,c4]@2 ~ [g3,c4]@2 [c3,f3,g3,c4]@2 ~ [c3,f3], ~ [g3,c4] ~@5 [g3,c4] ~ [a3,c4] ~@5 [g3,c4], ~@3 [c3,d3]@4 ~@2 [c3,e3]@3 [c3,e3]@3 c3@4 [c3,f3]@3 ~@3 [c3,f3]@3 ~@4]/2", // Csus2 C5 C C5 F Am F5 Csus4 …
  G: "[c3,d3,g3,c4]@2 ~@2 [g3,c4]@2 [c3,d3] [c3,e3,g3,c4]@2 ~ [g3,c4]@2 [c3,e3,g3,c4]@2 ~ [c3,e3], ~ [g3,c4] ~@5 [g3,c4], ~@3 [c3,d3]@3 ~@3 [c3,e3]@3 ~@4", // Csus2 C5 Csus2 C C5 C C5 Csus2 …
  H: "[bb2,f3,bb3,c4]@2 ~ [bb2,f3] [bb2,f3,bb3,c4]@2 bb2 [bb2,f3,bb3,c4]@2 bb2 [bb2,f3,bb3,c4]@2 bb3@2 ~ [bb2,f3], ~ [bb3,c4] ~@4 [bb2,f3,c4]@2, ~@7 bb3", // Bbsus2 Bb5 Bbsus2 Bb5 Bbsus2
  I: "[bb2,f3,bb3,c4]@2 ~@2 [bb3,c4]@2 [bb2,f3] [bb2,f3,bb3,c4]@2 [bb2,f3] [bb2,f3,bb3,c4]@2 g3@2 ~ [bb2,f3], ~ [bb3,c4] ~@5 g3, ~@3 [bb2,f3]@3 ~@6 [bb2,f3,c4]@4", // Bbsus2 Bb5 Bbsus2 Bb5 Bbsus2 Bb5 Bbsus2 Bb5 …
  J: "[c3,f3,a3,c4]@2 ~@2 [a3,c4]@2 [c3,f3] [c3,f3,g3,c4]@2 [c3,f3] [c3,f3,g3,c4]@2 g3@2 ~ [c3,f3], ~ [a3,c4] ~@5 g3, ~@3 [c3,f3]@3 ~@6 [c3,f3,c4]@4", // F Am F5 Csus4 F5 Csus4 F5 Am …
  K: "a3@2 ~@2 [a3,c4]@2 [c3,f3] [c3,f3,g3,c4]@2 ~ [g3,c4]@2 g3@2 ~ [c3,f3], [c3,f3,c4]@3 [c3,f3]@3 ~@3 [c3,f3]@3 [c3,f3,c4]@4, ~ a3 ~@5 g3", // Am F5 Csus4 C5 F5
  L: "a3@2 ~@2 [a3,c4]@2 [d3,f3] [d3,f3,g3,c4]@2 ~ [g3,c4]@2 [d3,f3,g3,c4]@2 ~ [d3,f3], [d3,f3,c4]@3 [d3,f3]@3 ~@3 [d3,f3]@3 ~@4, ~ a3 ~@5 [g3,c4]", // Am Dm Dm7 C5 Dm7 Dm Dm7 Dm …
  M: "[c3,f3,g3,c4]@2 ~@2 [g3,c4]@2 f3 [c3,e3,g3,c4]@2 ~ [g3,c4]@2 [g3,c4]@2 ~ e3, ~ [g3,c4] ~@5 [g3,c4], ~@3 [c3,f3]@4 ~@2 [c3,e3]@3 [c3,e3]@4", // Csus4 C5 C C5 F5 C
  N: "g3@2 ~@2 [g3,c4]@2 [c3,d3] [c3,e3,g3,c4]@2 ~ [g3,c4]@2 [g3,c4]@2 ~ c3, [c3,d3,c4]@3 [c3,d3]@3 ~@3 [c3,e3]@3 [c3,e3]@4, ~ g3 ~@5 [g3,c4]", // C5 Csus2 C C5 Csus2 C C5
  O: "[f3@2 ~@2 [f3,bb3,c4]@2 bb2 [bb2,f3,bb3,c4]@2 ~ [f3,bb3,c4]@2 [bb2,f3,bb3,c4]@2 ~@2 [f3,bb3]@2 ~@2 [f3,bb3,c4]@2 ~ [f3,bb3,c4]@2 ~ [f3,bb3,c4]@2 [f3,g3]@2 ~ c3, [bb2,bb3,c4]@3 bb2@3 ~@3 bb2@3 ~@3 bb2@3 [f3,bb3]@2 ~@10 [f3,g3]@2, ~@2 f3@2 ~@10 [f3,bb3,c4]@2 c4@3 bb2@3 bb2@3 bb2@3 [c3,c4]@4]/2", // Fsus4 Bbsus2 Fsus4 Bbsus2 Bb5 Fsus4 Fsus2 Bbsus2 …
  P: "[c3,f3,a3,c4]@2 ~@2 [a3,c4]@2 [c3,f3] [c3,f3,g3,c4]@2 ~ [g3,c4]@2 c4@2 ~ [c3,f3], ~ [a3,c4] ~@5 c4, ~@3 [c3,f3]@3 ~@3 [c3,f3]@3 [c3,f3,g3]@4", // F Am F5 Csus4 C5 F5 Am F5 …
  Q: "[c3,d3,g3,c4]@2 ~@2 [g3,c4]@2 [c3,d3] [c3,e3,g3,c4]@2 ~ [g3,c4]@2 [g3,c4]@2 ~ c3, ~ [g3,c4] ~@5 [g3,c4], ~@3 [c3,d3]@3 ~@3 [c3,e3]@3 [c3,e3]@4", // Csus2 C5 Csus2 C C5 Csus2 C
  R: "[[bb2,f3,bb3,c4]@2 ~@2 [f3,bb3,c4]@2 bb2 [bb2,f3,bb3,c4]@2 ~ [f3,bb3,c4]@2 [bb2,f3,bb3,c4]@2 ~@2 [f3,c4]@2 ~@2 [f3,bb3,c4]@2 ~ bb2 [c3,f3,c4]@2 ~@2 f3@2 f3@2, ~@2 [f3,bb3,c4]@2 ~@10 [f3,bb3,c4]@2 bb3@3 bb2@4 ~@3 [f3,c4]@2 [a3,c4]@4, ~@3 bb2@3 ~@3 bb2@3 ~@3 bb2@3 [f3,c4]@2 ~@2 [f3,bb3,c4]@2 g3@8, ~@27 c3@5]/2", // Bbsus2 Fsus4 Bbsus2 Fsus4 Bbsus2 F5 Fsus4 F5 …
  S: "[d3,f3]@2 ~@2 [bb3,d4]@2 [bb3,d4] ~@3 a3@2 a3@2 a3@2, [bb3,d4] ~ d4 ~, ~@2 [d3,f3]@5 [d3,f3]@2 [d3,f3]@3 [d3,f3,d4]@4, ~@4 a3 ~@3", // Dm Bb Dm
  T: "g3!2 [g3,c4] ~@2 [g3,c4] [c3,f3,a3,c4]@2, [c3,e3]@7 [c3,e3]@2 [c3,e3]@3 ~@4, c4@2 ~ [g3,c4]!2 ~@3", // C5 F C C5
  U: "bb3@2 bb3@2 [d3,f3,bb3,d4]@3 ~@3 [a3,d4]@2 a3@2 a3@2, [d3,f3,d4]@4 ~@3 [d3,f3]@2 [d3,f3]@3 [d3,f3,d4]@4, ~@4 [a3,d4] ~@3", // Bb D5 Dm D5
  V: "g3@2 g3@2 [c3,e3,g3,c4]@3 ~@3 [g3,c4]@2 [c3,f3,a3,c4]@4, [c3,e3,c4]@4 ~@3 [c3,e3]@2 [c3,e3]@3 ~@4, ~@4 [g3,c4] ~@3", // C C5 F C C5
  W: "bb3@2 bb3@2 [bb3,d4]@2 [bb3,d4] [d3,f3] ~@2 a3@2 a3@2 a3@2, [d3,f3]@7 ~ a3@2 ~@6, d4 ~ d4 ~, ~@9 [d3,f3]@3 [d3,f3,d4]@4", // Bb Dm
  X: "g3@2 g3@2 [g3,c4]@2 [g3,c4] [c3,e3] ~@2 a3@2 a3@2 a3@2, [c3,e3]@7 ~ a3@2 ~@6, c4 ~ db4 ~, ~@9 [db3,e3]@3 [db3,e3,db4]@4", // C5 C Dbm
  Y: "a3@2 a3@2 [a3,d4]@2 a3 ~@3 [bb3,d4]@2 bb3@2 bb3@2, [d3,f3]@7 [d3,f3]@2 [d3,f3]@3 [d3,f3,d4]@4, d4@2 ~@2 [bb3,d4] ~@3", // D5 Bb Dm Bb
  Z: "g3@2 g3@2 [c3,f3,g3,c4]@2 ~ [c3,f3]@2 ~ [g3,c4]@2 g3@2 g3@2, [c3,f3,c4]@4 ~@2 [g3,c4]@3 [c3,f3]@3 [c3,f3,c4]@4", // Csus4 F5 C5 F5 C5 F5
  AA: "[c3,e3,g3,c4] ~@7", AB: "[c3,f3,a3,c4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(1)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@6 B@6 C@2 D@8 E@8 F G F H F I J@3 D@8 E@8 F G F H F I J@3 ~ E@8 F G F H F I J@3 D@16 K@2
>`.pickRestart({
  A: "[a3 g3 a3 g3 a3 g3 a3 ~@2 e3 d3 e3, c4, f3@71 ~@25, ~@7 g3@5]/6",
  B: "[a3 g3 a3 g3 a3 g3 a3 ~@2 e3 d3 e3, f3@3 ~, ~@7 g3@5]/6", C: "[bb3@7 g3, f3@31 ~]/2",
  D: "[a3@8 g3@8 a3@8 g3@8 a3@8 g3@8 a3@8 ~@8 f3@8 e3@8 d3@8 e3@8 bb3@28 g3@3 ~, c4@127 ~, f3@63 ~@33 f3@32, ~@7 g3@5 ~@4]/8",
  E: "[a3@2 g3@2 a3@2 ~@2 a3@2 g3@2 a3@2 ~@2 f3@2 [e3,e4]@2 d3@2 e3@2 bb3@6 [g3,e4] [a3,f4], c4, f3@63 ~@33 f3@32, ~@3 g3 ~@3 g3@5 ~@4, ~@7 e4@5 f4@6 ~@2 d4@10 ~@2]/8", // E C Dm
  F: "[bb2,bb3] [d3,a3], [d4,f4]", G: "[c3,g3,e4]@3 [f2,a3,f4], c4", H: "[c3,g3,e4]@3 [a2,a3,f4], c4",
  I: "[c3,g3,c4] [db3,a3,db4], e4", J: "[[d3,a3]@4 [bb2,bb3]@4 ~@8 e4 ~@7, f4@2 ~, d4@8 [c3,g3,c4]@9 ~@7]/3",
  K: "[f3,a3,c4]/2", // F
})).s("gm_string_ensemble_2").gain(0.24).pan(0.4)

// drums · kick
const kick = s("bd").struct("<A@38 B A@24 B@2 A@16 B A@16 C ~>".pickRestart({
  A: "x ~@6 x ~@2 x ~@5", B: "x ~ x ~@4 x ~ x!2 ~@5", C: "x",
})).gain(0.54)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~@9 x ~@6]!38 ~ [~@9 x ~@6]!24 ~@2 [~@9 x ~@6]!16 ~ [~@9 x ~@6]!16 ~@2>").gain(0.21)

// drums · snare
const snare = s("sd").struct("<A@29 B A@16 C A@7 B A@17 D A@16 C A@7 D ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@4 x ~@7 x!2 ~@2", D: "~@4 x ~@3 x ~@3 x!2 ~@2",
})).gain(0.54)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A@5 B C D A D A D@2 B C D A D A D@2 B C D A D A D@2 E C D A D A D@2 B ~ C D A D A D@2 F C D A D A D@2 E C D A D A D@2
  B ~@2 C D A D A D@2 F C D A D A D@2 B ~ C D A D A D@2 F C D A D A D@2 F ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~@3 x ~ x", C: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x",
  D: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", E: "~ x ~ x ~ x ~ x ~ x ~@6", F: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
})).gain(0.16)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@72 [~@7 x] ~@24 [~@7 x] ~@2>").gain(0.54)

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

stack(
  bass, electric_guitar_clean, synth_strings_2, pad_warm, acoustic_guitar_steel, string_ensemble_2, kick, kick_soft,
  snare, hihat, hihat_soft, open_hat, mid_tom, crash
)

More by Fiorella Mannoia