Strudelify

Portami con te

Berte

KeyB♭ majorTempo105 bpm
0:00/0:00
// Portami con te — Berte
// 105 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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(`<
  ~@5 A B C D A B C E F G H I F G H J K L M N K O M P K L M N Q R S T K L M U K O M V A B C W A B C X A B C Y K O M Z K
  L M AA A B C AB A B C AC AD B C AE AF AG C AH A B C AI AJ B AK AL A B C AM A B C AN AJ AO C AB AP AQ C AN AJ AR AS AT
  AU@3 ~
>`.pickRestart({
  A: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~", B: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  C: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", D: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 c2 a1",
  E: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 c2@2 f1@2", F: "bb1@2 ~@5 bb1", G: "a1@5 ~@9 a1@2", H: "g1@5 ~@9 g1@2",
  I: "f1@5 ~@7 c2@2 f1@2", J: "f1@5 ~@5 f1@2 c2@2 f1@2", K: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1@2", L: "a1@5 ~ a1 ~ a1@5 ~ a1@2",
  M: "g1@5 ~ g1 ~ g1@5 ~ g1@2", N: "f1@5 ~ f1 ~ f1@4 c2@2 f1@2", O: "a1@4 ~@2 a1 ~ a1@5 ~ a1@2",
  P: "f1@5 ~ f1 ~ f1@2 c2@4 f1@2", Q: "bb1@5 ~ bb1 ~ bb1 ~ bb1@3 ~ bb1@2", R: "a1@5 ~ a1 ~ a1 ~ a1@3 ~ a1@2",
  S: "g1@5 ~ g1 ~ g1 ~ g1@3 ~ g1@2", T: "f1@5 ~ f1 ~ f1 ~ f1@2 f2@2 c2@2", U: "f1@5 ~ f1 ~ f1@2 c1@2 f1@2 g1@2",
  V: "f2@2 f2 ~ f2 ~ f2@2 eb2@2 d2@2 c2@2 c2 ~", W: "f1 ~ f1 ~ f1 ~ f1 ~ f1@2 a1@2 c2@2 f1@2",
  X: "f1 ~ f1 ~ f1 ~ f1@2 eb1@2 d1@2 eb1@2 f1 ~", Y: "f1 ~ f1 ~ f1 ~ f1 ~ f1@2 a1@2 c2@2 f1 ~",
  Z: "f1@5 ~ f1 ~ c1@2 f1@2 c1@2 f1@2", AA: "f1 ~ f1@2 f1 ~ f1@2 a1@2 c2@2 d2@3 ~",
  AB: "f1 ~ f1 ~ f1 ~ f1 ~ f1@2 eb1@2 d1@2 c1@2", AC: "a1 ~ a1 ~ a1 ~ f1 ~ f1 ~ f1@2 c2@2 a1 ~",
  AD: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ d2@2 f2@2 d2@2 bb1@2", AE: "f1 ~ f1 ~ f1 ~ f1 ~ f1@2 f1@2 g1@2 a1@2",
  AF: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ f2@2 bb1 ~", AG: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ c2 ~ f2 ~",
  AH: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 f1@2 f1 ~", AI: "f1 ~ f1 ~ f1 ~ f1@2 eb2@2 d2@2 c2@2 f1@2",
  AJ: "bb1 ~ bb1 ~ bb1 ~ bb1@2 d2@2 f2@2 d2@2 bb1@2", AK: "g1 ~ g1 ~ g1 ~ g1 ~ g1@2 bb1@2 d2@2 g1@2",
  AL: "f1 ~ f1 ~ f1 ~ f1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~", AM: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 a1 c2@2 f1@2",
  AN: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", AO: "a1 ~ a1 ~ a1@2 f2 ~ f2 ~ f2@2 a1@2 f2@2",
  AP: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2 d2@2 f2@2", AQ: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 f2@2 a1@2",
  AR: "a1 ~ a1 ~ a1@2 f2 ~ f2@2 a2 ~ a2@2 f2@2", AS: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 a1@2",
  AT: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2@2 c2@2", AU: "bb1/3",
})).s("gm_electric_bass_finger").gain(0.51)

// other · distortion guitar
const distortion_guitar = note(`<
  A@4 B C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F
  C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F G@3 ~
>`.pickRestart({
  A: "[~@2 f4!6 ~@50 f4!6, ~ bb2@7]/4", B: "bb2", C: "bb2!16", D: "a2!16", E: "g2!16", F: "f2!16", G: "bb2/3",
})).s("gm_distortion_guitar").gain(0.41).pan(0.2)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  A@4 B C@2 D E F@2 ~ G ~@3 H ~@3 I F@2 ~ J F@2 ~@5 K F@2 ~ L M@2 ~@5 N O P Q R S T Q T U V W X F@2 ~@5 Y O P Q R S T Q
  T O P Q R S T Q T Z AA AB AC AD AE AB AF Z AA AB AC AD AE AB AF Z AA AB AC AD AE AB AF AD AE AB AG AH@3 ~
>`.pickRestart({
  A: "[~@8 [bb3,f4] [bb3,g4]@2 [bb3,f4] [bb3,g4]@2 [bb3,f4] [bb3,g4]@2 [bb3,eb4]!7 eb4 f4@39, ~@3 bb3@5]/4", // Bb5 Eb Bb5 Eb Bb5 Eb Eb5
  B: "[bb3,f4] [bb3,g4]@2 [bb3,f4] [bb3,g4]@2 [bb3,f4] [bb3,g4]@2 [bb3,eb4]!7", C: "[bb3,d4]/2",
  D: "~@10 c6 d6 g5 f5 c6 d6", E: "f3 g3@2 bb3@2 f3 c4@3 [bb3,eb4]!7", F: "[bb3,f4]/2", G: "~@10 f2@2 c3 bb2 f2@2",
  H: "~@10 [f2,c3] [f2,c3]@2 [f2,c3] [f2,c3]@2", // F5
  I: "~@2 [f2,c3] [f2,c3]@2 [f2,c3] [f2,c3]@3 [f2,c3] [f2,c3]@4 [bb3,f4]!2", // F5 Bb5
  J: "~@2 [eb3,bb3] ~@2 [eb3,bb3] ~@2 [eb3,bb3] ~@2 [eb3,bb3] ~@2 [bb3,f4]!2", K: "~@14 [bb3,f4]!2",
  L: "~@4 [f3,c4] ~@2 [f3,c4] ~@2 [f3,c4]!6", M: "[bb2,f3]/2", N: "~@6 [f3,c4]!10", O: "[bb2,f3]!16",
  P: "~ c5@3, [f2,c3]", Q: "~@2 [f3,bb3]!2 ~ [f3,bb3]!2 ~ [f3,bb3]!2 ~ [f3,bb3]!2 ~ [f3,bb3]!2",
  R: "[f3,c4]@4 c4@2 d4@2 c4@2 d4@2 d4@2 eb4 c4, ~ f3!3", S: "[bb2,f3]",
  T: "~@2 [f3,c4] ~@2 [f3,c4] ~@2 [f3,c4] ~@2 [f3,c4] ~@2 [f3,c4] ~", U: "f3 ~ bb3@2 f3 ~ bb3@2, ~ f3@3 ~ f3@3",
  V: "~ c4 ~ c4, a3 ~ a3 ~, ~ f3@3 ~ f3@3", W: "g3 ~ d4@2 f3 ~ d4@2, ~ f3@3 ~ g3@3",
  X: "a3@2 ~@2 c4@4 [f3,c4]!8, ~ f3@3 ~@4", Y: "~@8 [bb3,f4]!8", Z: "[f3,bb3]@2 [f3,bb3]@3 [f3,bb3]@2 [f3,bb3]",
  AA: "~@2 c4@2 ~ c4@3, f3!2", AB: "[g3,d4]", AC: "[f3,c4]@10 [f3,c4]!6", AD: "~@2 bb3@2 ~ bb3@3, f3@7 ~ f3@7 ~",
  AE: "~@2 c4@2 ~ c4@3, f3@7 ~ f3@8", AF: "f3@4 [c4,f4]!7 c4 [f3,c4]!2 [c4,f4]!2, c4@3 ~@13",
  AG: "~@4 c4@4 [f3,c4]!8, f3 ~", AH: "[bb2,f3]/3",
})).s("gm_distortion_guitar").gain(0.36).pan(0.8)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@5 A B C B A B C B A B C B A B C B D E F G A B C B A B C B D E F G A B C B A B C B H I J K H L J K ~@4 A B C B A B C
  B H I J K H L J K H I J K H L J K H L J K H L J K H L J K H L J K H L J K H L J K H L J K M@3 ~
>`.pickRestart({
  A: "~@2 [bb2,f3] ~@2 [bb2,f3] ~@2 [bb2,f3] ~@2 [bb2,f3] ~@2 [bb2,f3] ~", // Bb5
  B: "~@2 [f2,c3] ~@2 [f2,c3] ~@2 [f2,c3] ~@2 [f2,c3] ~@2 [f2,c3] ~", // F5
  C: "~@2 [g2,d3] ~@2 [g2,d3] ~@2 [g2,d3] ~@2 [g2,d3] ~@2 [g2,d3] ~", // G5
  D: "~@2 [f3,bb3] ~@2 [f3,bb3] ~@2 [f3,bb3] ~@2 [f3,bb3] ~@2 [f3,bb3] ~", // Bb5
  E: "[f3,a3]!2 ~ [f3,a3]!2 ~ [f3,a3]!2 ~ [f3,a3]!2 ~@5", // F
  F: "[d3,g3] ~@2 [d3,g3] ~@2 [d3,g3] ~@2 [d3,g3] ~@2 [d3,g3] ~ [d3,g3]!2", // G5
  G: "eb3 bb2 ~ [bb2,eb3] ~@2 [bb2,eb3] ~@2 [bb2,eb3] ~@3 bb2 ~@2", H: "[bb2,f3]", I: "[c3,f3]", J: "[g2,d3]",
  K: "[f2,c3]", L: "[a2,f3]", M: "[bb2,f3]/3",
})).s("gm_overdriven_guitar").gain(0.31)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@5 A@12 B@4 C@4 A@8 C@4 A@8 D@2 E F@3 E G H@2 E G I@4 C@4 D@2 E F@3 E G H@2 E F@3 E G J K E G J K E G J K E G J K E G
  J K E G J K E G J K E G L@3 ~
>`.pickRestart({
  A: "[[bb3,d4]@15 ~ [a3,c4]@16 [g3,bb3]@16 [f3,a3]@16, f4]/4", // Bb Am Gm F
  B: "[[bb3,d4]@15 ~ [a3,c4]@15 ~ [g3,bb3]@16 [f3,a3]@16, f4]/4", // Bb Am Gm F
  C: "[[bb3,d4]@15 ~ [a3,c4]@16 [g3,bb3]@15 ~ [f3,a3]@16, f4]/4", D: "[[d4,bb4] [c4,a4], f4]/2", E: "[bb3,d4,g4]",
  F: "[[a3,c4] [d4,bb4] [c4,a4], f4]/3", G: "[a3,c4,f4]", H: "[[d4,bb4] [c4,a4], f4@31 ~]/2",
  I: "[[bb3,d4]@15 ~ [a3,c4]@16 [g3,bb3]@16 [f3,a3]@16, f4@61 ~@3]/4", J: "[d4,bb4]", K: "[c4,a4]", L: "[d4,f4,bb4]/3",
})).s("gm_synth_strings_1").gain(0.14).pan(0.6)

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

// drums · snare
const snare = s("sd").struct("<~@5 A@31 B A@7 C A@7 D A@15 D A@11 E A@11 D A@7 D A@7 F ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x ~@2 x!2 ~@3", C: "~@4 x ~@7 x!2 ~@2", D: "~@4 x ~@7 x ~ x!2",
  E: "~@4 x ~@3 x ~@3 x!3 ~", F: "~ x!6 ~",
})).gain(0.76)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@56 [~@5 x ~@2] ~@56>").gain(0.76)

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

// drums · high tom
const high_tom = s("ht").struct("<~@80 [~@11 x ~@4] ~@32>").gain(0.76)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 B A ~@2 B A ~@3 A ~@2 B A ~@2
  B A ~@3 C ~@2 D E ~@3 C ~@2 D A ~ F ~ A ~@3
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x!2 ~@2", D: "~@3 x", E: "~ x ~@2", F: "x!2 ~ x",
})).gain(0.69)

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

stack(
  bass, distortion_guitar, distortion_guitar_2, overdriven_guitar, synth_strings_1, kick, snare, hihat, mid_tom,
  open_hat, high_tom, crash, ride
)

More by Berte