Strudelify

Arrividerci Roma

Rascel

KeyG majorTempo115 bpm
0:00/0:00
// Arrividerci Roma — Rascel
// 115 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 64 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.

// chords · music box
const music_box = note("<A@5 B@4 C D E F C G@2 ~@48>".pickRestart({
  A: "[~@11 d6@4 ~@2 b6@10 d7@4 ~@2 c7@11 ~@4 a6@4 ~@24 d6@3 b5, ~@15 b5@11 ~@5 c6@11 ~@5 b5@27 ~@6, ~@16 [d6,g6]@5 ~@11 [d#6,g6]@11 ~ b6@4 d6@27 ~@5, ~@52 g6@27 ~]/5", // G5 D#
  B: "[~ b6@11 ~@4 a6@11 ~@5 e6@21 ~@3 f#6@2 f#6@2 f#6@2 f#6@2, g6@11 ~ f#6@4 e6@16 ~@32, d6@3 ~@12 b5@16 [a5,c6]@21 ~@3 [a5,d6]@5 ~@4, ~@28 g6@5 ~@31]/4", // Am D5
  C: "f#6 ~@7 [d6,f#6]@4 e6@4, ~@4 a6@5 ~@7, ~@7 a5@5 ~@4", // D
  D: "e6@4 d6@3 ~ f#6@2 f#6@2 f#6@2 f#6@2, ~@7 a5@5 ~@4, ~@7 d6@3 ~@6",
  E: "f#6 ~@3 f#6@2 e6@2, ~@4 a6@5 ~@7, ~@6 a5@5 ~@5, ~@7 d6@5 ~@4",
  F: "e6@4 d6@3 ~ f#6@2 f#6@2 f#6@2 f#6 ~, ~@7 a5@5 ~@4, ~@7 d6@3 ~@6",
  G: "[e6@4 d6@3 ~@2 c7@4 ~@4 [d6,g6]@15, ~@7 f#6@5 ~@20, ~@7 d6@3 ~@6 b5@16, ~@8 a6@5 b6@5 ~@14]/2", // G5
})).s("gm_music_box").gain(0.13)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@15 A B@3 C D@3 E@3 F@2 G@3 H I@3 J K@3 L@3 M@2 N@2 O@8 P@2 Q R Q R Q S T@2
>`.pickRestart({
  A: "~@5 b3 c4 d4", B: "[e4 f#4 g4 a4 g4@20]/3", C: "e4 d4 d5@2", D: "[c5 b4 g4@4 d4@4 c4@2]/3",
  E: "[a4 g#4 b4 a4@3 d5@5 c5]/3", F: "[b4 a4 d5@5 e5]/2", G: "[d5 c5 a4@8 g4 a4]/3", H: "b4 d5 d#5 c5",
  I: "[a4@2 g4@9 d5]/3", J: "e5 b4 d5@2", K: "[c5 b4 g4@4 d5@4 c5@2]/3", L: "[b4 d5 c5 a4@3 d5@6]/3",
  M: "[c5 b4 d5@6]/2", N: "[c5 b4 a4@4 g4@2]/2",
  O: "[f#4@2 ~@7 [d4,d5] [b4,b5]@3 [d5,d6] [c5,c6]@3 [b4,b5] [a4,a5] [g4,g5]@6 [d4,d5] [b4,b5]@3 [f#4,f#5] [a4,a5]@2, ~ g4@4 ~@11]/8", // D B D C B A G D …
  P: "[~ [g4,g5] [e4,e5]@6]/2", Q: "[f#4,f#5]@3 [a4,a5]", R: "[f#4,f#5] [e4,e5]@2 [d4,d5]", S: "[f#4,f#5] [d4,d5]@2 ~",
  T: "[~ [g4,g5]@2 ~]/2", // G
})).s("gm_string_ensemble_1").gain(0.17)

// bass · electric bass finger
const bass = note(`<
  ~@16 A B C D E F G H I J K@4 L B M N O D@2 P Q H R S@2 K@3 T E U B C D E F Q H I J K@3 V W X
>`.pickRestart({
  A: "~@8 g1@4 ~@2 g1 ~", B: "g1@4 d2@4 c2@5 ~ c2 ~", C: "c2@7 ~ g1@4 ~@2 g1 ~", D: "g1@6 ~@2 g1@5 ~ g1 ~",
  E: "g1@6 ~@2 g1@4 ~@2 g1 ~", F: "g1@7 ~ e1@5 ~ e1 ~", G: "e1@6 ~@2 a1@4 ~@2 a1 ~", H: "a1@6 ~@2 a1@5 ~ a1 ~",
  I: "a1@7 ~ d2@5 ~ d2 ~", J: "d2@6 ~@2 d2@4 ~@2 d2 ~", K: "d2@6 ~@2 d2@5 ~ d2 ~", L: "d2@4 a1@3 ~ g1@5 ~ g1 ~",
  M: "d2@3 ~ d2@4 g1@5 ~ g1 ~", N: "g1@6 ~@2 c2@5 ~ c2 ~", O: "c2@7 ~ g1@5 ~ g1 ~", P: "g1@7 ~ e1@4 ~@2 e1 ~",
  Q: "e1@6 ~@2 a1@5 ~ a1 ~", R: "a1@6 ~@2 d2@5 ~ d2 ~", S: "d2@7 ~ d2@5 ~ d2 ~", T: "d2@7 ~ g1@5 ~ g1 ~",
  U: "g1@7 ~ g1@4 ~@2 g1 ~", V: "d2@6 ~@2 d2@5 ~@3", W: "~@8 g1@5 ~ g1 ~", X: "g1@4 d2@4 g1@5 ~@3",
})).s("gm_electric_bass_finger").gain(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F G H I J K L M N O@2 P Q R@2 S T U V W X Y Z AA AB AC AD AE AF AG AH AI T AJ AK AL Y AA AM AL AN R AO P Q
  R@2 S T U V W X Y Z AP AQ AR
>`.pickRestart({
  A: "~@2 g4 ~@2 d3@3, g2@3 ~ g2@3 ~, ~@2 d3@5 ~@9", B: "~@2 g3@5 ~@5 g4@2 d#4@2, c3@7 ~ c3@6 ~@2, ~@10 g3@5 ~",
  C: "g2@7 ~@3 d3@5 ~, ~@4 g2@3 ~", D: "~@4 g2@3 ~", E: "~@3 b3 ~ d3@2 ~, g2@6 ~@2 g2@5 ~@3, ~ d3@3 ~@4",
  F: "~@3 d4 ~@2 e4 d4, e2@6 ~@2 e2@5 ~@3, ~@2 b2@6 ~@2 b2@5 ~",
  G: "~@3 c4 ~@3 c4, a2@7 ~ a2@6 ~@2, ~@2 e4@2 ~ e3@3, ~@3 e4", H: "~@6 c4@2 a2@5 ~ c4@2, a2 e4 ~@2, ~@2 e3@5 ~@9",
  I: "~@3 c4 ~@2 f#4@2, d3@3 ~ d3@3 ~, ~@2 a3@6 ~@2 a3@5 ~, ~ f#4 ~@2",
  J: "~@3 c4 ~@3 c4, d3@3 ~ d3@3 ~, ~@4 f#4@4 ~@2 a3@5 ~, ~@3 f#4", K: "d3@2 ~ c4 d3@2 ~ c4, ~ f#4 ~ f#4",
  L: "~@3 c4 ~@3 c4, d3@6 ~@2 d3@5 ~@3, ~@2 a3@5 ~@3 a3@4 ~@2, ~ f#4 ~ f#4", M: "d3 f#4 ~ f#4",
  N: "~@2 f#4 c4 ~ a3 f#4@2, d3@3 ~ d3@2 ~@2, ~@2 a3@5 ~@9",
  O: "[~ b3@16 ~@13 b3@2, [g2,d3]@10 ~@2 g2@3 ~, g3@15 ~@11 d3@5 ~, ~ g4@14 ~@13 g4@4]/2", // G5
  P: "~@3 b3 ~@3 d#4, g2@4 g4@4 ~@2 g3@5 ~, ~ d3@2 ~ c3@3 ~, ~@3 g4",
  Q: "~@3 d#4 ~@3 b3, c3@6 ~@2 g2@7 ~, ~@2 g3@4 ~@4 d3@5 ~, ~ g4 ~ g4",
  R: "~@3 b3 ~@3 b3, g2@3 ~ g2@3 ~, ~@2 d3@5 ~@3 d3@5 ~, ~ g4 ~ g4",
  S: "~ d3 g4 b3 ~@3 d4, g2@5 ~@3 e2@6 ~@2, ~@10 b2@5 ~, ~@3 e4",
  T: "~@3 d4 ~@3 c4, e2@4 e4@4 ~@2 e3@5 ~, ~ b2@2 ~ a2@3 ~, ~@3 e4",
  U: "~@3 c4 ~@3 c4, a2@3 ~ a2@3 ~, ~@2 e3@5 ~@3 e3@5 ~, ~ e4 ~ e4",
  V: "~@3 c4 ~@3 c4, a2@4 e4@4 ~@2 a3@5 ~, ~ e3@2 ~ d3@3 ~, ~@3 f#4",
  W: "~@3 c4 ~@3 c4, d3@3 ~ d3@3 ~, ~ a3@3 ~ a3@3, ~ f#4 ~ f#4",
  X: "~@3 c4 ~@3 c4, d3@3 ~ d3@3 ~, ~@2 a3@6 ~@2 a3@5 ~, ~ f#4 ~ f#4",
  Y: "~@3 c4 ~@3 c4, d3@6 ~@2 d3@7 ~, ~@2 a3@6 ~@2 a3@5 ~, ~ f#4 ~ f#4",
  Z: "~@3 c4 ~@3 c4, d3@3 ~ d3@3 ~, ~@2 a3@5 ~@3 a3@6, ~ f#4 ~ f#4",
  AA: "~@3 c4 ~@3 c4, d3@3 ~ d3@3 ~, ~@2 a3@5 ~@3 a3@5 ~, ~ f#4 ~ f#4",
  AB: "~ a3 f#4 c4 ~@2 g4 b3, d3@5 ~@3 g2@6 ~@2, ~@10 d3@5 ~",
  AC: "~@3 b3 ~@2 g4 d#4, g2@4 g4@4 ~@2 g3@5 ~, ~ d3@2 ~ c3@3 ~",
  AD: "~@3 c4 ~@2 g4 b3, d3@6 ~@2 g2@7 ~, ~ a3@2 ~@2 d3@3, ~ f#4 ~@2",
  AE: "~@2 g4 b3 ~@2 g4 d#4, g2@4 ~@6 g3@5 ~, ~@2 d3@4 ~@2 c3@7 ~",
  AF: "~@2 g4 d#4 ~@3 b3, c3@5 ~@3 g2@7 ~, ~ g3@2 ~@2 d3@3, ~@3 g4",
  AG: "~@3 b3 ~@3 b3, g2@6 ~@2 g2@7 ~, ~@2 d3@5 ~@3 d3@5 ~, ~ g4 ~ g4",
  AH: "~@3 b3 ~@3 b3, g2@3 ~ g2@3 ~, ~@2 d3@5 ~@3 d3@6, ~ g4 ~ g4",
  AI: "~@3 b3 ~@3 d4, g2@4 g4@4 ~@2 b2@5 ~, ~ d3@2 ~ e2@3 ~, ~@3 e4",
  AJ: "~@3 c4 ~@3 c4, a2@3 ~ a2@3 ~, ~@2 e3@6 ~@2 e3@5 ~, ~ e4 ~ e4",
  AK: "~@2 e4 c4 ~@3 c4, a2@4 ~@6 a3@5 ~, ~ e3@2 ~ d3@3 ~, ~@3 f#4",
  AL: "~@3 c4 ~@3 c4, d3@7 ~ d3@7 ~, ~ a3@3 ~ a3@3, ~ f#4 ~ f#4",
  AM: "~@3 c4 ~@3 c4, d3@6 ~@2 d3@7 ~, ~ a3@3 ~ a3@3, ~ f#4 ~ f#4",
  AN: "~ a3 f#4 c4 ~@2 g4 b3, d3@5 ~@3 g2@7 ~, ~@10 d3@5 ~",
  AO: "~@3 b3 ~@3 b3, g2@4 g2@3 ~, ~@2 d3@6 ~@2 d3@5 ~, ~ g4 ~ g4",
  AP: "~@3 c4 d3@3 ~, d3@3 ~@5, ~@2 a3@5 ~@9, ~ f#4 ~@2", AQ: "~@6 g4 b3, ~@4 g2@3 ~, ~@10 d3@5 ~",
  AR: "~@3 b3 [g2,b3]@3 ~, g2 g4 ~@2, ~ d3@2 ~ [d3,g4] ~@3", // G G5
})).s("gm_acoustic_guitar_nylon").gain(0.14)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~ A B C D E F G H I J K ~ L I ~@49>".pickRestart({
  A: "~@3 b3 ~@3 b3, ~@3 g4", B: "~@2 g4 d#4 ~@4", C: "~@2 g4 b3 ~@3 b3, ~ d3@3 ~@2 g4@2",
  D: "~@3 b3 ~@2 g4 b3, g2@3 ~@5, ~@2 d3@5 ~@3 d3@5 ~, ~ g4 ~@2", E: "~@2 g4 ~@3 g4 b3", F: "~ e4 ~@2", G: "~ e3@3 ~@4",
  H: "~@6 e4 ~, ~@5 e3@2 ~", I: "~@7 c4", J: "~ a3@3 ~@4", K: "~@2 a3@5 ~@3 a3@5 ~",
  L: "~ a3@2 c4 ~ a3@2 c4, ~@8 d3@5 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.08)

// drums · kick
const kick = s("bd").struct("<~@16 A B@15 C B@14 D B@10 E ~@5>".pickRestart({
  A: "~@4 x ~@2 x", B: "x ~@3 x ~@2 x", C: "x!2 ~@2 x ~@2 x", D: "x ~@7 x ~@4 x ~@2", E: "x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@16 [~@3 x] [~ x ~ x]!30 [~ x ~@2] ~@16>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@47 [~@11 x ~@4] [~@4 x ~ x!2 ~@4 x ~@3] [~ x ~ x]!9 ~@6>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@16 A B@7 C B@6 D C B@12 E F G H B@7 C B I ~@5>".pickRestart({
  A: "~@5 x!3", B: "x!8", C: "x!2 ~ x ~ x!3", D: "x!7 ~", E: "x!6 ~ x", F: "~ x!3 ~ x!3", G: "x!3 ~ x!2 ~ x",
  H: "x ~ x ~@2 x!3", I: "x!3 ~@5",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A ~@6 B A ~@12 C D E F ~@7 A ~@7>".pickRestart({
  A: "~ x ~@2", B: "~@7 x", C: "~@3 x", D: "x", E: "~@3 x ~@2 x ~", F: "~ x ~@6",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@7 A ~@7 A ~@13 A ~ A ~@7 A ~@7>".pickRestart({
  A: "~ x",
})).gain(0.4)

stack(
  music_box, string_ensemble_1, bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, kick, rim, snare, hihat, open_hat,
  crash
)