Strudelify

Canzone

Dalla

KeyG majorTempo115 bpm
0:00/0:00
// Canzone — Dalla
// 115 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · fretless bass
const bass = note(`<
  A@17 B C D E D E D A@9 B C D F D E D G H I J K L M N G H I J K O ~@8 A B C D E D E D G H I J K L M N G H I J K O ~@8 A
  B C D E D E D G H I J K L M N G H I J K O K O K O P Q P Q P Q P R@7
>`.pickRestart({
  A: "g2", B: "f2", C: "e2", D: "d2 g2", E: "c2", F: "c2@3 e2", G: "c2!3 g2", H: "c2@3 ~ c2@3 ~ c2@4 g2@4",
  I: "g1@5 ~@3 g1@3 ~ d2@3 ~", J: "g1@6 ~@2 g1@4 a1@3 ~", K: "d2@3 ~ d2@3 ~ d2@4 a1@3 ~", L: "g1@4 ~@4 g1@3 ~ d2@3 ~",
  M: "c2@4 ~@4 c2@3 ~ g1@3 ~", N: "c2@4 ~@4 c2@3 ~ g1@4", O: "g1@4 ~@4 g1@3 ~ g1@3 ~", P: "c2@4 ~@4 c2@3 ~ c2@2 g2 ~",
  Q: "d2@5 ~@3 g2@3 ~ g2@3 ~", R: "[d2@5 ~@4 g2@4 ~@2 g2@7 ~@3 c2@74 ~@13]/7",
})).s("gm_fretless_bass").gain(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D A B C D ~@4 E F G D ~@12 E F G D H F I J ~@6 K L ~@10 H F I D H F G D H F I J ~@6 K L ~@14 M N O P M Q I J ~@6
  K L ~@14 H R H S H R H T@7
>`.pickRestart({
  A: "~@2 c5 a4 b4 g4 ~@2", B: "~@4 c5@2 ~ b4 c5 b4 g4@2 a4@2 f4@2, ~@3 d5 ~@4", C: "~@4 f4@2 g4@2 [e4,f4] e4 d4@2 ~@4",
  D: "~@2 d4 e4 f4 e4 f4 g4", E: "~@4 c5@2 a4@2 ~ c5 [g4,b4] ~@5, ~@4 b4 ~@3",
  F: "~@4 c5@2 ~ b4 c5 b4 g4@2 a4@2 f4 ~, ~@3 d5 ~@4", G: "~@4 f4@2 g4@2 [e4,f4] e4 d4 ~@5",
  H: "~@4 c5@2 a4@2 b4 [b4,c5] g4 ~@5", I: "~@4 e4@2 g4@2 [e4,f4] e4 d4 ~@5",
  J: "~@4 d4@2 e4@2 f4@2 g4@2 ~ f4 d4@2, ~@12 e4@2 e4 ~", K: "~@2 g4 ~", L: "g4@5 ~@3 g4@5 ~@3",
  M: "~@4 c5@2 a4@2 b4@2 g4 ~@5", N: "~@4 c5@2 ~ b4 c5 b4 g4 ~ a4@2 f4 ~, ~@3 d5 ~@4", O: "~@4 f4@2 g4@2 f4 e4 d4 ~@5",
  P: "~@4 d4@2 e4@2 f4@2 e4@2 f4@2 g4 ~", Q: "~@2 g4@2 c5@2 ~ b4 c5 b4 g4@2 a4@2 f4 ~, ~@3 d5 ~@4",
  R: "~@2 c5 a4 b4 g4 a4 f4", S: "~@2 d4 e4 f4 g4 e4 d4", T: "[~@4 d4@2 e4@3 f4@3 e4@3 f4@9 ~ c4@74 ~@13]/7",
})).s("gm_string_ensemble_1").gain(0.48)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@40 A B C@2 D@2 E@2 A B C@2 D@2 ~@16 A B C@2 D@2 E@2 A B C@2 D@2 ~@16 A F C@2 D@2 E@2 A F C@2 D@2 G@4 ~@14
>`.pickRestart({
  A: "[g4,b4,e5]", B: "f5@3 e5, [a4,c5]", C: "[[d4,g4,b4]@31 ~]/2", D: "[[f4,a4] [g4,b4], d4]/2",
  E: "[[c4,e4,g4]@31 ~]/2", F: "f5@11 e5@5, [a4,c5]", G: "[[f4,a4]@15 ~ g4@16, d4@31 ~, ~@15 b4@16 ~]/2",
})).s("gm_string_ensemble_2").gain(0.08).pan(0.7)

// chords · piano
const piano = note(`<
  A B C D A B C D A B C D A B C D A E F G H I H I A J K L A J K L M E F G N I H I O P Q@2 R S T@2 O P Q@2 R S A J K L A
  J K L M E F G N I H I O P Q@2 R S T@2 O P Q@2 R S A J K L A B C D M E F G N I H I O P Q@2 R S T@2 O P Q@2 R S R S R S
  N I H I N I H U@4 ~@3
>`.pickRestart({
  A: "~@2 [g3,c4] ~@3 [g3,c4] ~@3 [g3,c4] ~@3 [g3,c4] ~, g2@15 ~", // C5
  B: "~@2 [f3,g3,c4] ~@3 [f3,g3,c4] ~@3 [f3,g3,c4] ~@3 [f3,g3,c4] ~, g2@15 ~", // Fsus2
  C: "~@2 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~, g2@7 ~", // C
  D: "~@2 [f3,g3,c4] ~@3 [f3,g3,c4] ~@3 [f3,g3,c4] ~@3 [f3,g3,c4] ~, g2", // Fsus2
  E: "~@2 [f3,g3,c4] ~@3 [f3,g3,c4] ~@3 [f3,g3,c4] ~@3 [f3,g3,c4] ~, f2@15 ~", // Fsus2
  F: "~@2 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~, e2@7 ~", // C
  G: "~@2 [g3,c4,f4] ~@3 [g3,c4,f4] ~@3 [g3,b3,f4] ~@3 [g3,b3,f4] ~, d2 g2", // Csus4 G7
  H: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~, c2", // C
  I: "~@2 [f3,a3,c4,e4] ~@3 [f3,a3,c4,e4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~, d2 g2", // Fmaj7 G
  J: "~@2 [g3,c4,f4] ~@3 [g3,c4,f4] ~@3 [g3,c4,f4] ~@3 [g3,c4,f4] ~, g2@15 ~", // Csus4
  K: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~, g2@7 ~", // C
  L: "~@2 [g3,c4,f4] ~@3 [g3,c4,f4] ~@3 [g3,c4,f4] ~@3 [g3,c4,f4] ~, g2", // Csus4
  M: "~@2 [g3,d4] ~@3 [g3,d4] ~@3 [g3,d4] ~@3 [g3,d4] ~, g2@15 ~", // G5
  N: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~, c2@3 e2", // C
  O: "~@2 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~", // Em
  P: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~", // F
  Q: "~@2 [g3,b3,f4] ~@3 [g3,b3,f4] ~@3 [g3,b3,f4] ~@3 [g3,b3,f4] ~", // G7
  R: "~@2 [a3,c4,d4,f4] ~@3 [a3,c4,d4,f4] ~@3 [a3,c4,d4,f4] ~@3 [a3,c4,d4,f4] ~", // Dm7
  S: "~@2 [g3,f4] ~@3 [g3,b3,f4] ~@3 [g3,b3,f4] ~@3 [g3,b3] ~, ~ b3 ~@5 f4", // G7 G
  T: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~", // C
  U: "[~@2 [f3,a3,c4,e4] ~@4 [f3,a3,e4] ~@4 [g3,b3,d4]@2 ~@11 [g3,c4,e4]@37 ~@2, d2@10 ~@15 c2@28 ~@11, ~@7 c4@2 g2@15 ~@40]/4", // Fmaj7 G C
})).s("gm_piano").gain(0.24)

// other · sitar
const sitar = note(`<
  ~@84
  [~@4 g4!12]
  [g4 ~@9 d5 ~@2 d5!2 b4, ~@6 c5 ~]
  [~@2 g4 ~@3 g4!10]
  [~@8 f4 ~ e4 ~ f4 ~ g4 ~]
  ~@44
>`).s("gm_sitar").gain(0.4)

// other · sitar · soft notes
const sitar_soft = note("<~@84 [~@3 g4 ~@12] ~ [~@3 g4!3 ~@10] ~@45>").s("gm_sitar").gain(0.24)

// other · banjo
const banjo = note("<~@80 [~@2 f5!2 ~ f5!2 ~ f5!8] [f5!8 ~@8] ~@28 [~@2 f5!2 ~ f5!2 ~ f5!8] [f5!8 ~@8] ~@20>")
  .s("gm_banjo").gain(0.32)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@16 B@4 C D E@2 A@8 B@4 C D F@2 G H@7 G I@5 A@8 B@4 C D F@2 G J@7 G K@5 A@8 B@4 C D F@2 L@8 M@6 N@4 C D F@2 C D O@8
>`.pickRestart({
  A: "[~ f3 e3 f3 ~ f3 e3 f3, g2, g3 g3]/8", B: "[g2@2 f2@2 e2@2 d2 g2, g3]/4", C: "[c2,e3,g3]",
  D: "[d2,f3,a3]@7 ~ g2@8, ~@7 [g3,b3]@8 ~", E: "[[c2,e3,g3]@15 ~ [f3,a3]@8 [g2,g3,b3]@8, ~@15 d2@8 ~@9]/2",
  F: "[[c2,e3,g3]@15 ~ a3@8 [g2,g3,b3]@8, ~@15 [d2,f3]@8 ~@9]/2", G: "[g3,b3,e4]",
  H: "[[a3,c4]@16 [g3,b3]@31 ~ c4@16 b3@16 [c4,e4]@32, f4@5 ~@2, ~ d4@4 ~@2, ~@47 a3@16 ~ g3@48]/7", // Am G C
  I: "[[a3,c4]@16 [g3,b3]@31 ~ c4@16 [g3,b3]@16, f4, ~ d4@4, ~@47 a3@16 ~@17]/5", // Am G
  J: "[[a3,c4]@15 [g3,b3]@32 ~ c4@16 b3@15 ~ e4@32, f4@5 ~@2, ~@15 d4@64 c4@32 ~, ~@47 a3@16 ~ g3@48]/7", // Am G
  K: "[[a3,c4]@15 [g3,b3]@32 ~ c4@16 [g3,b3]@16, f4, ~@15 d4@64 ~, ~@47 a3@16 ~@17]/5", // Am G
  L: "[[g3,b3,e4]@15 [a3,c4]@16 [g3,b3]@32 [a3,c4]@16 ~ b3@15 ~ e4@32, ~@15 f4@80 ~@33, ~@31 d4@64 c4@32 ~, ~@5 g3@3]/8", // Em Am G Am
  M: "[[g3,b3,e4]@15 [a3,c4]@16 [g3,b3]@32 [a3,c4]@16 ~ [g3,b3]@16, ~@15 f4@80 ~, ~@31 d4@64 ~]/6", // Em Am G Am G
  N: "[[a3,c4]@15 [g3,b3]@16 [a3,c4]@16 [g3,b3]@16 ~, [d4,f4]]/4", // Am G Am G Dm
  O: "[[c2,e3,g3]@15 ~ a3@9 [g2,g3,b3]@16 [c2,c3]@74 ~@13, ~@15 [d2,f3]@10 ~@103]/8", // C G C Dm
})).s("gm_synth_strings_1").gain(0.32)

// other · taiko drum
const taiko_drum = note(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@15
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@33
>`.pickRestart({
  A: "a1 ~@3",
})).s("gm_taiko_drum").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@30 A ~ A ~ B@19 C B@29 C B@17 D ~@6
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~@3 x ~@3 x ~@2 x!2 ~@3", D: "x ~@3 x ~@2 x ~ x ~@6",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct("<~@78 A B ~@2 B ~@25 A B ~@2 B ~ B@2 ~@2 B@7 ~@7>".pickRestart({
  A: "~ x!3", B: "x!4",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@42 A@11 B ~@17 C A@11 D ~@17 C A@23 E ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x ~@4", C: "~@5 x ~@2", D: "~@4 x ~@3 x ~@2 x!2 ~@3", E: "~@4 x ~@10 x",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@47 A ~@3 B ~ C ~@23 D ~@3 B ~ C ~@23 A ~@3 B ~ C ~ A ~@16>".pickRestart({
  A: "~@7 x", B: "x ~@6 x", C: "~@6 x!2", D: "~@3 x ~@3 x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A@43 B@3 A@2 C B@3 C A C A@17 D B@3 A E C B D B D A@19 D B@4 E C B@2 D B A C B C B C B A B A B A F ~@6
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "~ x!7", D: "~ x!6 ~", E: "x!4 ~@2 x!2", F: "x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@47 A ~@2 B A ~ C ~@26 B A ~ C ~@26 B A ~@3 A ~@16>".pickRestart({
  A: "~@11 x ~@4", B: "~@15 x", C: "~ x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@43 A@3 ~@3 A@3 ~@20 A@4 ~ B ~ A@4 ~@19 A@5 B ~ A@4 ~@2 A ~ A ~ A ~ A ~ A ~ C D E F ~@3
>`.pickRestart({
  A: "~@7 x", B: "~ x", C: "~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x", D: "~@7 x ~@8", E: "x!16", F: "x!2 ~@6",
})).gain(0.32)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@126 [~@11 x!5] ~ [~@3 x ~ x!2 ~@9] ~@3>").gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@107 [~@3 x ~@4] ~@24>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@32 A ~@9 A ~@5 A ~ A@3 ~ A ~@16 B A ~@3 A ~ A ~ A@3 ~ A ~@16 B A ~@3 A C A ~ A@3 ~ A ~ A B A ~ A ~ A ~ A ~@7
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x!3 ~ x!3]!125 [~@2 x ~ x ~@2 x ~@4 x ~@2 x] [~ x ~@2] ~ [~@5 x ~@2] ~@3>")
  .gain(0.24)

// drums · cowbell
const cowbell = s("cb").struct("<[~ x ~ x ~ x ~ x]!125 [~@2 x ~@4 x ~@4 x ~@3] [~ x ~@2] ~@5>").gain(0.24)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@24 A@24 B A B A B A ~@4 A@14 B A@5 B A B@3 A@19 B A@5 B A@2 B A@2 B A B A B A@6 C D E F ~@3
>`.pickRestart({
  A: "x!16", B: "~ x!15", C: "x!6 ~ x!3 ~ x!2 ~ x!2", D: "~@2 x ~ x ~ x ~@4 x ~ x!3", E: "x!12 ~ x!3",
  F: "x!4 ~ x ~@2 x ~ x ~@5",
})).gain(0.24)

// drums · triangle
const triangle = s("triangles:35").struct("<~@111 [~@15 x] ~@20>").gain(3.48)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@19 A ~ A ~ A ~@8
>`.pickRestart({
  A: "x",
})).gain(2.42)

stack(
  bass, string_ensemble_1, string_ensemble_2, piano, sitar, sitar_soft, banjo, synth_strings_1, taiko_drum, kick, clap,
  snare, low_tom, hihat, mid_tom, open_hat, open_hat_soft, high_tom, crash, tambourine, cowbell, shaker, triangle,
  jingle_bells
)

More by Dalla