Strudelify

Inno nazionale

Carboni

KeyA minorTempo121 bpm
0:00/0:00
// Inno nazionale — Carboni
// 121 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 29.
setcpm(121/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 · pad warm
const pad_warm = note(`<
  ~ A@2 B@2 C@2 D@2 E@3 F E@3 F C@2 D@2 E@3 F E@3 F C@2 D@2 E@3 F E@3 F C@2 G@4 H@2 C@2 G@4 H@2 E@3 F E@3 F C@2 D@2 E@3
  F E@3 F C@2 D@2 ~@8 C@2 G@4 H@2 C@2 G@4 H@2 C@2 G@4 H@2 I@3 ~@3
>`.pickRestart({
  A: "[~@4 [e3,a3,c4]@27 ~]/2", B: "[[e3,g3,b3]@31 ~]/2", C: "[[e3,a3,c4]@31 ~]/2", D: "[[d3,g3,b3]@31 ~]/2",
  E: "[[e3,a3,c4]@19 ~ e3@12 d3@16, ~@20 [g3,b3]@27 ~]/3", F: "[d3,f#3,a3]", G: "[e3@32 d3@31 ~, [g3,b3]@63 ~]/4",
  H: "[[d3,f#3,a3]@31 ~]/2", I: "[[e3,a3,c4]@43 ~@5]/3",
})).s("gm_pad_warm").gain(0.08)

// other · distortion guitar
const distortion_guitar = note(`<
  A B A C A D A C ~@8 A B A C ~@8 A B A C ~@7 E F G H I J K L M N O P Q R K L M N S ~@6 A B A C ~@8 T U A C ~@7 V W G H
  I J K L M N X P Q R K L M Y X P Q R K L M N Z@6
>`.pickRestart({
  A: "~@5 e3!3", B: "a2@3 ~@5", C: "g2@3 ~@5", D: "a2@5 ~@11", E: "~@15 e4",
  F: "e4 ~ e4!2 ~@2 d#4 e4 ~ d#4 e4 ~ e4 ~ e4 ~", G: "a3@13 ~ a3!2", H: "a3@6 b3 c4", I: "e4@13 ~ e4!2",
  J: "e4@11 ~ c4@2 e4@2", K: "d4@13 ~ d4!2", L: "d4@6 c4 b3", M: "c4 b3 a3@4 c4 b3 c4 b3 a3@4 c4 b3",
  N: "c4 b3 a3 b3 c4 b3 a3 b3 c4 b3 a3 b3 c4 b3 a3 g3", O: "a3", P: "a3@11 ~ c4@2 e4@2", Q: "e3@13 ~ e3!2",
  R: "e3@11 ~ c4@2 e4@2", S: "a2 ~", T: "~@5 e4!3", U: "a3@3 ~@5", V: "~@15 e3",
  W: "e3 ~ e3!2 ~@2 d#3 e3 ~ d#3 e4 ~ e4 ~ e4 ~", X: "a3@14 g3 g#3",
  Y: "c4 b3 a3 b3 c4 b3 a3 b3 c4 b3 a3 b3 ~ b3 a3 g3, ~@6 c4 ~", Z: "[a2@43 ~@5]/6",
})).s("gm_distortion_guitar").gain(0.25).pan(0.4)

// chords · flute
const flute = note(`<
  ~@25 A ~@3 A ~ B ~@5 A ~@3 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~@9 A ~ B ~@9 A ~ B ~@9 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B
  ~ C ~ D ~@7
>`.pickRestart({
  A: "[c4,e4,a4] ~ [c4,e4,a4]!2 ~ [c4,e4,a4]!2 ~@9", B: "[b3,e4,g4] ~ [b3,e4,g4]!2 ~ [b3,e4,g4]!2 ~@9",
  C: "[b3,d4,g4] ~ [b3,d4,g4]!2 ~ [b3,d4,g4]!2 ~@9", D: "[a3,d4,a4] ~ [a3,d4,a4]!2 ~ [a3,d4,a4]!2 ~@9",
})).s("gm_flute").gain(0.13)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D A B E F A G H I J G K I A B C D A G L I A G L I A B C D J G K I J G K I M N O P Q R S T M P M P U R S V A W
  U X O P Y Z M P AA AB M P Q AC M N Q AD M P AA AE ~@7 AF AG P O P Q R S AH AG P A P Q R S AH A P A P Q R AI AJ AK@3
  ~@3
>`.pickRestart({
  A: "a1@2 ~@4 g1 ~ a1@2 ~@6", B: "a1 ~@2 a1 g1@2 g#1@2 a1@2 ~@6", C: "e1@2 ~@4 d1 ~ g1@2 ~@6",
  D: "e1@2 ~ e1 e1@2 d1@2 g1@2 ~@6", E: "e1 ~@2 d1 g1 ~@3", F: "e1 ~@2 e1 e1@2 d1@2 g1@2 ~@6",
  G: "a1 ~@2 a1 g1@2 g#1 ~ a1@2 ~@6", H: "g1@2 ~@4 d1 ~ g1@2 ~@6", I: "d1 ~@2 d1 c2@2 c#2@2 d2 ~@7",
  J: "a1 ~@2 g1 a1 ~@3", K: "g1@2 ~@4 f1 ~ g1@2 ~@6", L: "g1 ~@2 f1 g1 ~@3", M: "a1 ~@5 g1 ~ a1 ~@7",
  N: "a1 ~@2 a1 g1 ~ g#1 ~ a1@2 ~@6", O: "a1 ~@5 g1 ~ a1@2 ~@6", P: "a1 ~@2 a1 g1 ~ g#1 ~ a1 ~@7",
  Q: "g1 ~@5 f1 ~ g1 ~@7", R: "g1 ~@2 g1 f1 ~ f#1 ~ g1 ~@7", S: "d1@2 ~@4 c2 ~ d2 ~@7", T: "d1 ~@2 d1!2 ~ d1 ~ d1 ~@7",
  U: "g1 ~@5 f1 ~ g1@2 ~@6", V: "d1 ~@2 d1 c2@2 c#2 ~ d2 ~@5 g1 ~", W: "d1 ~@2 d1 g1 ~ g#1 ~ a1@2 ~@6",
  X: "d1 ~@2 d1 c2 ~ c#2 ~ d2@2 ~@6", Y: "g1 ~@5 d1 ~ g1@2 ~@6", Z: "d1 ~@2 d1 c2 ~ c#2 ~ d2 ~@5 g1 ~",
  AA: "e1 ~@5 d1 ~ g1 ~@7", AB: "e1 ~@2 e1 e1@2 d1 ~ g1 ~@7", AC: "d1 ~@2 d1 c2 ~ c#2 ~ d2 ~@7",
  AD: "d1@2 ~ d1!2 ~ d1 ~ d1 ~ e1 ~ g1 ~ g#1 ~", AE: "e1 ~@2 e1!2 ~ d1 ~ g1 ~@5 g1 ~", AF: "~@5 g1 c2 g1",
  AG: "a1@2 ~@4 g1 ~ a1 ~@7", AH: "d1 ~@2 d1 c2 ~ c#2 ~ d2 ~@3 g1@2 g#1@2", AI: "d1 ~@5 d1 ~ d1 ~@7",
  AJ: "d1 ~@2 d1!2 ~ d1 ~ d1 ~ g1@2 c2@2 g1@2", AK: "[a1, a0 ~@47]/3",
})).s("gm_electric_bass_finger").gain(0.41)

// other · trumpet
const trumpet = note("<~@49 A@2 B@2 C@2 D E F ~@39 A@2 B@2 C@2 D E A@2 B@2 C@2 D E G@3 ~@3>".pickRestart({
  A: "[a4@13 b4 c5 e5]/2", B: "[e4@26 c5@3 e5@3]/2", C: "[d5@27 ~ c5@2 b4@2]/2", D: "c5 b4 a4@4 c5 b4 c5 b4 a4@4 c5 b4",
  E: "c5 b4 a4 b4 c5 b4 a4 b4 c5 b4 a4 b4 c5 b4 a4 g4", F: "a4@7 ~", G: "[a4@17 ~@7]/3",
})).s("gm_trumpet").gain(0.27)

// drums · kick
const kick = s("bd").struct("<~ [x!2 ~ x!2 ~@3]!112 x ~@5>").gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@32 A ~@3 A ~@3 A B@16 A@24 ~@8 B@24 ~@6>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.45)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A B@6 C B@7 C B@15 C B@7 C A B@2 C B@3 C A B@2 C B@3 C B@3 C B@3 C A B@2 C B@7 C B@11 C B@7 C A B C B@4 C A B@6 C
  ~@6
>`.pickRestart({
  A: "~@15 x", B: "~ x ~@13 x", C: "~ x ~@14",
})).gain(0.25)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~ C A B ~@2 A B ~@2 A B ~ D A B ~@2 A B ~@2 E B ~ C E B ~@2 E B
  ~ C E B ~@2 A B ~@2 E B ~@2 E B ~@2 E B ~@2 E B ~@2 E B ~@2 E B ~@2 E B ~@2 A B C ~ E B ~@2 A B C ~ E B ~ F ~@6
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x ~@6", C: "~@11 x ~@4", D: "~@5 x ~@2", E: "~@7 x", F: "~@7 x ~@8",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~@5 A ~@9 A ~@3 A ~@7 A ~@3 B C ~@2 A ~@3 D C ~@2 A ~@7 A ~@3 B C ~@6 A ~@3 A ~@11 B ~@5 A ~@2 C ~ A ~@5 C ~ A
  ~@4 D ~@6
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x", C: "~ x ~@6", D: "~@3 x!2 ~@3",
})).gain(0.35)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@41 [x!2]!40 ~@8 [x!2]!24 ~@6>").gain(0.25)

stack(
  pad_warm, distortion_guitar, flute, bass, trumpet, kick, clap, snare, snare_soft, hihat, hihat_soft, open_hat, crash,
  tambourine
)

More by Carboni