Strudelify
Ni na na cover art

1999 · Il Tempo Dell' Amore

Ni na na

Carboni

KeyF majorTempo118 bpm
0:00/0:00
// Ni na na — Carboni
// 118 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 2
const bass = note(`<
  A B C D A B C D E F D G E F D G H F H F H F H I@2 E F D G E F D G H F H F H F H I@2 J K L M J K L M ~ N O M P N O M P
  N O M P N O M P Q O Q O Q O Q P@2 J K L M J K L M J K L M J K L M J K L M ~@4
>`.pickRestart({
  A: "d1@8 bb1@7 ~", B: "c2@3 ~ f1@4", C: "bb1@13 ~ f1 ~", D: "f1@15 ~", E: "d1@15 ~", F: "bb1@15 ~", G: "c1@15 ~",
  H: "a1@15 ~", I: "c2/2", J: "d2 d3 d2 d3 bb1 bb2 bb1 bb2", K: "c2 c3 c2 c3 f1 f2 f1 f2",
  L: "bb1@2 bb2@2 bb1@2 bb2@2 bb1@2 bb2@2 bb1@2 bb2 ~", M: "f1 f2 f1 f2 f1 f2 f1 f2", N: "d2 d3 d2 d3 d2 d3 d2 d3",
  O: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2", P: "c2 c3 c2 c3 c2 c3 c2 c3", Q: "a1 a2 a1 a2 a1 a2 a1 a2",
})).s("gm_synth_bass_2").gain(0.56)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@4 B@4 C ~@2 D@2 E@2 ~ F@2 G H I J G K L M@2 N O M@2 N P Q R S T U T V W X A@4 Y@4 ~@2 Z@2 AA AB AC@2 AA AD AE@2 AA
  AF AG@3 AH AI AJ AK AL@2 G AM@2 A@4 Y@4 A@4 Y@4 A@4 AN@4
>`.pickRestart({
  A: "[d4@4 c4@2 ~@4 c4@4 ~@4 g3@4 f2@2 ~@2 a3@4 ~@4 d3@4 ~@4 e3@2 ~@2 f2@2 f2@15 ~, d2@4 bb2@4 c3@3 ~ f2@4 bb2@4 c3@3 ~@9, ~@6 d4@4 ~@4 d4@4 ~@4 c4@4 ab3 ~@3 f3@4 ~@4 g3@4 ~@2 a3@19 ~]/4",
  B: "[d4@4 c4@2 ~@4 c4@4 ~@4 g3@4 f2@2 ~@2 a3@4 ~@4 d3@4 ~@4 e3@2 ~@2 f2@2 f2@9 ~ g2@2 f2@2 e2@2, d2@4 bb2@4 c3@3 ~ f2@4 bb2@4 c3@3 ~@9, ~@6 d4@4 ~@4 d4@4 ~@4 c4@4 ab3 ~@3 f3@4 ~@4 g3@4 ~@2 f3@13 ~@7]/4",
  C: "d2@15 ~", D: "[~@8 f4@2 e4@4 d4@15 ~@3]/2", E: "[~@7 f3@7 ~@2, ~@5 f4@9 ~@2, ~@3 c4@4 ~]/2",
  F: "[[a3,c4]@2 ~ c4@2 ~ c4 ~ [f3,bb3]@3 ~@5, e4@12 ~@2 d4@9 ~@9, ~@2 a3@2 ~ a3@2 ~@9]/2", G: "[a3,c4,e4]@15 ~",
  H: "[f3,bb3]@7 ~@7 bb2@2, d4@5 bb3@3, ~ f3, ~@3 d4", I: "[a3,c4]@2 ~ a3@4 ~, e4@7 ~, ~@2 c4@5 ~",
  J: "[f3,bb3,d4]@15 ~", K: "[g3,c4,e4]@7 c3", L: "~@2 c3 [g3,bb3,e4]@2 [g3,c4]@3, [g3,bb3,e4]@3 ~@5",
  M: "[[d4,f4] a3 [d4,f4] a3@2 [d4,f4]@2 ~@2 [d4,f4]@4 bb3 [d4,f4] [bb2,bb3], d2@7 bb3@2 ~@7, ~@16 bb2@13 ~@3]/2", // Dm Bb
  N: "a3@2 [c4,f4]@2 a3@5 ~ a3@2 [c4,f4]@2 a3 ~, f2@15 ~", // F5
  O: "c3@5 ~@3 e4@2 f4@2 e4@2 c3@2, [g3,c4,e4]@9 ~@7, ~@6 c3@7 ~@3", // C
  P: "c3@5 ~ c3@4 ~@2 c4@2 [bb2,d4]@2, [g3,c4,e4]@9 ~ c3@4 ~@2", Q: "d4 e4@14 ~, [a2,a3,c4]@15 ~",
  R: "[d4,f4]@7 ~@3 d4@2 ~@2 d4@2, bb2@15 ~, bb3@11 ~ bb3@4, ~ f4", S: "~@6 a3@9 ~, [a2,c4]@15 ~, ~@4 e4@11 ~",
  T: "bb2@5 ~@9 f3@2, [f3,bb3,d4]@2 f3 d4, ~@6 bb2@9 ~, ~@5 bb3@3", U: "~@6 a3@9 ~, [a2,e4]@15 ~, ~@4 c4@11 ~",
  V: "~@3 a3@4 a2, c4@15 ~, a2@3 ~, ~@4 e4@11 ~",
  W: "[c3,g3]@3 ~@7 c3@3 ~ c3@2, [c4,e4]@6 c4@7 ~@3, ~@4 g3@9 ~@3, ~@4 c3@5 ~@7", // C5 C
  X: "~ c3 ~ [c3,f4]@2 c3 ~ c3, c4, [g3,e4]@2 g3@2 ~ g3@3, ~@3 e4", // F5 C
  Y: "[d4@4 c4@2 ~@4 c4@4 ~@4 g3@4 f2@2 ~@2 a3@4 ~@4 d3@4 ~@4 e3@2 ~@2 f2@2 f2@9 ~@7, d2@4 bb2@4 c3@3 ~ f2@4 bb2@4 c3@3 ~@9, ~@6 d4@4 ~@4 d4@4 ~@4 c4@4 ab3 ~@3 f3@4 ~@4 g3@4 ~@2 f3@13 ~@7]/4",
  Z: "[~@7 c4@8 ~, ~@3 f4 ~@4]/2", AA: "~@4 e4 f4 e4 c4", AB: "d4@5 ~@3", AC: "[~@12 f4@2 a3@13 ~@5]/2",
  AD: "~@2 d4@2 c4@2 d4@3 ~ c4@4 d4@2", AE: "[~ c4@2 bb3@2 c4@2 a3@7 ~@2, ~@14 ab3 ~@17]/2",
  AF: "d4 ~ d4@2 c4@2 d4@3 ~ c4@4 d4@2",
  AG: "[~@2 c4@4 bb3@4 c4@4 ab3 ~@7 f3@4 a3@3 ~ g3@6 ~@12, ~@7 a3@4 ~@13, ~@3 f2@2 ~@3, ~@10 c3@5 ~@9]/3",
  AH: "~@3 [c4,e4], e4@5 ~@3, ~@4 c4@7 ~@5, ~@6 a3@9 ~", AI: "[f3,bb3,d4]@11 ~ [f3,bb3,d4]@4",
  AJ: "~@10 a3@5 ~, a3@9 ~@7, ~@4 e4@11 ~, ~@6 c4@9 ~", AK: "[d4,f4]@7 ~@3 d4@2 ~@2 d4@2, bb3@5 ~ bb3@2, ~ f4",
  AL: "[a3@4 ~@6 c4@4 [f3,bb3,d4]@17 ~, ~@2 e4@3 ~@11, ~@3 a3@4 ~@9]/2", // Bb
  AM: "[~@22 f4@2 ~@5 c3@2 ~, c3@8 c3@6 ~@2 c3@7 ~ c3@4 ~@4, e4@4 c4@6 ~@2 c4@6 ~@2 c4@11 ~, ~@2 g3@7 ~ g3@6 ~@2 g3@13 ~, ~@6 e4@6 ~@2 e4@6 ~@6 e4@5 ~]/2",
  AN: "[d4@4 c4@2 ~@4 c4@4 ~@4 g3@4 f2@2 ~@2 a3@4 ~@4 d3@4 ~@4 e3@2 ~@2 f2@2 f2@15 ~, d2@4 bb2@4 c3@3 ~ f2@4 bb2@4 c3@3 ~@9, ~@6 d4@4 ~@4 d4@4 ~@4 c4@4 ab3 ~@3 f3@4 ~@4 g3@4 ~@2 f3@13 ~@7]/4",
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.3)

// chords · pad warm
const pad_warm = note(`<
  A B@3 A B@3 C@2 D E C@2 D E F G F G F G H@3 C@2 D E C@2 D E F G F G F G H@3 A I@3 A I@3 ~ C@2 D E C@2 D E J@2 D E J@2
  D E F G F G F G K@3 A I@3 A I@3 A I@3 A I@3 A B@3 A B@3
>`.pickRestart({
  A: "a3 bb3, [d4,f4]", B: "[[g3,c4,e4]@3 [a3,c4]@5 [bb3,d4]@8 [a3,c4]@8, ~ f4@7]/3", C: "[a3 bb3, [d4,f4]]/2",
  D: "[a3,c4,f4]", E: "[g3,c4,e4]", F: "[a3,c4,e4]", G: "[bb3,d4,f4]", H: "[a3 ~ bb3, e4, c4@2 ~, ~ g3@2]/3",
  I: "[[g3,c4,e4]@3 [a3,c4]@5 [bb3,d4]@8 [a3,c4]@8, ~ f4@5 ~@2]/3", J: "[[a3,d4] bb3, f4]/2",
  K: "[a3 g3 bb3, e4@3 ~, c4@2 ~]/3",
})).s("gm_pad_warm").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@3 [x!4]!47 ~ [x!4]!45 ~@4>").gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct("<[x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!98 ~@2>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x ~ x ~ x]!98 ~@2>").gain(0.48)

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

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x ~ x ~ x]!98 ~@2>").gain(0.64)

stack(bass, acoustic_guitar_steel, pad_warm, kick, snare, hihat, open_hat, ride, tambourine)

More by Carboni