Strudelify

Lei verra (strumentale)

Mango

KeyB♭ majorTempo82 bpm
0:00/0:00
// Lei verra (strumentale) — Mango
// 82 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 19, 4/4 at bar 19, 2/4 at bar 70, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(82/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 · accordion
const accordion = note(`<
  A B C B C B D@3 E F@3 G H@2 I@3 J@4 K@3 L@2 M@4 N@5 O P@2 ~ Q@4 K@3 L@2 M@4 N@5 O R@6 O P@2 S T@7 U@4
>`.pickRestart({
  A: "~@5 [f4,bb4,d5] ~ [f4,bb4,d5], ~ [bb2,bb3]", B: "~ [f4,a4,c5]@3 ~ [f4,bb4,d5] ~ [f4,bb4,d5], [a2,a3] [g2,g3]",
  C: "~ [f4,a4,c5]@3 ~ [f4,bb4,d5] ~ [f4,bb4,d5], [a2,a3] [bb2,bb3]", // F Bb A Bb
  D: "[~@2 [f4,bb4,d5]@6 [eb2,eb3,eb4]@8 [d2,d3,d4]@8 [c3,eb4,g4]@8 [f2,f3,f4,a4]@8 ~@2 [f4,bb4,d5]@3 ~ [f4,bb4,d5]@2, [f2,f3] [g4,bb4]@2 c4@2 ~, ~@24 c2@6 ~@10 [bb2,bb3]@7 ~]/3", // Bb Eb D Cm F Bb F Gm …
  E: "~@2 [f4,a4,c5]@6 ~@2 [f4,bb4,d5]@3 ~ [f4,bb4,d5]@2, [a2,a3] [g2,g3]", // F Bb A G
  F: "[~ [f4,d5]@3 [eb3,g4,eb5]@4 [bb2,bb3,f4,d5]@4 [ab2,ab3,ab4,c5,eb5]@6 [bb2,bb3,f4,bb4,d5]@2 [c3,c4,g4,c5,eb5]@4, [f2,f3]@7 ~ eb4@6 ~@34, ~ bb4@11 ~@12]/3", // Dm Eb Bb Ab Bb Cm F
  G: "[bb2,bb3,f4,bb4,d5]@4 ~ [g4,bb4,eb5] ~ [g4,bb4,eb5], ~@8 [eb3,eb4]@7 ~", // Bb Eb
  H: "[~ [g4,bb4,d5] ~ [g4,bb4,d5] ~ [g4,b4,eb5] ~ [g4,b4,eb5] ~ [g4,b4,eb5] ~ [g4,b4,eb5] ~ [g4,c5,eb5] ~ [g4,c5,eb5], [d3,d4] [b2,b3]@2 [c3,c4]]/2", // Gm Gaug Cm D B C
  I: "[~ [g4,b4,eb5] ~ [b4,eb5] [gb4,eb5]@12 [f4,d5]@8, [b2,b3] [bb2,bb3,bb4]@5, ~@6 g4 ~@41]/3", // Gaug B Ebm Dm B Bb
  J: "[[bb3,bb4,d5] [a3,a4,c5] g3 f3 [eb4,g4,eb5] [d4,d5] c4 [f3,f4,a4], f4@31 ~@9 g4@15 ~@9, ~ bb4@2 [c5,eb5], ~ d5 ~@2]/4", // Bb Am Eb D F Cm
  K: "[[bb4,d5] [a4,c5] d5@2 [eb4,g4,eb5] d5, f4@31 ~@9 f4@6 ~@2, ~ bb4@2]/3", // Bb Am Eb
  L: "[[ab4,c5,eb5]@3 [f4,d5] [eb4,g4,eb5]@2 [f4,d5]@2, ~@3 bb4@5]/2", // Ab Dm Eb Dm
  M: "[[eb4,g4,eb5]@16 d5@16 [ab4,c5]@15 ~ [ab4,c5,eb5]@13 ~@3, bb4@31 ~@33, ~@16 f4@33 ~@15]/4", // Eb Ab
  N: "[[g4,c5,eb5]@12 [f4,d5]@4 [g4,eb5]@16 d5@16 ~@16 eb5@9 ~@7, ~@12 bb4@36 [ab4,c5]@25 ~@7, ~@16 eb4@14 ~@2 f4@33 ~@15]/5", // Cm Dm Cm Ab
  O: "[g4,c5,eb5]@3 [f4,bb4,d5]", P: "[[ab4,c5]@12 [f4,bb4,d5]@15 ~@5, eb4@5 ~@11]/2",
  Q: "[[bb4,d5] [a4,c5] d5@2 [eb4,g4,eb5] [d4,d5] ~ [f4,a4], f4@31 ~@9 g4@15 ~@9, ~ bb4@2 [c5,eb5]]/4", // Bb Am Eb D F Cm
  R: "[[ab4,c5]@12 [f4,d5]@20 [eb4,g4,eb5]@16 d5@16 [ab4,c5]@15 ~ [ab4,c5,eb5]@13 ~@3, eb4@5 ~ bb4@26 ~@16, ~@16 f4@11 ~@5]/6", // Ab Dm Eb Ab
  S: "~ [f4,bb4,d5]", T: "[a4,c5] [bb4,d5]", U: "[[a4,c5]@8 [bb3,bb4,d5]@43 ~@13]/4",
})).s("gm_accordion").gain(0.21).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@2 A B C@2 D@4 E@3 F@5 ~ G H I@2 G J K L@6 M@5 N O@2 ~ G H I@2 G J K P@6 M@5 N Q@3 R@3 N O@2 S@2 T@6 U@4
>`.pickRestart({
  A: "~ [bb3,d4]", B: "[a3,c4] [g3,bb3,d4]", C: "[[f3,a3,c4] [bb2,bb3,d4] [a2,a3,c4] [g2,g3,bb3,d4], ~@8 f3@15 ~@9]/2",
  D: "[[f2,f3,a3,c4] [eb3,eb4] [d3,d4] c3 [f2,f3,a3] [bb2,bb3,d4] [a2,a3,c4] [g2,g3,bb3,d4], ~@8 g3@23 ~@9 f3@16 ~@8, ~ bb3@2 [c4,eb4]@2 ~@3]/4", // F Eb D F Bb Am Gm Cm
  E: "[[f2,f3,a3,c4]@2 [eb3,g3,eb4]@2 [bb2,f3,d4]@2 [ab2,ab3,c4,eb4]@3 [bb2,f3,bb3,d4] [c3,g3,c4,eb4]@2, ~ bb3@2 ~@3]/3", // F Eb Bb Ab Bb Cm
  F: "[[bb2,f3,bb3,d4]@8 [eb3,eb4]@8 [d3,d4]@8 [b2,b3]@16 [c3,c4]@8 [b2,b3]@8 [bb2,gb3,bb3]@19 ~@5, ~@4 g3@23 ~@13, ~@8 bb3@16 eb4@51 ~@5]/5", // Bb Eb D B C B Ebm
  G: "[bb3,d4] [a3,c4], f3@15 ~", H: "[g3,bb3,d4] [f3,a3,c4]", I: "[eb4 d4 ~ [f3,a3], g3@23 ~@9, bb3 [c4,eb4]]/2",
  J: "[g3,bb3,d4] [a3,c4], ~@4 f3@3 ~", K: "[g3,eb4] [f3,d4], bb3",
  L: "[[c4,eb4]@3 [f3,d4] eb4@2 [f3,d4]@2 [g3,eb4]@4 d4@4 ~@4 eb4@3 ~, ab3@5 ~ bb3@26 ab3@15 ~, ~@16 g3@6 ~@26 f3@33 ~@15, ~@16 c4@7 ~]/6", // Cm Dm Cm
  M: "[[g3,c4,eb4]@3 [f3,d4] [g3,eb4]@4 d4@4 ~@4 eb4@2 ~@2, ~@3 bb3@9 [ab3,c4]@6 ~@2, ~@2 f3@2 ~]/5", // Cm Dm Cm Ab
  N: "[c4,eb4]@3 [f3,bb3,d4], g3@5 ~@3", O: "[[ab3,c4]@12 [f3,bb3,d4]@13 ~@7]/2",
  P: "[[ab3,c4,eb4]@3 [f3,d4] [g3,eb4]@2 [f3,d4]@2 [g3,eb4]@4 d4@4 ~@4 eb4@3 ~, ~@6 bb3@26 [ab3,c4]@15 ~, ~@16 f3@11 ~@5]/6", // Ab Dm Cm Dm Cm Ab
  Q: "[[ab3,c4]@12 [f3,d4]@20 [g3,eb4]@15 ~, ~ bb3@3]/3", R: "[d4@4 ~@4 eb4@3 ~, f3@11 ~@5, ~@8 [ab3,c4]@15 ~]/3",
  S: "[~ [bb3,d4] [a3,c4] [g3,bb3,d4], ~@8 f3@15 ~@9]/2", T: "[[a3,c4] [bb3,d4] [a3,c4] [g3,bb3,d4], f3@23 ~@9]/2",
  U: "[[a3,c4]@8 [bb2,bb3,d4]@43 ~@13, f3@25 ~@7]/4", // Am Bb
})).s("gm_synth_strings_1").gain(0.22).pan(0.6)

// bass · electric bass finger
const bass = note(`<
  ~@19 A B C D E B F G H I J K L M N O K P Q R@2 ~ A B C D E B F G H I J K S Q N O K S Q T@2 U J K S Q V@2 W X Y X Z AA
  AB X AC@3 ~
>`.pickRestart({
  A: "bb1 a1", B: "g1 f1", C: "eb1 d1", D: "c1@4 ~ c1 d1 eb1 f1@7 ~", E: "bb1@7 ~ a1@8", F: "eb1 bb1",
  G: "ab1@7 ab1 ab1@4 bb1@4", H: "eb1@6 ~ eb1 bb1@8", I: "eb1@7 eb1 eb1@8", J: "bb1@6 ~ bb1 bb1@5 ~ bb1@2",
  K: "f1@6 ~ f1 f1@5 ~ f1!2", L: "ab1@15 ~", M: "c1@3 bb0", N: "eb1@13 ~ eb1@2", O: "bb1@7 ~ bb1@5 ~ bb1@2", P: "ab1 ~",
  Q: "c2@3 bb1", R: "[ab1@12 bb1@11 ~@9]/2", S: "ab1@7 ~@9", T: "[ab1@6 bb1@9 ~]/2", U: "eb1@6 ~ eb1 eb1@8",
  V: "[ab1@3 bb1@3 ~@2]/2", W: "~ bb1", X: "a1 g1", Y: "f1@8 bb1@6 ~ bb1", Z: "f1 bb1", AA: "a1@6 ~ a1 g1@8",
  AB: "f1@8 bb1@7 bb1", AC: "[f1@8 bb1@31 ~@9]/3",
})).s("gm_electric_bass_finger").gain(0.4)

// other · marimba
const marimba = note("<~@19 A@2 ~@2 A@2 ~@16 A@2 ~@2 A@2 ~@22 B C@7 D ~@3>".pickRestart({
  A: "~@2 d4 ~ d4 ~@2 c4 d4 c4!2 ~@5", B: "~@10 d4 ~ d4 ~@2 c4", C: "d4 c4!2 ~@7 d4 ~ d4 ~@2 c4", D: "d4 c4!2 ~@13",
})).s("gm_marimba").gain(0.48).pan(0.3)

// chords · clavinet
const clavinet = note(`<
  ~@28 A B C D E F B G H E I@2 ~@10 A B C D E J B G H E K@2 L B C D M N@2 O P Q P Q P Q P R@3 ~
>`.pickRestart({
  A: "~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4], eb3@3 ~ eb3@4", // Eb
  B: "~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4], bb2@7 ~ bb2@8", // Bb
  C: "~ [f3,ab3,c4] ~ [f3,ab3,c4] ~ [f3,ab3,c4] ~ [f3,ab3,c4], f2@7 ~ f2@8", D: "ab2",
  E: "~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [f3,bb3,d4], c3@3 bb2", // Cm Bb
  F: "~@2 [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4]@3 ~ [g3,bb3,eb4]@2, eb3", // Eb
  G: "~ [f3,ab3,c4] ~ [f3,ab3,c4] ~ [f3,ab3,c4] ~ [f3,ab3], f2@7 ~ f2@8, ~@14 c4 ~", H: "ab2@3 ~",
  I: "[~@2 [ab3,c4,eb4]@2 ~@2 [ab3,c4,eb4]@2 ~@2 [ab3,c4,eb4]@2 bb2@17 ~@3, ab2@3 ~@5]/2", // Ab
  J: "~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4], eb3", // Eb
  K: "[~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [f3,bb3,d4] ~@8, ab2@12 bb2@19 ~]/2", // Ab Bb
  L: "~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4], ~ eb3", // Eb
  M: "~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [f3,bb3,d4], c3@11 ~ bb2@4", // Cm Bb
  N: "[~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] bb2@10, ab2@3 ~@5]/2", O: "~@5 [f3,bb3,d4] ~ [f3,bb3,d4], ~ bb2",
  P: "~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,bb3,d4] ~ [f3,bb3,d4], a2 g2", // F Bb
  Q: "~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,bb3,d4] ~ [f3,bb3,d4], f2 bb2", // F Bb
  R: "[~ [f3,a3,c4] ~ [f3,a3,c4] [bb2,f3,bb3,d4]@16 ~@4, f2 ~@5]/3", // F Bb
})).s("gm_clavinet").gain(0.34).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@19 [x!2]!17 x [x!2]!21 x [x!2]!19 ~@3>").gain(0.72)

// drums · rim
const rim = s("rim").struct(`<
  ~@19
  [~ x ~@3 x ~@2]!17
  [~ x ~@6]
  [~ x ~@3 x ~@2]!21
  [~ x ~@6]
  [~ x ~@3 x ~@2]!18
  [~ x ~@6]
  ~@3
>`).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@19 A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A
  B C ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~ x ~@2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@19 A@17 B A@21 B A@3 C A@14 B ~@3>".pickRestart({
  A: "x!16", B: "x!8 ~@8", C: "~ x!15",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@77 [~ x] ~@3>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@19 A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A
  B D ~@3
>`.pickRestart({
  A: "~@6 x!2 ~@6 x ~", B: "~ x ~@13 x", C: "~ x ~@14", D: "~@6 x!2 ~@8",
})).gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@19 [~@5 x ~@10]!59 ~@3>").gain(2.05)

// drums · congas
const congas_2 = s("conga:18").struct("<~@19 [~@6 x!2 ~@8]!59 ~@3>").gain(2.05)

// drums · congas
const congas_3 = s("conga:33").struct("<~@19 [~@14 x!2]!17 ~ [~@14 x!2]!21 ~ [~@14 x!2]!18 ~@4>").gain(2.05)

stack(
  accordion, synth_strings_1, bass, marimba, clavinet, kick, rim, snare, hihat, crash, tambourine, congas, congas_2,
  congas_3
)

More by Mango