Strudelify

Se mi vuoi

Daniele

KeyA♭ majorTempo70 bpm
0:00/0:00
// Se mi vuoi — Daniele
// 70 bpm, 4/4, key G# 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: duplicate parts dropped: ch 15 percussive organ (copy of ch 14 drawbar organ)
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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 · fretless bass
const bass = note("<~ A@4 ~@2 B C D E F G H I J@4 K@4 L M N O P Q R S T U V W X@2 Y@4 Z@4 AA@8 AB@3>".pickRestart({
  A: "ab1@3 ab1@5", B: "db2", C: "c2", D: "bb1@2 eb2!2", E: "ab1@3 ~@3 ab1@6 ~ ab1!3", F: "f1@5 ~ f1@6 ~@3 [eb1,f1]",
  G: "db1@4 db2@2 db1@9 db2", H: "c2@5 ~ c2@9 f2", I: "bb1@4 ~ bb0 c1 db1 eb1@3 bb0 eb1@3 eb1",
  J: "[ab1@5 db1 f1 g1 ab1@7 ab1@7 ~ ab1 ab1@3 eb1 eb1@3 ab1@8 ab1 ab1@4 ~ bb1 eb2 eb2@6 eb2 c2 bb1 ab1@8]/4",
  K: "[db1@5 ~@2 db2 c2@4 f2@2 bb1@6 ~ bb2 b1 c2 eb2@3 eb2 eb1@2 db1@9 db2 c2@4 f1 bb1 bb1@6 ~ bb0 c1 db1 eb1@2 eb1@5 eb1]/4",
  L: "ab1@13 eb1 ab1 eb1", M: "db1@4 ~ db1 ab1@7 eb1 f1 bb1", N: "ab1@4 eb1@2 ab1@9 eb2",
  O: "ab2@4 g2 eb2 ab1@5 ab1 eb2@3 bb1", P: "ab1@3 ab1 eb1!2 ab1@6 c2@3 c1", Q: "f1@5 ~ f1@7 db1!2 eb1",
  R: "db1@5 ~ db1@8 db2@2", S: "c2@5 g1 c2@8 ~ c2", T: "bb1@5 f1 db1 bb1 eb2@4 eb2@3 bb1",
  U: "ab1@3 eb2 ab2 eb2 ab1 ab1@5 c2@3 f1", V: "f1@6 f1@7 f1 eb1!2", W: "db1@5 ~ db1@6 ~ db2@2 bb1",
  X: "[c2@4 ~ g1 c2@5 ~ eb2@3 bb1@5 bb1@3 [c1,db1] eb1@8]/2", // Dbmaj7
  Y: "[ab1@3 eb2 ab2@2 eb2 ab1@5 ~ eb1 f1 ab1@5 ~ eb1 f1 g1 ab1@4 gb2@3 ab2@3 ~ c1 c1@2 ~ c1 db1@2 ~ db1 d1@2 ~ eb1@5 ~ eb2 c2 bb1 ab1@4 ab1@4]/4",
  Z: "[db1@6 db2 ab1 c2@4 f2@2 bb1@7 bb2 bb1 b1 c2@4 c1@2 db1@8 db2 ab1 c2@4 eb1@2 bb1@8 db2 d2 eb2@2 eb1@3 eb2@3]/4",
  AA: "[ab1@7 eb2 ab2@4 ~ ab2 eb2 ab1@8 db1 ab1@4 ~ eb1 g1 ab1@6 ~@2 eb1 ab1@4 ~ ab1 eb2 ab2@6 ~@2 db2 ab2@3 db2 eb2 c2 bb1 ab1@4 c1!2 ~@2 c1 ~ db1 ~ d1 eb1 ~@2 eb1@3 eb1@5 bb1 eb2@4 ~ eb2 bb1 ab1@3 ab1@5 eb2 ab2@4 ~ ab2 eb2 ab1@8 eb1 ab1@4 db2@4]/8",
  AB: "[ab1@41 ~@7]/3",
})).s("gm_fretless_bass").gain(0.59)

// other · electric guitar jazz
const electric_guitar_jazz = note("<A@5 ~@14 B@2 C@2 D E@2 F ~@14 B@2 C@2 ~@7 G@4>".pickRestart({
  A: "[~@8 [g4,ab4]@2 g4 ~ eb4 ~ c4@14 eb4 ~ bb3@13 d4 eb4@2 ~@12 f4 ~ bb3@2 ab3 bb3@8 ~@9, ~@30 b3 ~@15 c4@14 ~@20]/5", // Abmaj7
  B: "[[c4,c5]@5 c5 ~ [bb3,bb4]@6 c5 ~ ab4@9 [ab3,ab4] ~ [bb3,bb4] ~ [c4,c5] ~ [c4,c5]@2]/2", // C Bb Ab Bb C
  C: "[[c4,c5]@6 [db4,db5] [c4,c5] [bb3,bb4]@4 ~ c5 ~ [ab3,ab4]@9 [eb3,eb4]@8]/2", D: "[eb4,eb5]@6 [c4,c5] [eb4,eb5]",
  E: "[[ab4,ab5]@2 [ab4,ab5]@2 [g4,g5] ~ [g4,g5]@2 [eb4,eb5]@4 [c4,c5] ~ [f4,f5] ~ [eb4,eb5,e5] ~ [eb4,eb5]@8 ~@2 [c4,c5]@2 [eb4,eb5]@2, ~@15 [f4,f5]@3 ~@14]/2", // Ab G Eb C F Emaj7 Eb C …
  F: "[f4,ab4]@2 [f4,ab4]@2 [eb4,g4] ~ [eb4,g4]@2 [c4,eb4]@8, ~@8 [b3,d4] ~@7", // Fm Eb Cm Bm
  G: "[~@16 [eb4,g4]@14 ~@3 bb5@28 ~@3, ~@15 c4@14 ~@2 [c4,eb4]@30 ~@3, ~@8 [g4,c5,f5]@7 ~]/4", // Eb Cm Csus4
})).s("gm_electric_guitar_jazz").gain(0.48)

// other · electric guitar jazz · soft notes
const electric_guitar_jazz_2 = note("<A ~@2 B ~@15 C@2 ~@4 D ~@15 C@2 ~@13>".pickRestart({
  A: "~@11 [f4,gb4] e4 ~@3", B: "~@9 eb4 e4 ~@5", C: "[~@5 c4 ~@9 ab3@9 ~@8]/2", D: "e4 ~@15",
})).s("gm_electric_guitar_jazz").gain(0.32)

// other · string ensemble 2
const string_ensemble_2 = note("<~ A@4 ~@18 B C@2 D@2 ~@9 E F@3 G ~@3 H I J@4 K@2 L@3>".pickRestart({
  A: "[[c4,eb4,g4]@2 [db4,f4]@2 g4 ab4 [db4,f4]@2, bb4, ~@2 eb4 ~]/4", B: "eb5@6 c5 eb5",
  C: "[ab5@2 ab5@2 g5 ~ g5 ~ eb5@3 ~ c5@2 eb5@13 ~ c5 ~ eb5@2]/2", D: "[ab5@2 ab5@2 g5@2 g5@2 bb5@3 ~ ab5@2 eb5@18]/2",
  E: "eb5@5 g5@2 eb5", F: "[db5@14 ab5 bb5@4 g5@11 eb5 ab5@3 f5@12 eb5@2]/3", G: "ab4@4 g4@3 ~, c5@7 ~",
  H: "eb5@12 g5@3 ab5", I: "db5@12 ab5@3 bb5", J: "[g5@14 eb5 f5@14 g5@2 eb5@12 g5@3 eb5 db5@13 ab5@3 bb5]/4",
  K: "[g5@12 eb5@3 f5@17]/2", L: "[~@3 eb6@7 ~@2, eb5@5 ~]/3",
})).s("gm_string_ensemble_2").gain(0.4)

// chords · epiano2
const epiano2 = note("<A@5 B C D E F G C H I J K@4 L@3 M N O@2 P Q R@3 S B T U V W X@4 L@3 M Y@8 ~@3>".pickRestart({
  A: "[~@4 ab5 g5 eb5 ~@15 eb5 ~@7 bb4 ~@4 [f4,ab4]@5, ~@14 c5@7 c4 [eb4,g4]@6 eb5@2 bb4@18 ~@4 g3 c4 [eb4,g4]@4 f5@4 ab4@2 ~@2 f3@3 db4@11, ~@16 ab2@16 ab2@5 db4 [f4,ab4]@10 ~@2 eb3@13 bb4@17, ~@9 eb3@7 ~ f3@7 ab2@8 ab2@8, ~@10 g3@6 ~@2 ab3@5 c5@9 ~@2 ab3@6]/5", // Fm Eb Fm
  B: "[f4,bb4,eb5]", C: "[bb3,eb4,ab4]@15 ~", D: "~@3 [c5,f5,bb5]@5, [c4,f4,bb4]", E: "~@3 [eb5,bb5], [eb4,bb4], ~ ab4",
  F: "ab4 bb4, db4", G: "[f4,bb4,eb5]@15 ~", H: "[f4,bb4]@5 ~@2 eb5@8 ~, c4@15 ~, ~@5 f4@10 ~, ~@6 bb4@9 ~",
  I: "ab4 ~@7 ab4@8, [eb4,bb4]", J: "~ bb4, [ab3,db4]",
  K: "[[f4,bb4,eb5]@15 [ab4,db5,f5]@16 [c5,f5,bb5]@16 ~@9 [c5,f5]@8, ~@47 [db5,ab5]@17]/4", // Ebsus2 Db Fsus4 F5 Db5
  L: "[[ab3,c4,f4]@4 [g3,bb3,eb4]@3 [f3,ab3,db4]@5 [ab3,eb4]@3 [ab3,c4,f4]@5 [g3,bb3,eb4]@4]/3", // Fm Eb Db Ab5 Fm Eb
  M: "db4 [db4,f4,bb4], [f3,ab3]", N: "~@7 eb5, [c3,ab3], eb5@3 c5, ~ g3@3, ~@3 [c4,g4]@5",
  O: "[ab5 ~ g5 ~@3 c5 ~@4 [c4,f4,bb4]@5, db3@7 ~ ab2@8, ~ [f3,ab5]@6 ~@2 eb3@7, ~@3 [bb3,eb4,ab4,g5]@4 ~@3 g3@6, ~@4 eb5@3 eb5@9]/2", // Fsus4 Fm Eb
  P: "ab5 ~ g5 ~@3 ab5 eb5, ab3@15 ~, ~ ab5@5 ~@2, ~@3 [c4,eb4,ab4,g5]@5, ~@8 bb5@7 ~", Q: "~@5 eb5@3, [eb4,bb4]",
  R: "[[bb3,eb4,ab4]@15 ~@8 bb5@8 ~ [bb4,eb5]@16, ~@15 c4@16 f4@16 ~, ~ [f4,bb4] ~, ~@21 c5@11 ~@16, ~@11 f5@5 ~@8]/3", // Ebsus4 Eb5 Bb5
  S: "[db4,f4,ab4]@7 ~ [f4,bb4,eb5]@8", T: "~@3 ab4@5, [bb3,eb4,g4]@15 ~",
  U: "~@7 bb5@9, [f4,bb4], ~@5 c5@11, ~@3 f5@5", V: "[eb4,bb4]", W: "[db3,ab3,c4] ~ [f4,bb4,eb5]@2",
  X: "[[f4,bb4,eb5]@15 [ab4,db5,f5]@16 ~@4 g5@12 ~@9 [c5,f5]@8, ~@31 [c5,eb5,bb5]@16 [bb4,db5,ab5]@17]/4", // Ebsus2 Db F5 Cm7 Bbm7
  Y: "[[f4,bb4,eb5]@15 [ab4,db5,f5]@16 ~@16 [bb4,db5,ab5]@16 [f4,bb4,eb5]@16 [ab4,db5,f5]@16 ~@16 [bb4,db5,ab5]@16 ~, ~@31 [c5,eb5,bb5]@32 ~@32 [c5,eb5,bb5]@32 ~, ~@35 g5@28 ~@36 g5@28 ~]/8", // Ebsus2 Db Bbm7 Ebsus2 Db Bbm7 Cm7
})).s("gm_epiano2").gain(0.56)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@10 A B C D E@5 ~@8 A B C F@2 A B C D E@5 ~@4 G@8 ~@3>".pickRestart({
  A: "[ab3,c4]!2 [ab3,bb3] ~ [ab3,c4] ~ [ab3,bb3] [ab3,c4] ~@8", B: "[f3,bb3]!2 ab3 ~ [f3,bb3] ~ ab3 [f3,bb3] ~@8",
  C: "[eb3,ab3]!2 eb3 ~ [eb3,ab3] ~ eb3 [eb3,ab3] ~@8", D: "[f3,bb3] [g3,bb3] f3 ~ [g3,bb3] ~ f3 [g3,bb3] ~@8",
  E: "[[ab3,c4]!2 g3 ~ [ab3,c4] ~ g3 [bb3,db4]@2 [bb3,db4] ab3 ~ [bb3,db4] ~ [ab3,db4] [ab3,c4]@2 [ab3,c4] [g3,bb3] ~ [ab3,c4] ~ [g3,bb3] [ab3,c4] ~@7 [bb3,db4]@2 [bb3,db4] ab3 ~ [bb3,db4] ~ ab3 [bb3,db4] ~@7 [ab3,c4]@2 [ab3,c4] [g3,bb3] ~ [ab3,c4] ~ [g3,bb3] [ab3,c4] ~@7 [bb3,db4]@2 [bb3,db4] [ab3,c4] ~@13]/5", // Ab Bbm Db5 Ab Gm Ab Gm Ab …
  F: "[[f3,bb3] [g3,bb3] ab3 ~ [g3,bb3] ~ ab3 [g3,bb3] ~@7 [f3,ab3]@2 [f3,ab3] g3 ~ [f3,ab3] ~@2 [bb3,db4] ~ [bb3,db4] c4 ~ [bb3,db4] ~@3]/2", // Bb5 Gm Fm Bbm
  G: "[[ab3,c4]!2 [g3,bb3] ~ [ab3,c4] ~ [g3,bb3] [ab3,c4] ~@7 [bb3,db4]@2 [bb3,db4] ab3 ~ [bb3,db4] ~ ab3 [bb3,db4] ~@7 [ab3,c4]@2 [ab3,c4] [g3,bb3] ~ [ab3,c4] ~ [g3,bb3] [ab3,c4] ~@7 [bb3,db4]@2 [bb3,db4] [ab3,c4] ~@12 [ab3,c4]@2 [ab3,c4] [g3,bb3] ~ [ab3,c4] ~ [g3,bb3] [ab3,c4] ~@7 [bb3,db4]@2 [bb3,db4] ab3 ~ [bb3,db4] ~ ab3 [bb3,db4] ~@7 [ab3,c4]@2 [ab3,c4] [g3,bb3] ~ [ab3,c4] ~ [g3,bb3] [ab3,c4] ~@7 [bb3,db4]@2 [bb3,db4] [ab3,c4] ~@13]/8", // Ab Gm Ab Gm Ab Bbm Ab Gm …
})).s("gm_electric_guitar_muted").gain(0.31)

// chords · drawbar organ
const drawbar_organ = note("<~@19 A@2 B C ~@18 A@2 B C ~@11>".pickRestart({
  A: "[[f4,ab4]@8 [eb4,g4]@6 [f4,ab4,db5]@8 ~ db5 [bb4,eb5]@8, c5@14 ~@8 c5@9 ~]/2", B: "[f4,ab4] [eb4,g4], c5",
  C: "db5 c5 bb4 ab4 eb4@4",
})).s("gm_drawbar_organ").gain(0.14).pan(0)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@53 A@3>".pickRestart({
  A: "[~ c4 ~ ab4 [g4,bb4] [gb4,g4,ab4] [bb3,eb4] ab3 g3 eb3 c3 ab2 ~ [g2,ab2] f2@21 ~@13, ~@2 [eb4,g4]@2 ~@10 g2 ~@33]/3", // Gm Eb5 Abmaj7 Eb
})).s("gm_acoustic_guitar_nylon").gain(0.52)

// drums · kick
const kick = s("bd").struct("<~ A@14 B C@2 D E F@2 G A@9 H A@3 I J K@2 L E F@2 G J K@2 M N K N O ~@3>".pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@7 x ~@6 x", C: "~@8 x ~@6 x", D: "~ x", E: "x ~@3 x ~@2 x", F: "~@4 x ~@2 x",
  G: "~@4 x!2 ~@2", H: "x ~@5 x!2 ~@8", I: "x", J: "x ~@6 x!2 ~@6 x", K: "~@7 x!2 ~@6 x", L: "~ x ~@2 x ~@3",
  M: "~@7 x!2 ~ x ~@4 x", N: "~@2 x ~@5 x ~@6 x", O: "~@2 x ~@4 x ~@8",
})).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@15 [~@7 x ~@8]!7 ~@19 [~@7 x ~@8]!3 ~@12>").gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@10 [~ x ~ x]!4 [~ x ~@2] [~ x ~ x]!21 [~ x ~@2] ~@19>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@45 A ~ A ~ A ~@2 B ~@3>".pickRestart({
  A: "~@7 x", B: "~@8 x!2 ~@6",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@36 A B@3 C B@3 D B@7 E ~@3>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@7 x!2 ~@2", E: "~ x!2 ~",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@14 A ~@3 A ~@3 A ~@13 B ~@3 A ~@15>".pickRestart({
  A: "~@3 x", B: "~@11 x ~@4",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@10 A B C D E F G H I J@3 K L M@2 N O P Q@2 R S T U V W F X Y Z J@3 K G@2 AA AB AC AD AE AF ~@3
>`.pickRestart({
  A: "x ~ x ~ x!2 ~@6 x ~ x ~", B: "x ~ x!2", C: "x ~ x ~ x!2 ~@6 x ~@3", D: "x ~ x ~ x ~@3 x!2 ~@2 x ~@3",
  E: "x!3 ~ x!3 ~", F: "~ x!7", G: "x!8", H: "~@2 x!6", I: "x ~ x ~ x!3 ~ x!3 ~ x ~@3", J: "x!7 ~", K: "x!5 ~ x ~",
  L: "~@12 x!3 ~", M: "x ~ x ~ x!2 ~@2 x!2 ~@2 x ~ x!2", N: "x ~ x ~ x!2 ~@2 x!2 ~@2 x ~@3",
  O: "x ~ x ~ x ~@3 x!3 ~ x ~ x ~", P: "x ~ x ~ x ~@3 x!2 ~@2 x!3 ~", Q: "x ~ x!5 ~ x!2 ~@2 x!3 ~",
  R: "x ~ x ~ x ~@3 x!2 ~@2 x ~ x ~", S: "~@3 x!2 ~ x ~ x ~ x ~ x ~@3", T: "x!3 ~@3 x!2", U: "x ~ x ~ x ~@10 x",
  V: "x ~ x!4 ~@2 x!2 ~@2 x!3 ~", W: "x ~ x!3 ~ x ~ x ~@7", X: "x!2 ~@2 x!4", Y: "~@4 x ~ x ~ x ~ x!3 ~ x ~",
  Z: "x ~ x ~ x!3 ~ x ~@2 x!2 ~@3", AA: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", AB: "x!2 ~@2 x ~ x!5 ~ x ~ x!2",
  AC: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", AD: "x ~ x ~ x!5 ~ x!3 ~ x ~", AE: "x ~ x!3 ~ x!3 ~ x!5 ~",
  AF: "x ~ x!5 ~@3 x!3 ~@3",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~@3 x] ~@4 [~@7 x!2 ~@3 x ~@3] ~@19>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@10 A B C B D ~ E ~@2 F@3 G D B@3 D B H@2 B F B@3 ~ I E ~ G F@3 G ~@3 J ~@3 K ~@3
>`.pickRestart({
  A: "~@6 x ~@8 x", B: "~@3 x ~ x ~@2", C: "~@6 x ~@2 x!2 ~@5", D: "~@3 x ~@4", E: "~@15 x", F: "~@7 x", G: "~@5 x ~@2",
  H: "~@7 x ~@2 x ~@5", I: "x", J: "~ x ~@6", K: "~@13 x ~@2",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@52 [~@15 x] x ~@2>").gain(0.64)

// drums · china
const china = s("cr").struct("<~@15 x ~@7 x ~@8 x ~@23>").gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~@3 x]!18 [x!16]!4 ~@18 [x!16]!4 ~@11>").gain(0.32)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [~@13 x ~ x]!22 ~@18 [~@13 x ~ x]!4 ~@11>").gain(2.84)

// drums · shaker
const shaker = s("sh").struct("<~ [x!8]!22 ~@18 [x!8]!4 ~@11>").gain(0.56)

// drums · claves
const claves = s("clave:2").struct("<~ [~@2 x ~@2 x ~@10]!9 ~@46>").gain(3.14)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@22 [~@7 x] ~@21 [~@7 x] ~@11>").gain(2.38)

stack(
  bass, electric_guitar_jazz, electric_guitar_jazz_2, string_ensemble_2, epiano2, electric_guitar_muted, drawbar_organ,
  acoustic_guitar_nylon, kick, kick_soft, rim, snare, clap, low_tom, hihat, mid_tom, open_hat, ride, china, tambourine,
  cabasa, shaker, claves, bell_tree
)

More by Daniele