Strudelify

Amici non ne ho

Berte

KeyB minorTempo101 bpm
0:00/0:00
// Amici non ne ho — Berte
// 101 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(101/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 · synth bass 2
const bass = note(`<
  ~@25 A B@2 C@2 D@2 E@2 F@2 G H@2 I J@2 K L M@2 N@2 O@2 D@2 P@2 D@2 Q@2 F@2 G R@2 S T@2 U V W@3 S T@2 U V X@2 P@2 D@2
  P@2 Y@2 B@2 Z@4
>`.pickRestart({
  A: "~@3 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1",
  B: "[~ f#1@2 b1 ~@2 b1 a1 ~ b1 ~@2 b1 a1@2 b1@2 d2@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  C: "[~ f#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1@2 d2@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1 ~ b1]/2",
  D: "[~ f#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1@2 d2@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  E: "[~ f#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 f#1@2 a1@2 a#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1 ~ b1]/2",
  F: "[~ f#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1@2 d2@2 g1 ~@2 g1 e1@2 g1@7]/2", G: "~ g1!2 a1 ~@2 a1 f#1@2 a1@7",
  H: "[~ f#1@2 d1@3 d1 d2@2 d1@3 ~ d1@2 d2@2 d1@2 g1@3 g1 d2@2 g1@3 ~ g1@3]/2", I: "~ g1!2 a1@3 a1 e2@2 a1@3 ~ a1@3",
  J: "[a1 g1@2 a1@3 a1 e2@2 a1@3 f#1 f#1@2 a1@2 a#1@2 b1@3 b1 b1@2 b0@7]/2", K: "~ b0!2 g1@3 g1 d2@2 g1@3 ~ g1@3",
  L: "~ e1 g1 a1@3 a1 e2@2 a1@3 ~ a1@3",
  M: "[a1 g1@2 a1@3 a1 e2@2 a1@3 f#1 f#1@2 a1@2 a#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  N: "[~ f#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1@2 d2@2 f#1 ~@2 f#1 e1@2 f#1@7]/2",
  O: "[~ f#1!3 ~@2 f#1 e1 ~ f#1@3 f#1 f#1@2 a1@2 a#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  P: "[~ f#1 ~ b1 ~@2 b1 a1 ~ b1 ~@2 b1 a1@2 b1@2 d2@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  Q: "[~ f#1@2 b1 ~@2 b1 a1 ~ b1 ~@2 b1 f#1@2 a1@2 a#1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  R: "[~ f#1@2 d1@3 d1 d2 ~ d1@3 ~ d1@2 d2@2 d1!2 g1@3 g1 d2 ~ g1@3 ~ g1@3]/2", S: "~ g1!2 a1@3 a1 e2 ~ a1@3 ~ a1@3",
  T: "[a1 g1@2 a1@3 a1 e2 ~ a1@3 f#1 f#1@2 a1@2 a#1@2 b1@3 b1 b1@2 b0@7]/2", U: "~ b0!2 g1@3 g1 d2 ~ g1@3 ~ g1@3",
  V: "~ e1 g1 a1@3 a1 e2 ~ a1@3 ~ a1@3",
  W: "[a1 g1@2 a1@3 a1 e2 ~ a1@3 f#1 f#1@2 a1@2 b1@2 d1@3 d1 d2 ~ d1@3 ~ d1@2 d2@2 d1!2 g1@3 g1 d2 ~ g1@3 ~ g1@3]/3",
  X: "[a1 g1@2 a1@3 a1 e2 ~ a1@3 f#1 f#1@2 a1@2 b1@2 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  Y: "[~ f#1@2 b1 ~@2 b1 a1@2 b1!2 a1 b1 b2@2 a2@4 b1 ~@2 b1 a1@2 b1 ~@2 b1 a1@2 b1]/2",
  Z: "[~ f#1@2 b1 ~@2 b1 a1@2 b1!2 ~ b1 a1 b1 a1@2 d2@2 b1@3 b2@3 b1@26 ~@13]/4",
})).s("gm_synth_bass_2").gain(0.48)

// chords · synth strings 1
const synth_strings_1 = note("<~ A@16 B@8 A@8 C@8 D@8 A@8 C@8 E@8 F@4 A@8 G@7>".pickRestart({
  A: "[~@3 [b2,a3,c#4,d4,f#4]@32 [b2,f#3,a3,c#4,e4]@32 [b2,f#3,a3,b3,d4]@32 [b2,f#3,a3,c#4,e4]@29]/8", // Bm7 F#m7 Bm7 F#m7
  B: "[~@3 [b2,a3,b3,d4,f#4]@32 [a2,e3,b3,c#4,e4]@32 [b2,f#3,a3,b3,d4]@32 [a2,e3,b3,c#4,e4]@29]/8", // Bm7 A Bm7 A
  C: "[~@3 [b2,f#3,a3]@32 [g2,d3,f#4]@16 [a2,e3,b3,c#4,e4]@16 [d3,a3,d4,f#4]@16 [g2,b3,d4,g4]@16 c#4@16 d4@13, ~@3 [b3,d4]@48 ~@48 [a2,a3,e4]@29]/8", // B7 Gmaj7 A D G Bm A5
  D: "[~@3 [b2,b3,d4,f#4]@16 [g2,b3,d4,g4]@16 [a2,a3,c#4,e4]@32 [b2,a3,d4,f#4]@32 [f#2,a3,c#4,e4]@29]/8", // Bm G A Bm7 F#m7
  E: "[~@3 [b2,b3,d4,f#4]@16 [g2,b3,d4,g4]@16 [a2,a3,c#4,e4]@32 [d3,a3,d4,f#4]@16 [g2,b3,d4,g4]@16 c#4@16 d4@13, ~@99 [a2,a3,e4]@29]/8", // Bm G A D G A5
  F: "[~@3 [b2,b3,d4,f#4]@16 [g2,b3,d4,g4]@16 [a2,a3,c#4,e4]@29]/4", // Bm G A
  G: "[~@3 [b2,f#3,a3,b3,d4]@32 [b2,f#3,a3,c#4]@32 [b1,b2,f#3,a3,b3,d4]@32 ~@13]/7", // Bm7 F#m Bm7
})).s("gm_synth_strings_1").gain(0.1)

// chords · pad warm
const pad_warm = note("<~ A@3 ~@5 A@3 ~@80>".pickRestart({
  A: "[~@13 [b3,e4,a4]@32 ~@3]/3", // Esus4
})).s("gm_pad_warm").gain(0.18)

// chords · distortion guitar
const distortion_guitar = note("<~@3 A@2 ~@17 B@3 ~@8 C@2 D E F G@8 H@3 I@8 J K D E F L@8 M@8 N@8 ~@6>".pickRestart({
  A: "[~@17 e5@15, ~@13 b5@9 ~@10]/2", B: "[~@11 f#5@8 e5@29]/3",
  C: "[~@3 [f#3,b3]@16 [f#3,b3] ~@2 [f#3,b3] ~@2 [f#3,b3]@2 ~ b3 ~ b3 d4]/2", // B5
  D: "c#4 d4 c#4 [f#3,b3] b3 ~ [f#3,b3] ~ b3 [f#3,b3]@5 b3!2", E: "b3!3 [e3,a3] a3 ~ [e3,a3] a3!2 [e3,a3]@7",
  F: "~@3 [d3,d4,a4]@13", // D5
  G: "[~ d4@2 [g2,d4,g4]@15 ~ [a2,a3,e4]@15 ~ d4@6 e4@6 d4@4 b3@12 b3@4 d4@12 d4@4 a3@15 ~ [a3,a4]@16 b3 ~@2 b3 ~@2 b3 ~@2 b3 ~@2 b3, ~@35 [a2,a3]@16 [b2,f#4]@16 [g2,g3]@16 e4@31 ~@14, ~@83 a2@24 ~@21]/8", // G5 A5 A B5 G
  H: "[~ b3 ~ b3 ~@2 b3 ~@2 b3 ~@2 b3 ~ b3 f#4@2 b4@2 b3 ~@2 b3 ~@2 b3 ~@2 b3 ~@2 b3@2 b3 ~ b3 ~@12]/3",
  I: "[~@3 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4@2 b4@2 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4@2 b4@2 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4@2 b4@2 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4]/8", // B5
  J: "~ b4@2 [f#3,b3] ~@2 [f#3,b3] ~@2 [f#3,b3]@2 ~ b3 ~ b3 [f#3,b3]", // B5
  K: "~ [f#3,b3] ~ [f#3,b3] ~@2 [f#3,b3] ~@2 [f#3,b3]@2 ~ b3 ~ b3 d4", // B5
  L: "[~ d4@2 [g2,d4,g4]@15 ~ [a2,a3,e4]@15 ~ d4@6 e4@6 d4@4 b3@12 b3@4 d4@12 d4@4 a3@15 ~ [a3,a4]@16 [d3,d4,a4]@13, ~@35 [a2,a3]@16 [b2,f#4]@16 [g2,g3]@16 e4@31 ~@14, ~@83 a2@24 ~@21]/8", // G5 A5 A D5 A B5 G
  M: "[~ d4@2 [g2,d4,g4]@15 ~ [a2,a3,e4]@15 ~ d4@6 e4@6 d4@4 b3@12 b3@4 d4@12 d4@4 [a3,e4]@16 [a3,a4]@16 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3], ~@35 [a2,a3]@16 [b2,f#4]@16 [g2,g3]@16 a2@24 ~@21]/8", // G5 A5 A B5 A B5 G
  N: "[~ [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4@2 b4@2 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4@2 b4@2 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4@2 b4@2 [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] ~ [f#3,b3]@2 ~ [f#3,b3] ~@2 [f#3,b3]@2 ~ [f#3,b3]@2 [f#3,b3] f#4@2 b4@2 ~@13]/8", // B5
})).s("gm_distortion_guitar").gain(0.2)

// other · distortion guitar
const distortion_guitar_2 = note("<~@8 A@2 ~@67 B C D E F@2 G H ~@7>".pickRestart({
  A: "[~ a4@17 ~@14]/2", B: "~@9 f#5@7", C: "~ e5 d5 b4@6 d5@7", D: "~@5 f#4 a4 c#5@2 c#5@6 b4",
  E: "a4 f#4 b4 a4@8 ~@5", F: "[~@9 d5@10 c#5@6 a4@7]/2", G: "~ f#4 b4@6 a4 f#4 a4@2 e4@3 d4", H: "e4@9 f#4@7",
})).s("gm_distortion_guitar").gain(0.19)

// chords · pad metallic
const pad_metallic = note("<~@5 A@3 ~@4 B@2 ~@2 C@2 ~ D@3 E@4 ~@9 F@3 ~@9 G@3 ~@10 H@2 ~@30>".pickRestart({
  A: "[~@7 d5@16 b4@24 ~]/3", B: "[~@3 a5@22 ~@7]/2", C: "[~@3 a5@16 ~@13]/2", D: "[~@3 a1@32 ~@13]/3",
  E: "[~@25 a5@17 ~@22, ~@13 b5@13 ~@38, ~@19 a1@32 ~@13]/4", F: "[~@3 g1@16 [a1,a3,e4]@16 ~@13]/3",
  G: "[~@3 f#1@32 ~@13]/3", H: "[~@3 [a3,e4]@16 ~@13]/2",
})).s("gm_pad_metallic").gain(0.3)

// chords · pad poly
const pad_poly = note("<~@17 A@3 ~ A@3 ~@9 A@3 ~@9 B@4 ~@8 C@3 ~@25 D@3 ~@4>".pickRestart({
  A: "[~@9 b1@26 ~@13]/3", B: "[~@9 b1@26 ~@6 [c#5,f#5,b5]@22 ~]/4", C: "[~@9 [b1,c#5,f#5,b5]@26 ~@13]/3",
  D: "[~@15 [c#5,f#5,b5]@20 ~@13]/3", // F#sus4
})).s("gm_pad_poly").gain(0.3).pan(0.3)

// other · pan flute
const pan_flute = note("<~@32 A ~ A ~@11 B ~@18 C@2 ~ D E ~@22>".pickRestart({
  A: "~@2 f#4 a4 b4 ~@11", B: "~@3 d4 e4 ~ e4@2 d4 e4 ~ f4@2 e4 d4 ~", C: "[~@9 d5 ~ c#5 d5 ~ c#5 d5@2 c#5 d5 ~@13]/2",
  D: "~@2 d6 c#6 a5 f#5 e5 c#5 b4 a4 d5 c#5 b4 a4 f#4 e4", E: "c#4 a3@2 ~@13",
})).s("gm_pan_flute").gain(0.21).pan(0.8)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@37 A ~ B ~ C ~ D ~ E@2 ~@14 A ~ B ~ C ~ D ~ A ~ B ~ C ~ F ~@16>".pickRestart({
  A: "~@3 [d4,f#4,a4]@12 ~", B: "~@3 [c#4,e4]@12 ~", C: "~@3 [d4,b4]@12 ~", D: "~ e4@3, ~@3 [a3,c#4]@12 ~",
  E: "[~@9 [b2,b3,f#4]@17 ~@6]/2", F: "~@4 e4@9 ~@3, ~@3 [a3,c#4]@9 ~@4",
})).s("gm_electric_guitar_clean").gain(0.21)

// other · electric guitar muted
const electric_guitar_muted = note("<~@49 A B C B C B C B C B D E ~@16 A B C B C B C B C B D F G ~@2>".pickRestart({
  A: "~@3 b2!2 ~ b2@2 b2@2 b2 ~ b2 ~ b2 ~", B: "b2@2 ~ b2!2 ~ b2 ~ b2!3 ~ b2 ~@2 b2",
  C: "b2!5 ~ b2@2 b2@2 b2 ~ b2 ~ b2 ~", D: "b2!7 ~ b2!3 ~ b2 ~ b2 ~", E: "b2 ~@2 a2!2 ~ a2 ~ a2!3 ~ a2!4",
  F: "b2 ~@2 b2!2 ~ b2 ~ b2!3 ~ b2!4", G: "b2 ~@15",
})).s("gm_electric_guitar_muted").gain(0.23).pan(0.3)

// other · electric guitar muted · soft notes
const electric_guitar_muted_2 = note("<~@49 A B A B A B A B A B C ~@17 A B A B A B A B A B C ~@4>".pickRestart({
  A: "~@15 b2", B: "~@13 b2!2 ~", C: "~@13 b2 ~@2",
})).s("gm_electric_guitar_muted").gain(0.12).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D C D C D C D C D
  C D@3 C D C D C D C D C E D@2 C D C D C D C D C D@3 C D F ~@2
>`.pickRestart({
  A: "~@3 x ~@5 x ~@3 x ~@2", B: "~ x ~ x ~@5 x ~@3 x ~@2", C: "~@3 x ~@2 x ~@2 x ~@3 x ~@2",
  D: "~ x ~ x ~@2 x ~@2 x ~@3 x ~@2", E: "~ x ~ x ~@2 x ~@2 x ~ x ~@2 x ~", F: "~ x ~ x ~@12",
})).gain(0.3)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ [~@3 x ~@4]!48 ~@43>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<~ A@59 B A C A C A C A C A C A@3 C A B A@8 D A@3 ~@3>".pickRestart({
  A: "~@7 x ~@7 x", B: "~@5 x ~@5 x ~@3 x", C: "~@7 x ~@4 x ~@2 x", D: "x ~@6 x ~@7 x",
})).gain(0.3)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A B@47 A B@10 C A B@14 C A B@10 C ~@3>".pickRestart({
  A: "~@2 x ~ x!4", B: "x ~ x ~ x!4", C: "x!2 ~@2",
})).gain(0.05)

// drums · low tom
const low_tom = s("lt").struct("<~@57 [~ x ~@14] ~@11 [~ x ~@14] ~@7 [~ x ~@14] ~@14>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@56 A B ~@2 C D ~@6 E ~@7 F B ~@8 G ~@5>".pickRestart({
  A: "~@9 x ~@2 x ~@2 x", B: "x", C: "~@8 x ~@4 x ~ x", D: "x!2 ~@14", E: "~@9 x ~@2 x ~@3", F: "~@8 x ~@2 x ~@3 x",
  G: "~@3 x",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@26 A@23 ~ A@10 B A@12 ~ A@16 ~@2>".pickRestart({
  A: "~ x ~@14", B: "~ x ~@3 x ~@10",
})).gain(0.2)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@2 [~ x ~@14]!24 ~@66>").gain(0.1)

// drums · crash
const crash = s("cr").struct(`<
  ~@37 A ~@7 B ~ B C A ~@7 A ~@3 A ~@7 A ~@2 D E ~@3 A ~@3 A ~@3 A ~@3 F ~@2
>`.pickRestart({
  A: "~@3 x ~@12", B: "~@9 x ~@6", C: "~@15 x", D: "~@11 x ~@2 x ~", E: "~ x ~ x ~@12", F: "~@3 x ~@5 x ~@6",
})).gain(0.25)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@25
  [~@9 x!2 ~@2 x ~@2]
  [~ x!2 ~@6 x!2 ~@2 x ~@2]!23
  [~@9 x!2 ~@2 x ~@2]
  [~ x!2 ~@6 x!2 ~@2 x ~@2]!39
  [~ x!2 ~@13]
  ~@2
>`).gain(0.63)

// drums · congas
const congas_2 = s("conga:18").struct("<~@25 [~@5 x!2 ~@7 x ~]!64 ~@3>").gain(0.63)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@25 [~@3 x]!64 ~@3>").gain(0.48)

// drums · congas
const congas_3 = s("conga:33").struct("<~@25 [~@7 x ~@7 x]!64 ~@3>").gain(0.63)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@25 [~@2 x!6] [x!8]!23 [~@2 x!6] [x!8]!39 [x!2 ~@6] ~@2>").gain(0.5)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@25
  [~@3 x ~ x ~ x ~ x ~ x ~ x ~ x]
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!23
  [~@3 x ~ x ~ x ~ x ~ x ~ x ~ x]
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!39
  [~ x ~ x ~@12]
  ~@2
// … 7 more lines

More by Berte