Strudelify

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: 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 H D G I H J F I F J K@2 E F D G E H D G I H J F I F J K@2 L M N O L M P O ~ Q N O R Q N O R
  Q N O R Q N O R S N S N S N S R@2 L M P O L M P O L M P O L M P O L M N O ~@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: "bb1", I: "a1@15 ~", J: "a1", K: "c2/2", L: "d2 d3 d2 d3 bb1 bb2 bb1 bb2", M: "c2 c3 c2 c3 f1 f2 f1 f2",
  N: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2", O: "f1 f2 f1 f2 f1 f2 f1 f2",
  P: "bb1@2 bb2@2 bb1@2 bb2@2 bb1@2 bb2@2 bb1@2 bb2 ~", Q: "d2 d3 d2 d3 d2 d3 d2 d3", R: "c2 c3 c2 c3 c2 c3 c2 c3",
  S: "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 K L M N@2 O P N@2 O Q R S T U V U W X Y A@4 Z@4 ~@2 AA@2 AB AC AD@2 AB AE AF@2 AB
  AG AH@3 AI AJ AK AL AM@2 K AN@2 A@4 Z@4 A@4 Z@4 A@4 AO@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]@7 ~",
  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: "[a3,c4,e4]@15 ~", L: "[g3,c4,e4]@7 c3",
  M: "~@2 c3 [g3,bb3,e4]@2 [g3,c4]@3, [g3,bb3,e4]@3 ~@5", // Edim C5 Edim
  N: "[[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
  O: "a3@2 [c4,f4]@2 a3@5 ~ a3@2 [c4,f4]@2 a3 ~, f2@15 ~", // F5
  P: "c3@5 ~@3 e4@2 f4@2 e4@2 c3@2, [g3,c4,e4]@9 ~@7, ~@6 c3@7 ~@3", // C
  Q: "c3@5 ~ c3@4 ~@2 c4@2 [bb2,d4]@2, [g3,c4,e4]@9 ~ c3@4 ~@2", R: "d4 e4@14 ~, [a2,a3,c4]@15 ~",
  S: "[d4,f4]@7 ~@3 d4@2 ~@2 d4@2, bb2@15 ~, bb3@11 ~ bb3@4, ~ f4", T: "~@6 a3@9 ~, [a2,c4]@15 ~, ~@4 e4@11 ~",
  U: "bb2@5 ~@9 f3@2, [f3,bb3,d4]@2 f3 d4, ~@6 bb2@9 ~, ~@5 bb3@3", V: "~@6 a3@9 ~, [a2,e4]@15 ~, ~@4 c4@11 ~",
  W: "~@3 a3@4 a2, c4@15 ~, a2@3 ~, ~@4 e4@11 ~",
  X: "[c3,g3]@3 ~@7 c3@3 ~ c3@2, [c4,e4]@6 c4@7 ~@3, ~@4 g3@9 ~@3, ~@4 c3@5 ~@7", // C5 C
  Y: "~ c3 ~ [c3,f4]@2 c3 ~ c3, c4, [g3,e4]@2 g3@2 ~ g3@3, ~@3 e4", // F5 C
  Z: "[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",
  AA: "[~@7 c4@8 ~, ~@3 f4 ~@4]/2", AB: "~@4 e4 f4 e4 c4", AC: "d4@5 ~@3", AD: "[~@12 f4@2 a3@13 ~@5]/2",
  AE: "~@2 d4@2 c4@2 d4@3 ~ c4@4 d4@2", AF: "[~ c4@2 bb3@2 c4@2 a3@7 ~@2, ~@14 ab3 ~@17]/2",
  AG: "d4 ~ d4@2 c4@2 d4@3 ~ c4@4 d4@2",
  AH: "[~@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",
  AI: "~@3 [c4,e4], e4@5 ~@3, ~@4 c4@7 ~@5, ~@6 a3@9 ~", AJ: "[f3,bb3,d4]@11 ~ [f3,bb3,d4]@4",
  AK: "~@10 a3@5 ~, a3@9 ~@7, ~@4 e4@11 ~, ~@6 c4@9 ~", AL: "[d4,f4]@7 ~@3 d4@2 ~@2 d4@2, bb3@5 ~ bb3@2, ~ f4",
  AM: "[a3@4 ~@6 c4@4 [f3,bb3,d4]@17 ~, ~@2 e4@3 ~@11, ~@3 a3@4 ~@9]/2", // Bb
  AN: "[~@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",
  AO: "[d4@2 c4 ~@2 c4@2 ~@2 g3@2 f2 ~ a3@2 ~@2 d3@2 ~@2 e3 ~ f2 f2@8, 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@12 ~@8]/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