Strudelify
Farfallina cover art

Fisico & Politico

Farfallina

Carboni

KeyF♯ minorTempo110 bpm
0:00/0:00
// Farfallina — Carboni
// 110 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · synth strings 1 · "TAPPETO"
const synth_strings_1 = note(`<
  ~@9 A B C D A E C D A E C D A E C D F@4 A B C D A E C G A E C D A E C D F@4 H I J@2 H I J@2 K@2 L M N@2 A B C D A E C
  G A E C D A E C D F@4 A B C D A E C G A E C D A E C D F@4 H I J@2 H I J@2 H I J@2 O@2 H I J@2 H I J@2 H I J@2 O@2 H I
  P@7
>`.pickRestart({
  A: "[f#2,f#3,c#4,f#4,a4]", B: "[b2,d4,f#4,a4]", C: "[e2,e3,b3,e4,g#4]", D: "[a1,a2,a3,b3,c#4,e4]",
  E: "[b1,b2,d4,f#4,a4]", F: "[f#4 f4 f#4 g#4, [c#2,c#3,b3,c#4]]/4", G: "b4@3 a4@3 g#4@2, [a1,a2,a3,b3,c#4,e4]",
  H: "[f#3,c#4,f#4,a4] [d3,a3,d4,f#4]", I: "[e3,b3,e4,g#4] [c#3,g#3,c#4,e4]", J: "[b2,a3,b3,d4,f#4,a4]/2",
  K: "[~@3 f4 g#4@3 f4, [c#3,b3,c#4,f#4]]/2", L: "[f#3,e4,a4], [c#4,f#4] ~@15", M: "[b2,a3,b3,d4,f#4] [e3,b3,e4,g#4]",
  N: "[[f#3,c#4,e4,f#4,a4]@31 ~]/2", O: "[f#4 f4, [c#3,b3,c#4]]/2",
  P: "[[b2,a3,b3,d4,f#4,a4]@43 b4@34 a4@27 ~@8, ~@43 [a3,b3,c#4,f#4]@61 ~@8]/7", // Bm7 F#m
})).s("gm_synth_strings_1").gain(0.15).pan(0.4)

// other · ocarina
const ocarina = note(`<
  ~ A B ~@2 C D ~@7 E@2 ~@13 F G ~@2 F H ~ I J K@2 L ~ M ~ N ~@10 O P ~@2 Q R S ~ T U ~@2 T U V W X Y Z AA AB AC AD AE ~
  AF AG ~@9 AH AI AJ AK ~@5 AL AM ~@38
>`.pickRestart({
  A: "a5 f#5 a5 c#6 a5 c#6 ~@2", B: "a5 f#5 a5 c#6 b5 ~@3", C: "~ f#5 c#6 f#5 c#6 ~@3", D: "a5 f#5 a5 c#6 b5 e5 b5 ~",
  E: "[~ f#5 a5 c#6 a5 c#6 a5 b5@2 ~@7]/2", F: "~@2 a4 f#4 a4 ~@3", G: "a4 [f#4,f#5] [a4,a5] c#6 a5 c#6 a5 b5",
  H: "c#5 f#5 a5 c#6 a5 c#6 a5 ~", I: "~@4 b5 a5 g#5 c#5", J: "a4 ~ a4 f#4 ~@2 c#5 a4",
  K: "[c#5 f#5 a5 c#6 a5 c#6 a5 b5@3 ~@6]/2", L: "b4@2 a4 ~ b4@2 a4@2 ~@2 a4@2 g#4@2 ~@2",
  M: "~ f#5 a5 c#6 a5 c#6 a5 b5", N: "~@6 b5 ~ b5@2 a5@2 g#5@2 c#5@2",
  O: "c#5@2 f#4 ~ f#4@2 c#5@2 f#4 ~ f#4@2 b4@2 c#5@2", P: "b4 f#4 ~@6", Q: "a5 f#5 a5 ~ a5 ~ a5 f#5, ~@3 c#5",
  R: "~@2 f#5@2 a5@2 c#6@2 [e5,b5]@3 g#5@2 e5@2 ~, d5 ~", S: "a5 f#5 a5 f#5 a5 ~@3", T: "~@3 f#5 a5@2 ~ c#5",
  U: "b4 ~@3", V: "~@3 g#5 b5@2 ~ b4", W: "a4 ~@3", X: "~@2 a5 f#5 a5 f#5 ~ c#5", Y: "b4@5 ~@11",
  Z: "~@6 g#5@2 b5@4 ~@2 a4 ~", AA: "a4@9 ~@7", AB: "~@6 f#5@2 a5@3 ~@3 c#6@2", AC: "b5@3 ~@13",
  AD: "~@6 g#5@2 b5@3 ~@3 b4@2", AE: "a4@5 ~@11", AF: "~@6 f5@2 g#5@3 ~@3 f5@2", AG: "c#5@3 ~@13",
  AH: "~@6 f#5@2 a5@3 ~@3 c#5@2", AI: "b4 ~@7", AJ: "~@3 g#5 b5@2 ~ a4", AK: "a4@3 ~", AL: "~@3 f5 g#5@2 ~ f5",
  AM: "c#5 ~",
})).s("gm_ocarina").gain(0.2).pan(0.4)

// other · ocarina · soft notes
const ocarina_soft = note("<~ A B C ~ D E F ~@21 G H ~@2 I J@2 ~@23 K ~ L M ~@77>".pickRestart({
  A: "~@6 a5 c#6", B: "~@5 e5 b5 e5", C: "b5 e5 b5 e5 ~@4", D: "~@5 f#5 c#6 f#5", E: "~@7 e5",
  F: "b5 e5 b5 e5 b5 e5 b5 e5", G: "~@10 f#4@2 a4@2 f#4 ~", H: "~@3 f#4 a4 f#4 a4 f#4", I: "~@5 f#4 a4 f#4",
  J: "[a4@2 f#4@2 a4@2 f#4@2 a4@2 ~ a4@2 ~ b5@4 ~@14, ~@10 f#4@2 ~@2 f#4 ~@17]/2", K: "~@3 f#5 ~ f#5 ~@2",
  L: "~@5 f#5 a5 f#5", M: "a5 f#5 a5 f#5 ~@4",
})).s("gm_ocarina").gain(0.1).pan(0.4)

// other · piano
const piano = note(`<
  ~@49 A B ~@2 A B ~@27 C D ~ E F D ~@15 A B ~@2 A B ~@2 A B ~@4 A B ~@2 A B ~@2 A B ~@4 A B ~@7
>`.pickRestart({
  A: "[f#3,f#4]@5 ~ [g#3,g#4] ~ [a3,a4]@3 ~ [g#3,g#4] ~ [a3,a4] ~", B: "[b3,b4]@3 ~", C: "~@5 a4 g#4 a4",
  D: "f#4@9 ~@7", E: "g#4", F: "b4@3 a4@2 g#4@3",
})).s("gm_piano").gain(0.54).pan(0.6)

// other · acoustic guitar steel · "STEEL GT"
const acoustic_guitar_steel = note(`<
  A@3 B@2 C ~@19 D E D F ~@16 D E D F ~@2 G H ~@2 G H ~@22 D E D F ~@7 I ~@14 G H ~@2 G H ~@2 G H ~@4 G H ~@2 G H ~@2 G
  H ~@4 J K L@4 ~
>`.pickRestart({
  A: "[~@7 c#5@3 f#4@2 a4@2 ~ f#4@31 ~@2, ~@2 f#4@4 b4@3 ~@5 b4@2 ~@32, ~ a4 ~@10]/3",
  B: "[~@10 f#4@2 a4@2 b4 c#5@3 f#4@2 a4@2 b4@2 f#4@8]/2", C: "e4",
  D: "~@2 [c#5,c#6] ~ [c#5,c#6] ~@3 [c#5,c#6] ~ [c#5,c#6] ~@3 [c#5,c#6] ~", // C#
  E: "[c#5,c#6] ~@3 [c#5,c#6] ~ [c#5,c#6] ~@3 [c#5,c#6] ~ [c#5,c#6] ~@3", F: "[c#5,c#6] ~@3 [c#5,c#6] ~ [c#5,c#6] ~@9",
  G: "c#5 f#4!2 c#5 f#4!2 c#5 f#4", H: "f#4 c#5 f#4!2 c#5 f#4!2 c#5", I: "b4@3 c#5@4 ~",
  J: "c#5@2 f#4@2 ~ f#4@2 c#5@2 f#4@2 f#4@3 c#5@2", K: "f#4@2 f#4@3 c#5@3 f#4@2 f#4@3 ~ c#5@2",
  L: "[~ f#4@3 f#4@3 c#5@3 ~@2 [f#4,g#4]@40 ~@12, ~@10 [b3,c#4]@39 ~@15, ~@11 [f#3,e4]@39 ~@14]/4", // F#sus2 Bsus2 F#7
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.7)

// other · distortion guitar · "DISTORTIO"
const distortion_guitar = note(`<
  ~@21 A@2 ~@26 B C D@2 B C D@2 ~@33 E@2 ~@11 B C D@2 B C D@2 B C D@2 ~@2 B C D@2 B C D@2 B C D@2 ~@2 B C F@3 ~@4
>`.pickRestart({
  A: "[[c#5,e5]@15 ~]/2", B: "f#2 d2", C: "e2 c#2", D: "[b1@31 ~]/2",
  E: "[~@7 c#4@8 ~, ~@5 g#3@3 ~@8, ~@12 a3@9 ~@11]/2", F: "[b1@41 ~@7]/3",
})).s("gm_distortion_guitar").gain(0.42).pan(0.4)

// other · distortion guitar · "DISTORTIO" · soft notes
const distortion_guitar_soft = note("<~@21 A@2 ~@6 B@2 ~@10 C@2 ~@97>".pickRestart({
  A: "[f#4@15 ~]/2", B: "[[f#2,e5], [f#3,c#5]@29 ~@3]/2", C: "[~@3 c#4@13, ~ g#3@7 ~@8, ~@2 a3@7 ~@7]/2",
})).s("gm_distortion_guitar").gain(0.24).pan(0.4)

// bass · fretless bass · "BASSO"
const bass = note(`<
  ~@49 A B C@2 D B E@2 F@2 G H I@3 ~@35 J@3 K A B C@2 A B C@2 D B E@2 F@2 A B C@2 A B C@2 D B E@2 F@2 D B L@6 ~
>`.pickRestart({
  A: "f#1@8 d1@7 ~", B: "e1 c#1", C: "[b0@15 ~]/2", D: "f#1@7 ~ d1@8", E: "[b0@31 ~]/2", F: "[c#1@31 ~]/2",
  G: "f#1@3 c#1", H: "d1 e1", I: "[f#1@17 ~@7]/3", J: "c#1/3", K: "c#2@7 ~", L: "[b0@42 ~ f#1@51 ~@2]/6",
})).s("gm_fretless_bass").gain(0.62).pan(0.6)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@117 A B@3 C D E@2 ~@15>".pickRestart({
  A: "f#4@3 a4 b4@3 a4", B: "[g#4@6 e4@17 ~]/3", C: "~@6 a5@7 ~ a5 ~, ~@13 g#5@2 ~", D: "e5", E: "[b4@3 ~]/2",
})).s("gm_overdriven_guitar").gain(0.22).pan(0.4)

// chords · electric guitar muted · "MUTED GT"
const electric_guitar_muted = note(`<
  ~@57 A B ~@4 C D E F C D E F C D E F C D E F G H I J C D E F C D E F C D E F C D E F G H I J ~@12 C K ~@12 C K ~@9
>`.pickRestart({
  A: "~@2 [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~", // C#5
  B: "[g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~ [g#3,c#4] ~@5", // C#5
  C: "[f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~", // F#5
  D: "[f#3,d4] ~ [f#3,d4] ~ [f#3,d4] ~ [f#3,d4] ~ [f#3,d4] ~ [f#3,d4] ~ [f#3,d4] ~ [f#3,d4] ~", // D
  E: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  F: "[e3,c#4] ~ [e3,c#4] ~ [e3,c#4] ~ [e3,c#4] ~ [e3,c#4] ~ [e3,c#4] ~ [e3,c#4] ~ [e3,c#4] ~", // C#m
  G: "~@2 [f#3,c#4] ~ [f#3,c#4] ~ f#3 ~ [f#3,c#4] ~ [f#3,c#4] ~ f#3 ~ [f#3,c#4] ~", // F#5
  H: "[f3,c#4] ~ f3 ~ [f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~ f3 ~ [f3,c#4] ~", // C#
  I: "~@2 [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ f#3 ~ [f#3,c#4] ~", // F#5
  J: "[f3,c#4] ~ f3 ~ [f3,c#4] ~ [f3,c#4] ~@3 [f3,c#4] ~ f3 ~ [f3,c#4] ~", // C#
  K: "[f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~ [f3,c#4] ~", // C#
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@83 A B@2 ~ C@3 ~@5 D@3 E F@4 ~@37>".pickRestart({
  A: "f#5@3 g#5 a5@2 f#5@2", B: "[g#5@2 a5@2 [f#5,b5]@27 ~]/2",
  C: "[~@2 a5@2 ~@12 e5@7 ~, c#6@8 d6@15 ~, ~ f#5@3 ~@2, ~@4 b5@7 ~]/3",
  D: "[f#5@10 f#5@2 c#6@2 e6@6 f#6@2 d6@4 c#6@2 d6@17 ~ d6@2]/3", E: "d6 e6 c#6@5 b5",
  F: "[c#6@7 ~ c#6@8 [b3,f#4,f#5]@8 [c#4,g#4,f5,g#5]@8, c#5, f#4@15 f4@16 ~@33, ~@7 g#5 ~@24]/4", // B5 C#
})).s("gm_string_ensemble_1").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@49 A@3 ~ A@3 ~@47 A@3 ~ A@3 ~ A@3 ~@3 A@3 ~ A@3 ~ A@3 ~@3 A@3 ~@6>".pickRestart({
  A: "x!2 ~@6",
})).gain(0.57)

// drums · rim
const rim = s("rim").struct(`<
  ~@4 A@45 ~ B A@2 ~@2 A@48 ~ B A@2 ~ B A@2 ~@2 A@4 ~ B A@2 ~ B A@2 ~@2 A@4 ~@2 C D ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@2 x ~@4 x", D: "~ x",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@49 A ~@3 A ~@49 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@5 A ~@8>".pickRestart({
  A: "~@3 x",
})).gain(0.57)

// drums · low tom
const low_tom = s("lt").struct("<~@54 A ~@49 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@5 A ~@7>".pickRestart({
  A: "~@3 x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4
  [~ x!7]
  [x!8]!128
  [x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~]
  [x ~ x ~@2 x ~@2 x ~ x ~ x ~@3]
  ~@5
>`).gain(0.14)

// drums · open hat
const open_hat = s("oh").struct("<~@49 A ~@3 A ~@49 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@5 A ~@2 B ~@5>".pickRestart({
  A: "~@11 x ~@4", B: "~@13 x ~@2",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@49 A ~ A ~ A ~ A ~@47 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ B ~@4
>`.pickRestart({
  A: "x", B: "~@11 x ~@4",
})).gain(0.36)

stack(
  synth_strings_1, ocarina, ocarina_soft, piano, acoustic_guitar_steel, distortion_guitar, distortion_guitar_soft, bass,
  overdriven_guitar, electric_guitar_muted, string_ensemble_1, kick, rim, snare, low_tom, hihat, open_hat, crash
)

More by Carboni