Strudelify

Sassi

Paoli

KeyD minorTempo65 bpm
0:00/0:00
// Sassi — Paoli
// 65 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 7 "Guitar  (BB)" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 68 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(65/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 · acoustic bass · "Bass    (BB)"
const bass = note("<~@18 A B A B C D E B ~@24 A B A B C D E B ~@8 F@2>".pickRestart({
  A: "e2!2", B: "e2 a1", C: "gb2!2", D: "gb2 b1", E: "gb2 db2", F: "[d2@15 ~]/2",
})).s("gm_acoustic_bass").gain(0.24)

// chords · piano · "Piano   (BB)"
const piano = note(`<
  ~@2 A B C D E F G@2 C H E I A J K@2 L M N O P Q R S T H U I V W T E A J T B A D K@2 T B U H U B K@2 X O N Y Z AA AB AC
  U F U F U W U A AD@2
>`.pickRestart({
  A: "~@7 [a3,a4], [d4,f4] ~, d3 f3 [d3,d4] [f3,f4], ~ a3@2 a3@2 [a3,e4]@2 ~", // A Dm D F A5
  B: "~@7 bb3, g2@2 d3@3 d3@3, ~ bb2@2 g3@2 ~ g3@2, ~@2 bb3 ~",
  C: "~@3 a3 ~@3 d4, f4@5 d4@2 ~, d3 f3!2 a3, ~ a3@2 ~ a4@4",
  D: "~@7 [d3,d4], [g3,bb3] ~, g2 bb2 [g2,g3] [bb2,bb3], ~ d3@2 d3@2 [d3,a3]@2 ~", // D Gm G Bb D5
  E: "~@7 f4, d3@2 a3@3 a3@3, ~ f3@2 d4@2 ~ d4@2, ~@2 f4 ~",
  F: "g2 d3 bb2 d3 g2 d3 ~ [d3,bb3], [g3,bb3]@6 [bb2,g3] ~, ~@13 a3@2 ~", // Gm Eb
  G: "[~@15 e4, a2 a2, ~ e3@3 e4@2 ~ e4@4 db4 e4@2 db4@2, ~@2 g3@3 [e3,g3]@3 ~ e3@7, ~@3 db4@2 ~ db4@2 ~@2 g3@3 g3@3]/2", // Em
  H: "~@7 d3, g2, ~ bb2@2 bb2@2 d3@2 ~, ~ d3 g3 bb2", I: "~@6 g3 bb3, g2, ~ bb2@7, ~ d3 bb3 ~, ~@3 g3@2 d3@3",
  J: "~ d3 ~ d3 [g2,g3] ~ [bb2,bb3] [d3,d4], [g3,bb3]@3 ~@5, g2@2 [bb2,d4]@2 ~ [d3,a3]@2 ~", // G Bb D Gm Bb D5
  K: "[~@15 db4, a2@7 ~ a2@8, ~ db3@7 ~ db3@7, ~ e3 db4 a3 ~ e3 db4 a3, ~@3 a3@2 e3@2 db4@4 a3@2 e3@3]/2",
  L: "~@3 b3 e3 c4 g3 c4, g4 ~, e3 g3 ~@2, ~ b3@2 ~ [d4,g4]@4", // G5
  M: "e3 b3 g3 b3 ~@3 e3, [d4,g4] db4, ~@2 a2 db3, ~@5 e3@2 ~", // G5
  N: "e3@2 b3@2 ~@3 b4 e3@2 c4@2 g3@2 c4@2, b4@2 [g3,e4] [b3,g4] [d4,g4]@4, ~@5 gb4@2 ~@9", // C Em G5
  O: "e3@2 b3@2 ~@3 b4 ~@6 e3@2, b4@2 [g3,e4] [b3,g4] db4@4, ~@5 gb4@2 ~ a2@4 db3@4, ~@5 e3@2 ~", // C Em
  P: "gb2@2 db3@2 ~@3 db4 gb2@2 d3@2 ~@3 d4, db4@2 [a2,gb3] [db3,a3] ~@2 [a2,gb3] [d3,a3], ~@5 ab3@2 ~ d4@5 ab3@2 ~", // D Gbm D D5
  Q: "gb2 db3 a2 db3 ~@3 gb3, [gb3,a3] eb4, ~@2 b2 eb3, ~@5 gb3@2 ~", // Gbm
  R: "~@3 db3 ~@3 ab3, a3 f4, gb2@2 a2@2 ~ ab3@2 ~, ~ db3@2 ~ db3@2 f3@2",
  S: "e3 b3 g3 b3 a3 b3 db4 e4, [d4,g4] [a2,g3]", // G5 A7
  T: "~ a3 ~ a3 [d3,d4] ~ [f3,f4] [a3,a4], [d4,f4]@3 ~@5, d3@2 [f3,a4]@2 ~ [a3,e4]@2 ~", // D F A Dm F A5
  U: "d3 a3 f3 a3 d3 a3 ~ [a3,f4], [d4,f4]@6 [f3,d4] ~, ~@13 e4@2 ~", // Dm
  V: "~@6 d4 f4, d3, ~ f3@7, ~ a3 f4 ~, ~@3 d4@2 a3@3", W: "g2 d3 bb2 d3 a3 b3 db4 e4, [g3,bb3] [a2,g3]",
  X: "e3@2 b3@2 ~@3 b4 e3@2 c4@2 ~@3 c5, b4@2 [g3,e4] [b3,g4] ~@2 [g3,e4] [c4,g4], ~@5 gb4@2 ~ c5@5 gb4@2 ~", // C Em C C5
  Y: "e3@2 b3@2 g3@2 b3@2 a2@2 e3@2 ~@3 e4, [d4,g4]@4 e4@2 [db3,a3] [e3,db4], ~@13 b3@2 ~", // G5 Gbm Dbm
  Z: "gb2@2 db3@2 a2@2 db3@2 gb2@2 d3@2 ~@3 d4, [gb3,a3]@4 d4@2 [a2,gb3] [d3,a3], ~@13 ab3@2 ~", // Gbm D D5
  AA: "~@3 db3 ~@3 gb3, a3 eb4, gb2 a2 b2 eb3, ~ db3@2 ~@2 gb3@2 ~",
  AB: "~@3 db3!2 ab3 f3 ab3, a3 [b3,f4], gb2 a2 ~@2, ~ db3@2 ~@5", // Bdim
  AC: "e3@2 b3@2 ~@3 b4 a2@2 e3@2 ~@3 e4, b4@2 [g3,e4] [b3,g4] ~@2 [db3,a3] [e3,db4], ~@5 gb4@2 ~ e4@5 b3@2 ~", // C Em Gbm Dbm
  AD: "[~@3 d4 a4 ~@3 d5@7 ~, d3@6 f4 a4@8 ~, ~ f3@14 ~, ~@2 a3@13 ~, ~@5 d4@10 ~]/2",
})).s("gm_piano").gain(0.24)

// other · electric guitar clean · "Guitar  (BB)"
const electric_guitar_clean = note(`<
  ~@2 A B A B A B C@2 A B A B A B C@2 D E D E F G H E A B A B A I A@3 B A B A B C@2 A B A B A B C@2 D E D E F G H E A B
  A B A I A@2 J@2
>`.pickRestart({
  A: "d2", B: "g2", C: "[a2@31 ~]/2", D: "e2!2", E: "e2 a2", F: "gb2!2", G: "gb2 b1", H: "gb2 db2", I: "g2 a2",
  J: "[d2@31 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.24)

// chords · string ensemble 2 · "Strings (BB)"
const string_ensemble_2 = note(`<
  ~@2 A B A B A B C@2 A B A B A B C@2 D E F E G H I E A B A B A J A@3 B A B A B C@2 A B A B A B C@2 F K L K M H I K A B
  A B A J A@2 N@2
>`.pickRestart({
  A: "f3", B: "g3", C: "db3/2", D: "[e3,g4,b4,e5]!2", E: "[e2,g3,d4,b4] [a2,g3,db4,a4]",
  F: "[e2,g3,e4,b4] [e2,g3,d4,c5]", G: "[gb2,a3,db4,gb4] [gb2,a3,e4,d5]", H: "[gb2,a3,db4,gb4] [b2,a3,eb4,b4]",
  I: "[gb2,a3,db4,gb4] [db3,b3,f4,db5]", J: "g3 db3", K: "[e3,g4,b4,e5] [a2,g3,db4,a4]",
  L: "[e2,g3,e4,b4] [e3,g4,b4,e5]", M: "[gb2,a3,db4,gb4]!2", N: "[[d3,a3,f4,f5,d6]@31 ~]/2",
})).s("gm_string_ensemble_2").gain(0.12)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@66>").gain(0.28)

stack(bass, piano, electric_guitar_clean, string_ensemble_2, rim)

More by Paoli