Strudelify
Dove vai... cover art

Dove vai...

Mango

KeyB♭ majorTempo81 bpm
0:00/0:00
// Dove vai... — Mango
// 81 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(81/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 guitar muted
const bass = note(`<
  ~@12 A@8 B@7 C@2 ~@2 D E F G H I@2 J K E F G H L@2 M N@8 O@6 P E F G H I@2 J K E F G H L@2 M Q ~@15
>`.pickRestart({
  A: "[~@8 eb2 ~ f2 ~ eb2 ~ bb1@7 ~ eb2@4 ~ g1@2 ~ bb1@9 ~ ab2 ~ f2 eb2 d2 f2 bb1@7 ~ eb2@5 g1@3 bb1@13 eb2@3 ab1@13 ab1 bb1@2 c2@7 ~ g1@5 bb1 ~@2 bb1@7 ~ eb2@5 g1 bb1 ~ bb1@2]/8",
  B: "[~@6 eb2@5 g1@3 bb1@13 eb2@3 ab1@13 ab1 bb1@2 c2@7 ~ g1@5 bb1 ~@2 bb1@12 eb2 f2 c2@2 c2@9 ~ c2!2 d1!3 ~ eb1@7 bb1 eb2 f2 eb2@2 d2 d2@3 c2@2]/7",
  C: "[~@6 bb1@5 f1 bb1 ~ ab1@16 ~@2]/2", D: "~@14 bb1 ~", E: "bb1@4 ~ bb1!3 bb1@4 ~ bb1!2 ~",
  F: "bb1@4 ~ bb1!4 ~ d1@4 eb1 ~", G: "eb1@4 ~ eb1 f1!2 f1@3 ~ f1@2 bb1 ~", H: "bb1@4 ~ bb1!3 bb1@4 ab1 bb1 gb1 ~",
  I: "[gb1@4 ~ gb1!3 gb1@3 ~ ab1@2 db2@6 ~ ab1 db2 ab1 db2@4 db2 ab1 eb2 ~]/2", J: "eb2@5 bb1 eb2 bb1 eb2@5 eb2!2 ~",
  K: "eb2@5 bb1 eb2 bb1 eb2@2 db2 ~ c2 ~ bb1 ~",
  L: "[gb1@4 ~ gb1!3 gb1@3 ~ ab1@2 db2@6 ~ ab1 db2 ab1 db2@4 db2 ab1!2 ~]/2", M: "ab1@5 eb1 ab1 eb1 ab1@5 ab1!2 ~",
  N: "[ab1@5 eb1 ab1 eb1 ab1@5 ~ bb1@7 ~ eb2@4 ~ g1@2 ~ bb1@9 ~ ab2 ~ f2 eb2 d2 f2 bb1@7 ~ eb2@5 g1@3 bb1@13 eb2@3 ab1@13 ab1 bb1@2 c2@7 ~ g1@5 bb1 ~@2 bb1@7 ~ eb2@5 g1 bb1 ~ bb1@2]/8",
  O: "[~@6 eb2@5 g1@3 bb1@13 eb2@3 ab1@13 ab1 bb1@2 c2@7 ~ g1@5 bb1 ~@2 bb1@6 bb1 ~ ab1@5 ~ ab1 ~ g1@5 g1!2 ~ f1@7 c2 f2 c2]/6",
  P: "f2@12 ~@2 bb1 ~", Q: "ab1@5 eb1 ab1 eb1 ab1@5 ~@3",
})).s("gm_electric_guitar_muted").gain(0.52)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@2 A@3 B C B D B C E@2 ~@6 F ~@4 G@5 ~@2 H@3 I@8 J@6 ~@6 F ~@3 K@6 I@8 L@4 M@6 N@8 O@3
>`.pickRestart({
  A: "[~@2 c5@6 ~@3 bb4, ~@2 [bb4,f5,bb5,eb6]@7 ~@3, ~@11 d5@5]/3", B: "[f4,a4,c5]", C: "[d4,g4,bb4]",
  D: "~@3 bb4, ~ d5@15", E: "[[f4,a4,c5]@15 ~]/2", F: "~@3 [g3,bb3,c4]@4 ~",
  G: "[~@7 c4@6 d4@2 eb4@6 d4@2 c4@4 bb3@4 c4@8 ~]/5", H: "[~@7 [f4,f5]@12 [g4,g5]@2 [a4,a5]@2 [bb4,bb5]]/3",
  I: "[~@6 [a4,a5]@8 [f4,f5]@16 [db4,db5]@12 [eb4,eb5]@4 [f4,f5]@16 [gb4,gb5]@31 ~ [f4,f5]@24 [g4,g5]@4 [a4,a5]@4 [bb4,bb5]@2]/8", // A F Db Eb F Gb F G …
  J: "[~@3 [a4,a5]@4 [f4,f5]@8 [db4,db5]@6 [eb4,eb5]@2 [f4,f5]@8 [eb4,eb5]@6 [db4,db5]@2 [eb4,eb5]@8 ~]/6", // A F Db Eb F Eb Db Eb
  K: "[~@13 [bb2,bb3]@8 [ab2,ab3]@8 [g2,g3]@8 [f2,f3]@24 ~ [f4,f5]@24 [g4,g5]@4 [a4,a5]@4 [bb4,bb5]@2]/6", // Bb Ab G F G A Bb
  L: "[~@3 [a4,a5]@4 [f4,f5]@8 [db4,db5]@6 [eb4,eb5]@2 [f4,f5]@8 [eb4,eb5]]/4", // A F Db Eb F Eb
  M: "[~@10 [db4,db5]@4 ~@26 [d4,d5]@2 [eb4,eb5]@4 [bb4,bb5]@10 [a4,a5]@2 [g4,g5]@4 [db4,f4,f5]@10 [c4,eb4,eb5]@2 [bb3,db4,db5]@4 [ab3,c4,c5]@9 ab5@3 [g3,g5]@4 [ab3,ab5]@2, ~@7 [eb4,eb5]@13 ~@3 d4@8 ~@14 c4@3, ~@30 c4@16 ~@41 ab3 ~@8]/6", // Db D Eb Bb A G Db Cm …
  N: "[~@7 [g3,g5]@3 [ab3,ab5]@4 [eb4,eb6]@9 [d4,d6]@3 ~@4 f4@8 g4@8 a4@16 ~@12 bb4@4 [f4,a4,c5]@16 [d4,g4,bb4]@16 [f4,a4,c5]@18, ~@7 g4@8 [c5,f5]@16 d5@8 ~@25, ~@13 [c4,c6]@18 ~@33]/8", // G Ab Eb D F Gm F F5 …
  O: "[~@4 [f4,bb4]@43 ~]/3", // Bb5
})).s("gm_string_ensemble_2").gain(0.15).pan(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A@2 B C A@2 B D@4 E@8 F@6 ~@2 G@3 H@8 I@8 E@8 J@2 K@4 H@8 L@4 M N@2 O@8 P@6
>`.pickRestart({
  A: "[[bb2,bb3,d4] [a2,a3,c4], f3]/2", B: "[g2,g3,bb3,d4]", C: "[f2,f3,a3,c4]",
  D: "[[f2,f3,a3,c4]@15 [f3,d4]@4 [g3,c4]@4 [f3,bb3,d4]@9, ~@15 bb3@8 ~@9]/4", // F Dm C5 Bb
  E: "[~@3 [g3,c4]@4 [f3,d4]@8 [ab3,c4]@8 c4@4 ~@4 f3@4 [g3,c4]@4 [f3,d4]@4 [g3,c4]@4 [f3,bb3,d4]@8 [eb3,ab3,c4]@8 [g3,c4,eb4], ~@3 bb3@12 eb3@12 bb3@12 bb3@8 ~@17, ~@23 g3@8 ~@33, ~@27 d4@8 ~@29]/8", // C5 Dm Ab C5 Dm C5 Bb Ab …
  F: "[~@3 [bb3,d4]@4 ~@4 c4@4 [g3,c4,eb4]@6 [f3,d4]@2 [g3,eb4]@6 [f3,d4]@2 [eb3,g3,c4]@4 [f3,bb3,d4]@4 [ab3,c4,eb4]@9, ~@7 [f3,bb3,d4]@8 ~@6 bb3@10 ~@17]/6", // Bb Cm Dm Cm Dm Cm Bb Ab …
  G: "[~ [bb1,c4,f4,bb4,c5]@6 f4@12 g4@2 [f4,a4]@2 [eb4,g4,bb4], ~@7 bb3@17, ~@7 d4@16 ~]/3", // Bbsus2 F Eb
  H: "[~@3 [c4,f4,a4]@4 [bb3,d4,f4]@8 [bb3,db4,gb4]@6 [c4,eb4]@2 [db4,f4]@8 [bb3,db4,gb4]@16 f4@12 g4@2 [f4,a4]@2 [eb4,g4,bb4], ~@21 ab4@10 ~@16 bb3@17, ~@47 d4@16 ~]/8", // F Bb Gb Cm Db Gb F Eb
  I: "[~@3 [c4,f4,a4]@4 [bb3,d4,f4]@8 [bb3,db4,gb4]@6 [c4,eb4]@2 [db4,f4]@8 [c4,eb4,ab4]@6 [bb3,db4,gb4]@2 [c4,eb4,ab4]@8 [f3,d4]@4 [g3,c4]@4 [f3,bb3,d4]@9, ~@21 ab4@10 ~@16 bb3@8 ~@9]/8", // F Bb Gb Cm Db Ab Gb Ab …
  J: "[~@3 [bb3,d4]@4 [f3,bb3,d4]@4 [eb3,ab3,c4]@4 [g3,bb3,d4]]/2", // Bb Ab Gm
  K: "[~@3 [f3,ab3,c4]@10 ~@2 f4@12 g4@2 [f4,a4]@2 [eb4,g4,bb4], ~@15 bb3@17, ~@15 d4@16 ~]/4", // Fm F Eb
  L: "[~@3 [c4,f4,a4]@4 [bb3,d4,f4]@8 [bb3,db4,gb4]@6 [c4,eb4]@2 [db4,f4]@8 [c4,eb4,ab4], ~@21 ab4@10 ~]/4", // F Bb Gb Cm Db Ab
  M: "~@5 [bb3,db4,gb4]@2 [c4,eb4,ab4]", N: "[~@7 [c2,c3]@8 [g2,bb3,d4], ~@7 g3@9, ~@14 [c4,eb4] ~@17]/2",
  O: "[~@14 [bb3,db4]@10 c4@2 bb3@4 ab3@12 g3@4 [f2,ab3]@16 [c2,c3,g3,eb4]@16 ~@8 g4@8 a4@15 ~ [bb2,bb3,d4]@16 [a2,a3,c4]@2, ~@7 f3@24 ~@8 [f1,f2,a3,f4]@16 ~@9, ~@14 gb2@16 [db2,db3]@16 c4@63 ~ f3@18]/8", // Bbm Fm Cm Bb Am F Db
  P: "[~@14 [g2,g3,bb3,d4]@16 [f2,f3,a3,c4]@22 [bb2,f3,bb3]@43 ~]/6", // Gm F Bb5
})).s("gm_synth_strings_1").gain(0.25)

// chords · pad choir
const pad_choir = note("<~@11 A@2 ~@25 B@2 ~@3 C@5 ~ D ~ E@2 ~@15 B@2 ~@3 C@5 ~@8 F@2 ~@5>".pickRestart({
  A: "[~@6 [a3,c4,f4]@9 ~]/2", B: "[~@7 [eb4,f4,bb4,c5]@8 ~]/2",
  C: "[~@14 [bb3,db4,gb4]@12 [ab3,c4,eb4]@4 [ab3,db4,f4]@16 [ab3,c4,eb4]@12 [bb3,db4]@4 [ab3,c4,eb4]@15 ~@3]/5", // Gb Ab Db Ab Bbm Ab
  D: "~@4 bb4 ~ ab4@3 g4@3 f4 ~@3", E: "[~@4 bb4 ~ ab4@3 g4@3 f4@2 ab4@12 ~@6]/2", F: "[~@7 c4@8 ~]/2",
})).s("gm_pad_choir").gain(0.31)

// chords · pad choir · soft notes
const pad_choir_soft = note("<~@85 A@8>".pickRestart({
  A: "[~@14 [d4,bb4]@16 a4@16 [d4,g4,bb4]@16 [c4,a4]@22 [bb3,bb4]@43 ~, ~@14 f4@33 ~@15 f4@65 ~, ~@62 c5@21 ~@45]/8", // Gm F Bb
})).s("gm_pad_choir").gain(0.18)

// other · orchestral harp
const orchestral_harp = note("<~@12 A B C B D E F B@2 D E F G ~@22 A B C B D E F B@2 D E F B H ~@32>".pickRestart({
  A: "~@14 bb4 ~", B: "~ f4 ~@2 bb4 ~ c5 ~@2 g4 ~@2 c5 ~ bb4 ~", C: "~ f4 ~@2 bb4 ~ ab4 ~@2 g4 ~@2 f4 ~ bb4 ~",
  D: "~ f4 ~@2 bb4 ~ ab4 ~@2 g4 ~@2 f4 ~ ab4 ~", E: "~ eb4 ~@2 bb4 ~ c5 ~@2 eb4 ~@2 ab4 ~ g4 ~",
  F: "~ eb4 ~@2 c5 ~ d5 ~@2 g4 ~@2 bb4 ~ bb4 ~", G: "~ f4 ~@2 bb4 ~ c5 ~@2 g4 ~@2 c5 ~@3",
  H: "~ f4 ~@2 bb4 ~ ab4 ~@2 g4 ~@2 f4 ~@3",
})).s("gm_orchestral_harp").gain(0.27).pan(0.2)

// other · shamisen
const shamisen = note("<~@47 A B C B D E F B@2 D E F B G ~@32>".pickRestart({
  A: "~@14 bb4 ~", B: "bb4 f4 ~ f4 bb4 ~ c5 ~ c5 g4 ~ g4 c5 ~ bb4 ~",
  C: "bb4 f4 ~ f4 bb4 ~ ab4 ~ ab4 g4 ~ g4 f4 ~ bb4 ~", D: "bb4 f4 ~ f4 bb4 ~ ab4 ~ ab4 g4 ~ g4 f4 ~ ab4 ~",
  E: "ab4 eb4 ~ eb4 bb4 ~ c5 ~ c5 eb4 ~ eb4 ab4 ~ g4 ~", F: "g4 eb4 ~ eb4 c5 ~ d5 ~ d5 g4 ~ g4 bb4 ~ bb4 ~",
  G: "bb4 f4 ~ f4 bb4 ~ ab4 ~ ab4 g4 ~ g4 f4 ~@3",
})).s("gm_shamisen").gain(0.17).pan(0.7)

// other · agogo
const agogo = note("<~@24 [~@11 c3!2 ~@3] ~@68>").s("gm_agogo").gain(0.34).pan(0)

// drums · kick
const kick = s("bd").struct("<~@12 A@16 ~@3 A B@3 C B C B@5 C B C B@2 A@14 B@3 C B C B@5 C B C B D ~@15>".pickRestart({
  A: "~@7 x", B: "x ~@5 x!3 ~@4 x!2 ~", C: "x ~@4 x!4 ~@4 x!2 ~", D: "x ~@5 x!3 ~@4 x ~@2",
})).gain(0.34)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@32 A@3 ~ A ~ A@5 ~ A ~ A@2 ~@14 A@3 ~ A ~ A@5 ~ A ~ A@2 ~@15>".pickRestart({
  A: "~@5 x ~@10",
})).gain(0.21)

// drums · rim
const rim = s("rim").struct("<~@13 [~ x ~@3 x ~@2]!16 ~@19 [~ x ~@3 x ~@2]!14 ~@31>").gain(0.29)

// drums · snare
const snare = s("sd").struct("<~@32 [~ x ~@3 x ~@2]!16 ~@14 [~ x ~@3 x ~@2]!16 ~@15>").gain(0.38)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A@16 ~@7 B ~@3 C ~@3 B ~@3 D A@12 E F ~@3 B ~@3 C ~@3 B ~@3 C ~@15>".pickRestart({
  A: "~@7 x", B: "~@12 x!2 ~@2", C: "~@7 x ~@4 x ~@3", D: "~@7 x ~@4 x ~ x ~", E: "~@9 x ~@4 x ~", F: "~@11 x ~@4",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<~@12 A B@15 C ~@2 A B@45 C ~@15>".pickRestart({
  A: "~@14 x!2", B: "x!16", C: "x!14 ~@2",
})).gain(0.13)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 A ~@3 B ~@3 A ~@3 B ~@12 C D ~@3 A ~@3 B ~@3 A ~@3 B ~@15>".pickRestart({
  A: "~@11 x ~@4", B: "x ~@2 x ~@7 x ~@4", C: "~@3 x", D: "~@9 x ~@6",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@61 [~@13 x ~@2] ~@31>").gain(0.34)

// drums · crash
const crash = s("cr").struct("<~@31 A ~@3 B ~@3 A ~@3 B ~@3 C ~@13 D ~@3 B ~@3 A ~@3 B ~@3 E ~@15>".pickRestart({
  A: "~@7 x", B: "~@9 x!6 ~", C: "~@6 x!3 ~@7", D: "~ x!6 ~@7 x ~", E: "~@8 x!7 ~",
})).gain(0.13)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@35 A ~@7 A ~@3 B ~@12 C D ~@3 E ~@7 E ~@3 F ~@15>".pickRestart({
  A: "~@7 x!3 ~@6", B: "~@4 x!2 ~@10", C: "~@14 x!2", D: "x!2 ~@14", E: "~@7 x!2 ~@7", F: "~@4 x!4 ~@8",
})).gain(0.04)

// drums · ride
const ride = s("rd").struct("<~@31 [~@9 x!6 ~] ~@61>").gain(0.17)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@31 [~@6 x!3 ~@7] ~@61>").gain(0.08)

// drums · tambourine
const tambourine = s("tb").struct("<~@31 A B@15 C ~@13 A B@15 C ~@15>".pickRestart({
  A: "~@7 x", B: "x ~@5 x!3 ~@5 x ~", C: "x ~@5 x!3 ~@7",
})).gain(0.25)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@12 A B@15 C ~@3 D@15 E B@13 C D@15 E B@7 C ~@7>".pickRestart({
  A: "~@7 x", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x!2 ~@3", D: "x!4", E: "x ~ x ~ x ~ x!2",
})).gain(1.06)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@12 A B@15 C ~@2 D E F E F E F E F E F E F E F E G B@13 H E F E F E F E F E F E F E F E I J@8 ~@7
>`.pickRestart({
  A: "~@15 x", B: "~ x!5 ~ x ~ x!5 ~ x", C: "~ x!5 ~ x ~ x!5 ~@2", D: "~@14 x!2", E: "x ~ x ~ x!3 ~ x!7 ~", F: "x!16",
  G: "x!14 ~ x", H: "~ x!5 ~ x ~ x!7", I: "x!14 ~@2", J: "~@2 x!2 ~@5 x!2 ~@5",
})).gain(0.17)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@32 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@7 D ~@7
>`.pickRestart({
  A: "~ x ~@13 x", B: "~@15 x", C: "~ x ~@2 x!2 ~ x ~@3 x!3 ~ x", D: "~ x ~@2 x!2 ~ x ~@3 x!2 ~@3",
})).gain(0.08)

// drums · guiro
const guiro = s("guiro:0").struct("<~@77 [~@7 x] [~@3 x ~@3 x]!7 [~@3 x ~@4] ~@7>").gain(3.55)

// drums · claves
const claves = s("clave:2").struct("<~@59 [~ x ~@3 x ~@2]!3 ~@31>").gain(1.03)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@13 A B A B A B A B A B A B A B A B ~@19 A B A B A B A B A B A B A B ~@31
>`.pickRestart({
  A: "~ x ~@7 x ~@6", B: "~ x ~@4 x ~@2 x ~@6",
})).gain(1.46)

// drums · triangle · soft notes
const triangle_soft = s("triangles:30").struct(`<
  ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@20 A ~ A ~ A ~ A ~ A ~ A ~ A ~@32
>`.pickRestart({
  A: "~@3 x ~@3 x",
})).gain(0.73)

// drums · triangle
const triangle_2 = s("triangles:35").struct(`<
  ~@13
  [x ~@2 x!2 ~@3 x ~@2 x!2 ~@3]!16
  ~@19
  [x ~@2 x!2 ~@3 x ~@2 x!2 ~@3]!14
  ~@31
>`).gain(1.46)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@59 [~ x ~ x]!3 ~@31>").gain(0.54)

// … 5 more lines

More by Mango