Strudelify

Restiamo qui

Nek

KeyG minorTempo83 bpm
0:00/0:00
// Restiamo qui — Nek
// 83 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): chitarraaggiuntasuccessivamente.
setcpm(83/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 · piano · "voce2"
const piano = note("<~@43 A B ~@2 C@3 ~@15 D@2 E@2 ~@21 F@2 ~ G@2 H@2 I J H@2 ~>".pickRestart({
  A: "~@6 d5 ~", B: "c5@5 ~ bb4@2 ~@8", C: "[~@6 [f4,eb5] [d5,g5]@10 ~@7]/3",
  D: "[d5@3 ~ d5 eb5 [c5,g5] [d5,a5]@4 ~@4 [c5,a5]]/2", // C5 D5 F
  E: "[[c5,a5]@2 [bb4,g5]@2 [bb4,g5]@2 [a4,f5]@2 [bb4,g5]@2 [c5,g5]@3 ~ [bb4,d5]@5 ~@13]/2", // F Eb Dm Eb C5 Bb
  F: "[d5@2 ~@2 c5@3 ~ bb4@2 c5@3 ~ a4@10 ~@8]/2", G: "[[eb4,g4,bb4,d5]@29 ~@3]/2", H: "[[d4,f4,a4,c5]@29 ~@3]/2",
  I: "[eb4,g4,bb4,d5]@13 ~@3", J: "[eb4,g4,a4,c5]@13 ~@3",
})).s("gm_piano").gain(0.22)

// bass · acoustic bass · "basso"
const bass = note(`<
  A B C D@2 C@2 D E ~@16 F G H I J G H@2 C@2 D@2 C@2 D K C@2 D@2 C@2 D@2 L M N O P M Q H C@2 D@2 C@2 D@2 L M N O P M R S
  P T U V C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 ~
>`.pickRestart({
  A: "~@12 d2 ~ [b1,c2,db2] [ab1,a1,bb1]", B: "[gb1,g1] ~@2 c2 eb2 g2 c2 g2 bb2 g2 bb2 c3 c2 c3@2 ~, c2 ~@7",
  C: "c2@2 ~ c2 eb2 g2 c2 g2 bb2 g2 bb2 c3 c2 c3@2 ~", D: "g1@2 ~ g1 bb1 d2 g1 d2 f2 d2 f2 g2 g1 g2@2 ~",
  E: "g1@2 ~ g1 bb1 d2 g1 g2 ~@8", F: "a2@13 ~@3", G: "d2@13 ~@3", H: "g2@13 ~@3", I: "c2@13 ~@3", J: "eb2@13 ~@3",
  K: "g1@2 ~ g1 bb1 d2 g1 [d2,d3] [c2,db2,d2] [g1,a1,b1] [d1,e1,f1] [f0,g0,b0,c1] [c0,d0,e0] ~@3", // D G Dm Fsus2 C
  L: "a1@2 ~ a2 d3 eb2 a2 c2 a2 eb2 c2 a1 a2 a2@2 ~", M: "d2@2 ~ f2 d3 bb2 gb2 d2 bb2 d2 d3 bb2 gb2 d2 d3@2",
  N: "a1@2 ~ bb1 d2 g2 d3 bb2 g2 bb2 g2 d2 bb1 g2@2 g1", O: "c2@3 ~@2 c2 g2 bb2 c2@2 c3 ~ c2 c3 g2 c2",
  P: "eb2@2 eb2@2 g2@2 bb2@2 eb3 bb2 g2 eb2 bb2 g2 eb2 bb1", Q: "g1@2 g2@2 ~ g2@2 ~ g2 bb1 g2 bb2 g2 bb2 d2 bb1",
  R: "g2@2 ~ g1 g2 d2 b1 g2 c3 g2 d2 g2 g1 d2 g2 b2", S: "g1 ~ g2@2 d2 g2 bb2 g2 d2 g2 d2 bb1 g1 bb1 d2 g2",
  T: "d2 d2@7", U: "g2!8", V: "g2!2 g2@5 ~",
})).s("gm_acoustic_bass").gain(0.3)

// chords · electric guitar jazz · "chitarra acustica 1"
const electric_guitar_jazz = note(`<
  ~ A@2 B@2 A@2 B C ~@8 A@2 B@2 A@2 B@2 D E F G H E I J A@2 B@2 A@2 B C A@2 B@2 A@2 B@2 D E F G H E I K A@2 B@2 A@2 B@2
  D E F G H E L M H N O ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 P@2 ~
>`.pickRestart({
  A: "~@2 [eb4,c5]!2 [eb4,c5]@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 ~ [eb4,bb4] [eb4,bb4]@2", // Cm Gm F Eb5
  B: "~@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 [c4,a4]@2 [bb3,g4]!2 ~ [d4,a4] [d4,a4]@2", // Gm F Eb D5
  C: "~@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 ~@8", D: "[a4,d5,g5]@3 ~ [a4,d5,g5]@3 ~ [a4,d5,g5]@3 ~ [a4,d5,g5]@3 ~",
  E: "[d4,bb4,d5]@3 ~ [d4,bb4,d5]@3 ~ [d4,bb4,d5]@3 ~ [d4,bb4,d5]@3 ~", // Gm
  F: "[a3,g4,bb4,d5]@3 ~ [a3,g4,bb4,d5]@3 ~ [a3,g4,bb4,d5]@3 ~ [a3,g4,bb4,d5]@3 ~", // Gm
  G: "[c4,eb4,bb4]@3 ~ [c4,eb4,bb4]@3 ~ [c4,eb4,bb4]@3 ~ [c4,eb4,bb4]@3 ~", // Cm7
  H: "[bb3,eb4,g4,c5]@3 ~ [bb3,eb4,g4,c5]@3 ~ [bb3,eb4,g4,c5]@3 ~ [bb3,eb4,g4,c5]@3 ~", // Cm7
  I: "[g4,c5,d5]@2 ~ [g4,c5,d5]@2 ~ [g4,c5,d5]@2 ~ [g4,c5,d5]@7", J: "[g4,bb4,d5,g5]@13 ~@3", K: "[g4,bb4,d5]@13 ~@3",
  L: "[a3,g4,c5,d5]@3 ~ [a3,g4,c5,d5]@3 ~ [a3,g4,c5,d5]@3 ~ [a3,g4,c5,d5]@3 ~", // Am7
  M: "[a3,g4,b4,d5]@3 ~ [a3,g4,b4,d5]@3 ~ [a3,g4,b4,d5]@3 ~ [a3,g4,b4,d5]@3 ~", N: "[d4,gb4,bb4,c5] [d4,gb4,bb4,c5]@7",
  O: "[g4,c5,d5]@13 ~@3", P: "~@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 [c4,a4]@2 g4!2 ~ [d4,a4] [d4,a4]@2",
})).s("gm_electric_guitar_jazz").gain(0.15)

// chords · acoustic guitar nylon · "chitarra acustica 2"
const acoustic_guitar_nylon = note(`<
  ~ A@2 B@2 A@2 B C D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 F G H I J G K L A@2 B@2 A@2 B C ~@8 F G H I J G K M A@2 B@2 A@2 B@2
  F G H I J G N@2 J O ~@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 P@2 ~
>`.pickRestart({
  A: "~@2 [eb4,c5]!2 [eb4,c5]@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 ~ [eb4,bb4] [eb4,bb4]@2", // Cm Gm F Eb5
  B: "~@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 [c4,a4]@2 [bb3,g4]!2 ~ [d4,a4] [d4,a4]@2", // Gm F Eb D5
  C: "~@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 ~@8", D: "c4@2 c4@2 [c4,bb4]!3 [c4,a4]@2 ~ [c4,a4]@2 ~ [c4,bb4] c4!2",
  E: "g3@2 g3@2 [g3,bb4]!3 [g3,a4]@2 ~ [g3,a4]@2 ~ [g3,bb4] g3!2", // Gm Gsus2 Gm
  F: "[a3,eb4,a4]@2 [a3,eb4,a4]@2 [a3,eb4,a4]!3 [a3,eb4,a4]@2 ~ [a3,eb4,a4]@2 ~ [a3,eb4,a4]@2 [a3,eb4,a4]", // Adim
  G: "[d4,bb4,f5]@2 [d4,bb4,f5]@2 [d4,bb4,f5]!3 [d4,bb4,f5]@2 ~ [d4,bb4,f5]@2 ~ [d4,bb4,f5]@2 [d4,bb4,f5]", // Bb
  H: "[g3,g4,bb4]@2 [g3,g4,bb4]@2 [g3,g4,bb4]!3 [g3,g4,bb4]@2 ~ [g3,g4,bb4]@2 ~ [g3,g4,bb4]!3", // Gm
  I: "[c4,g4,bb4]@2 [c4,g4,bb4]@2 [c4,g4,bb4]!3 [c4,g4,bb4]@2 ~ [c4,g4,bb4]@2 ~ [c4,g4,bb4]!3", // C7
  J: "[bb3,eb4,g4,c5]@2 [bb3,eb4,g4,c5]@2 [bb3,eb4,g4,c5]!3 [bb3,eb4,g4,c5]@2 ~ [bb3,eb4,g4,c5]@2 ~ [bb3,eb4,g4,c5]!3", // Cm7
  K: "[g4,c5,d5]@13 ~@3", L: "[g4,bb4,eb5]@13 ~@3", M: "g4@13 ~@3",
  N: "[g3,g4,b4]@2 [g3,g4,b4]@2 [g3,g4,b4]!3 [g3,g4,b4]@2 ~ [g3,g4,b4]@2 ~ [g3,g4,b4]!3", // G
  O: "[d4,gb4,bb4,c5] [d4,gb4,bb4,c5]@7", P: "~@2 [d4,bb4]!2 [d4,bb4]@2 [c4,a4]!2 [c4,a4]@2 g4!2 ~ [d4,a4] [d4,a4]@2",
})).s("gm_acoustic_guitar_nylon").gain(0.16)

// other · electric guitar clean · "chitarra elettrica 1"
const electric_guitar_clean = note("<~@57 A@2 B C ~@16 A@2 B C ~@21>".pickRestart({
  A: "[~@4 g3@2 ~@2 bb3@2 ~@2 c4@2 d4@15 ~@3]/2", B: "~@2 g3 ~ bb3 ~ c4 ~",
  C: "b3 a3@7 [g3,ab3,a3] [c2,e2,g2,b2,c3,e3,f3] [a0,b0,c1,f1,a1] ~@5, ~ bb3 ~@14", // Cmaj7 F
})).s("gm_electric_guitar_clean").gain(0.17)

// other · overdriven guitar · "chitarra elettrica 2"
const overdriven_guitar = note("<~@4 A@2 B C ~@25 D@2 E C ~@20 D@2 E C ~@16 D@2 E C ~@11 F G ~@8>".pickRestart({
  A: "[~@4 g3@2 ~@2 bb3@2 ~@2 c4@2 d4@14 [c4,db4] [b1,c2,d2,e2,f2,b2,c3,d3,e3,f3,g3,a3,b3] [e1,f1,g1,a1] ~]/2", // Dbmaj7 Bm7b5 Fmaj7
  B: "~@4 g3@2 ~@2 bb3@2 ~@2 [a3,bb3] c4@3", C: "a3@13 ~@3", D: "[~@4 g3@3 ~ bb3@3 ~ c4@2 d4@15 ~@3]/2",
  E: "~@4 g3@3 ~ bb3@3 ~ c4@3 ~", F: "~@8 g3@2 g3!6", G: "d5@3 ~@5, g3 ~@15",
})).s("gm_overdriven_guitar").gain(0.16)

// other · distortion guitar · "chitarra solista"
const distortion_guitar = note("<~@4 A@2 B C ~@25 D@2 E ~@21 D@2 E F ~@16 D@2 E F ~@11 G H ~@8>".pickRestart({
  A: "[~@4 g3@3 ~ bb3@3 ~ c4@2 d4@18]/2", B: "~@4 g3@3 ~ bb3@3 ~ c4@3 ~", C: "[bb3,b3] a3@15",
  D: "[~@4 g3@3 ~ bb3@3 ~ bb3 c4 d4@12 ~@2 [db3,d3] [d2,f2,a2,b2] [e1,f1,a1,c2] ~]/2", // Dmaj7 Bm7b5 Fmaj7
  E: "~@4 g3@3 ~ bb3@3 ~ [bb3,b3] c4@3", F: "a3@13 ~@3",
  G: "~@8 [g1,a1,b1] [a2,b2,f3,g3,c4,d4] [e4,g4,a4,d5,e5,f5] [g5,b5,c6,d6] [f6,a6,c7,e7] [c6,d6,f7] [g6,d7,e7,f7] ~", // G Dm7 Dm G Fmaj7 Dm7 G7
  H: "d5@3 ~@5",
})).s("gm_distortion_guitar").gain(0.19)

// other · church organ · "sinth"
const church_organ = note("<~@25 A B C D E B F G ~@23 C ~@45>".pickRestart({
  A: "a4@13 ~@3", B: "d4@13 ~@3", C: "g4@13 ~@3", D: "c5@13 ~@3", E: "eb4@13 ~@3", F: "[g4,c5]@13 ~@3",
  G: "[g4,bb4,g5]@13 ~@3", // Gm
})).s("gm_church_organ").gain(0.11)

// chords · acoustic guitar steel · "chitarraaggiuntasuccessivamente"
const acoustic_guitar_steel = note("<~@25 A ~ B ~ C ~ D E ~@69>".pickRestart({
  A: "c5 [a4,c5,eb5]@13 ~@2", B: "~ g5 ~ g5 ~@4", C: "~ [eb4,g4,bb4]@13 ~@2", D: "~@4 g4@3 ~ [g4,bb4,d5]@6 ~@2",
  E: "~ [d4,g4] [bb4,d5] [bb3,d4,g4,bb4,d5,g5]@13", // G5 Bb Gm
})).s("gm_acoustic_guitar_steel").gain(0.11)

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

// drums · rim
const rim = s("rim").struct("<~@72 [~@11 x ~@2 x ~] ~@29>").gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@7 B ~@15 C B ~@7 A@7 D A@7 E A@6 ~@2 A@7 F A@7 G A ~ H ~ A@7 I A@7 G A@9
>`.pickRestart({
  A: "x ~ x!3 ~ x!3 ~@3 x ~ x!2", B: "x", C: "~@15 x", D: "x ~ x!3 ~ x ~@9", E: "x ~ x!2 ~@10 x ~", F: "x ~ x!3 ~@11",
  G: "x ~ x!3 ~ x!2 ~@8", H: "~ x!7", I: "x ~ x!3 ~ x!2 ~@2 x ~ x ~@3",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A B@6 C ~@22 D E B@7 F B@7 G B@6 H I B@7 J B@7 K B ~ L M B@7 F B@7 N B@9
>`.pickRestart({
  A: "x", B: "x ~@2 x!2 ~@3", C: "~ x!2 ~@5", D: "x ~@2 x ~@12", E: "~@13 x!2 ~", F: "x ~@2 x ~@4",
  G: "x ~@5 x ~@3 x!2 ~@2 x ~", H: "x ~@3 x ~@6 x!2 ~@2 x", I: "~@9 x ~@6", J: "x ~@11 x!2 ~@2",
  K: "x ~@5 x ~@2 x!2 ~@5", L: "~@3 x!5", M: "~@11 x!5", N: "x ~@5 x ~@3 x!3 ~@3",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~ A@7 ~@23 B ~ A@7 ~ A@7 ~ A@6 C ~ A@7 ~ A@7 ~ A ~@3 A@7 ~ A@7 ~ A@9>".pickRestart({
  A: "~@5 x ~@2", B: "~@15 x", C: "~ x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@39 B ~@7 C ~@15 D ~@3 E ~@8 F ~@6 G F ~@8>".pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2", C: "~@15 x", D: "~ x", E: "~@6 x!6 ~@4", F: "x", G: "~@12 x!4",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  A B ~@2 C B ~@18 D B ~@5 E F B ~@3 B ~@3 B ~@6 G ~@6 H I B ~@3 B ~@2 G B ~@6 G B J K B@2 ~@2 K B ~@2 L B ~@6 M B ~@8
>`.pickRestart({
  A: "~@3 x", B: "x", C: "~@6 x!2", D: "~@13 x!3", E: "x ~@2 x ~@2 x ~@9", F: "x ~@14 x", G: "~@4 x ~@10 x",
  H: "~@2 x ~@2 x ~@4 x ~@5", I: "x ~@10 x ~@3 x", J: "x!2 ~@6", K: "~@7 x", L: "~@8 x ~@6 x", M: "~ x ~@2",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 A ~@15 B ~@6 C ~@24 D ~@8 E ~@6 F ~@2 G ~@9 E ~@16>".pickRestart({
  A: "~@7 x ~@8", B: "~@12 x!2 ~@2", C: "x ~@2 x ~@2 x ~@9", D: "~@5 x ~@2", E: "x", F: "~@15 x", G: "~@5 x!2 ~",
})).gain(0.48)

// drums · cowbell
const cowbell = s("cb").struct("<~@56 [~@5 x ~@2] ~@18 [~@3 x] ~@26>").gain(0.48)

// drums · ride
const ride = s("rd").struct("<[~@3 x] ~@3 [~@3 x] ~@97>").gain(0.48)

stack(
  piano, bass, electric_guitar_jazz, acoustic_guitar_nylon, electric_guitar_clean, overdriven_guitar, distortion_guitar,
  church_organ, acoustic_guitar_steel, kick, rim, snare, hihat, mid_tom, open_hat, high_tom, crash, tambourine, cowbell,
  ride
)

More by Nek