Strudelify

Voce 'e notte

Renzo Arbore

KeyG majorTempo78 bpm
0:00/0:00
// Voce 'e notte — Renzo Arbore
// 78 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · electric bass finger
const bass = note(`<
  ~@6 A B C B A B C D@2 B A B A B E F@2 A G H I B J K L M N O@4 M P Q R P R P S M T U V W@4 V X Y Z AA AB Q AC AD AE AF
  AG AE A AH AD@2 AI AJ AK AE AL AM AN AO AE B AP AQ A F D AR AS AT AU V@2 AV AT AW AX AY AZ AX BA BB BC BD BE BF BG@2
  BH BI BJ BK BL BM BN BM BO BP BQ BR BS BT
>`.pickRestart({
  A: "d2@3 a2@3 a1@2 d2@3 a2@3 d2@2", B: "a1@3 e2@3 e1@2 a1@3 e2@3 a1@2", C: "b1@3 e2@3 e1@2 b1@3 e2@3 e1@2",
  D: "a1@3 e2@3 e1@2 a1@3 e2@3 e1@2", E: "f1@3 c2@3 f2@2 f1@3 c2@3 f2@2", F: "e1@3 b1@3 e2@2 e1@3 b1@3 e2@2",
  G: "e2@3 b2@3 b1@2 e2@3 b2@3 e2@2", H: "f2@3 c3@3 c2@2 f2@3 c3@3 c2@2", I: "f2@3 c3@3 f2 e2 d2@3 a2@3 d2@2",
  J: "b1@3 f#2@3 f#1@2 b1@3 f#2@3 f#1@2", K: "e1@3 b1@3 e2@2 e1@3 b1@3 e2 ~", L: "e2 ~@15",
  M: "a1@3 e2@3 e1@2 ~ a1 ~ a1 e2@2 e1@2", N: "a1@3 e2@3 e1@2 ~ a1 ~ a1 e2@2 a1@2",
  O: "b1@3 e2@3 e1@2 ~ b1 ~ b1 e2@2 e1@2", P: "a1@3 e2@3 e1@2 ~ a1 ~ a1 e2@2 a1 ~",
  Q: "d2@3 a2@3 a1@2 ~ d2 ~ d2 a2@2 a1@2", R: "d2@3 a2@3 a1@2 ~ d2 ~ d2 a2@2 d2@2",
  S: "e1@2 ~ b1@3 e2@2 ~ b1 ~ b1 e2@2 e1@2", T: "a1 ~@11 a2@4", U: "e2@3 b2@3 b1@2 ~ d2 ~ d2 a2@2 a1 ~",
  V: "d2@3 a2@3 a1@2 ~ d2 ~ d2 a2@2 a1 ~", W: "e2@3 a2@3 a1@2 ~ e2 ~ e2 a2@2 a1@2", X: "d2@3 a2@3 a1@2 ~ d2 ~ d2 d2@4",
  Y: "a1@3 e2@3 a2@2 ~ g1 ~ g1 d2@2 g2@2", Z: "g1@3 d2@3 g2@3 g1 ~ g1 d2@2 g2@2",
  AA: "d2@3 a2@3 a1@2 ~ d2 ~ d2 a2@2 d2 d1", AB: "g1@3 d2@3 g2@2 ~ g1@3 g2@2 g1 ~",
  AC: "e2@3 a2@3 a1@3 e2 ~ e2 a2@2 a1 ~", AD: "d2@3 a2@3 a1@2 d2@3 a2@3 a1@2", AE: "g1@3 d2@3 g2@2 g1@3 d2@3 g2@2",
  AF: "d#2@3 a#2@3 a#1@2 d#2@3 a#2@3 d#2@2", AG: "d2@3 a2@3 a1@2 d2@3 a2@3 d2 d1", AH: "e2@3 a2@3 a1@2 e2@3 a2@3 a1@2",
  AI: "d2@3 a2@2 d1 a1@2 d2@3 a2@2 d1 a1@2", AJ: "e2@3 a#2@2 e1 a#1@2 e2@3 a#2@2 e1 a#1 ~",
  AK: "f2@3 a2@2 a1 d2@2 f2@3 a2@2 a1 d2 d1", AL: "d2@3 a2@2 d1 a1 ~ d2@3 a2@2 d1 a1 g#1",
  AM: "b1@3 f2@3 f1 ~ b1@3 f2@2 ~ a1@2", AN: "c#2@3 e2@3 a1@2 c#2@3 e2@2 ~ a1@2",
  AO: "c#2@3 e2@3 e1 ~ c#2@3 d2@2 e1 d2@2", AP: "a#1@3 f2@3 f1@2 a#1@3 f2@3 f1@2",
  AQ: "a#1@3 f2@3 a#1@2 g1@3 d2@3 g2@2", AR: "a1 ~@11 d2@4", AS: "a1@3 e2@3 a2@2 ~ g1@3 d2@2 g2@2",
  AT: "g1@3 d2@3 g2@2 ~ g1 ~ g1 d2@2 g2@2", AU: "d2@3 a2@2 ~ a1@2 ~ d2 ~ d2 a2@2 a1@2",
  AV: "d2@3 a2@3 a1@2 ~ d2 ~ d2 a2@2 d2 ~", AW: "g1@3 d2@2 ~ g2@3 g1 ~ g1 d2@2 g2 d2",
  AX: "c2@3 g2@3 g1@2 ~ c2 ~ c2 g2@2 g1 ~", AY: "c2@3 g2@2 ~ g1@2 ~ c2 ~ c2 g2@2 g1 ~",
  AZ: "g1@3 d2@3 g2@3 g1 ~ g1 d2@2 g1 ~", BA: "g1@3 d2@2 ~ g2@3 g1 ~ g1 d2@2 g2@2",
  BB: "d2@3 a2@3 a1@3 d2 ~ d2 a2@2 a1 ~", BC: "g1@2 ~ d2@3 g2@3 g1 ~ g1 d2@2 g2@2",
  BD: "f1@3 c2@3 f2@3 f1 ~ f1 c2 f1 f2 f1", BE: "a#1@3 f2@3 f1@2 ~ a#1 ~ a#1 f2@2 f1@2",
  BF: "a#1@3 f2@3 f1@2 ~ a#1 ~ a#1 f2@2 f1 ~", BG: "c2@3 f2@3 f1@3 c2 ~ c2 f2@2 f1@2",
  BH: "c2@3 f2@2 ~ f1@3 c2 ~ c2 f2@2 f1@2", BI: "c2@3 f2@3 f1@2 ~ c2 ~ c2 f2@2 f1 ~",
  BJ: "a#1@3 f2@2 ~ f1@2 ~ a#1 ~ a#1 f2@2 f1 ~", BK: "a#1@2 ~ f2@3 f1@3 a#1 ~ a#1 f2@2 a#1@2",
  BL: "d#2@3 a#2@3 a#1@2 ~ d#2 ~ d#2 a#2@2 a#1 ~", BM: "d#2@3 a#2@3 a#1@2 ~ d#2 ~ d#2 a#2@2 d#2 f1",
  BN: "a#1@3 f2@3 f1@3 a#1 ~ a#1 f2@2 a#1 ~", BO: "a#1@2 ~ f2@3 f1@2 ~ a#1 ~ a#1 f2@2 a#1 f1",
  BP: "c2@3 f2@3 f1@2 ~ c2 ~ c2 f2@2 c2 f1", BQ: "a#1@3 f2@3 a#1@2 c2@3 f#2@3 c2@2",
  BR: "a#1@3 f2@3 a#1@2 c2@3 f#2@2 ~ c2@2", BS: "a#1@3 f2@3 a#1@2 ~ c2 ~ c2 f#2@2 c2@2", BT: "~ a#1 ~@6",
})).s("gm_electric_bass_finger").gain(0.51)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@5 B C D E F C G H I@2 ~@2 J K ~@2 L M ~@2 N O ~@2 P Q ~@2 R S ~@2 T ~@3 U V ~@6 W X ~@2 Y Z ~@6 AA AB AC AD AE AF AG
  AH ~@11 AI AJ ~@3 AK ~@2 AL AM AN AO AP AQ ~@2 AR AS ~@2 AT AU ~@10 AV AW AX ~@5
>`.pickRestart({
  A: "[~@6 e4 ~ f4 g4 f4 [f4,g4] ~@6 e4@4 d#4!2 e4 f4 g4 f4 [f4,g4] ~@6 c4@5 ~ d4 ~ f4 [c4,d4] b3 ~@6 e4@3 [e4,f4] [c4,d4] [g#3,b3] g3 f3@2 ~@5 e4@3 ~ e5@7 ~@3, ~@12 e4@5 c4@5 ~@7 e4@7 ~@6 e4@2 ~@5 g3@6 ~@9 g#3@5 ~@11, ~@13 a2@9 ~@8 a2@9 ~@7 a#2@9 ~@6 e2@19, ~@15 e3@7 ~@10 e3@7 ~@9 d3@7 ~@25, ~@16 a3@6 ~@11 a3@6 ~@6 c4@5 c4@5 ~@10 b3@4 [f4,g#4]@9 ~@2]/5", // Fsus2 Csus2 Fmaj7 Csus2 G#m Fm
  B: "~@5 c5!2 ~@2 c5!4 b4!2 a4", C: "f4@2 ~ f4@6 c5!4 b4 ~ [b4,c5]", D: "e4@3 e4@5 ~ e4 f4 g#4 a4 b4 c5 f5, a4 ~@15",
  E: "e5@7 ~ d5 [d5,e5] c5 [c5,d5] b4!2 [b4,e5] b4", F: "a4@3 a4@5 ~ c5!4 b4!2 a4",
  G: "e4@3 e4@5 b3 [c4,d4] e4 [f4,g#4] a4 [b4,c5] [d5,e5] f5, a4 ~@15", // Csus2 Fm Cmaj7 Dsus2
  H: "e5@6 ~@2 f4 [e4,g4] [e4,f4] [b3,c4,d4] a3 [f3,g#3] [d3,e3] c3", // Em Fmaj7 Bm Fm Dsus2
  I: "[a2@7 ~@4 e4 [e4,f4]@2 b3@4 ~@5 [b3,c4] c4@7 ~, b2 ~@13 c4 ~@9 d4 ~@7]/2", J: "~@5 c5!4 b4!2 a4!2 g4 f4 e4",
  K: "f4@9 ~@7", L: "~ e5!2 d5!2 c5 b4!2 a4 g#4 [f4,g#4] f4 [e4,f4]!2 b3 e4", M: "~@5 d4 [c4,d4] b3@5 ~@4, ~@7 c4 ~@8",
  N: "~ f4!2 g4!2 a4!2 b4 c5 [c5,d5] d5 e5 [e5,f5] d5 [d5,e5] c5", O: "b4 [b4,c5] a4 ~@4 [f4,g4] e4 ~@7",
  P: "~@7 a4 a4@2 ~ [f4,g4] [d4,e4] [b3,c4] [f3,g3,a3] [d3,e3]", Q: "[e2,b2] ~@15",
  R: "~@2 e5!3 ~@3 e5 [d5,e5] d5 c#5 [b4,c#5] b4 a4!2", S: "g#4 f#4 [e4,f#4] e4@2 ~@11",
  T: "~@3 a3 b3 c#4 d#4 e4 d#4@3 c#4 a3@4, ~@8 e4 ~@3 b3 ~@3", U: "~ a4 b4 c5!2 ~@2 b4!2 a4!2 g4 ~ g4 f4 e4",
  V: "f4 ~@3", W: "~ e5!2 d5!2 c#5@2 ~@2 b4 ~ a4 ~ g4 ~ f#4", X: "f#4 [f#4,g4]@2 ~ e4@3 ~@9",
  Y: "~ b4 a4 b4 a4 b4 a4 b4 a4 b4 a4 b4 a4 b4 a4 b4", Z: "a4 ~@2 a4 ~@12", AA: "~@10 a4!2 g4!2 [f#4,g4] [f#4,c5]",
  AB: "[c#5,d5] d5!8 ~@3 d5!4", AC: "d5!8 [c5,d5] c5!3 [c5,d5] d5!2 [b4,c5]", AD: "[a4,a#4] a4!9 ~@6",
  AE: "~@4 a#4!8 g4!3 [g4,a4]", AF: "[f4,g4] f4!15", AG: "[f4,g4] g4!11 [e4,g4] e4!2 [e4,f4]", AH: "[d4,e4] d4!14 ~",
  AI: "~ a#4!3 c5 d5 ~@2 a#4!3 c5 d5!2 c5 [a#4,c5]", AJ: "a#4 a4 g4!2 f4!2 ~@10",
  AK: "~@11 [a3,d4,f#4] [a3,d4,f#4]@2 ~@2", AL: "~@4 d5!2 ~@4 d5 [c5,d5] c5 b4 a4 [g4,a4]",
  AM: "g4 [f#4,g4] f#4 e4 d4 d4@2 ~@9", AN: "~@2 d4!2 ~ d4 e4 [e4,f#4] f#4 g4!2 f#4!2 ~@3", AO: "~@15 g4",
  AP: "~ g4 a4 b4!2 c#5 [c#5,d5] d5 c#5 [b4,c#5] b4 a4!2 g4 [f#4,g4] f#4", AQ: "g4 [e4,f#4]!2 d4 ~ d4 ~@10",
  AR: "~@11 g4 f4 d#4 ~ [d4,d#4]", AS: "d#4 ~@3, f4 ~@15",
  AT: "~@2 a3!2 a#3 [a#3,c4] ~@2 d4 [d4,d#4] d#4 [d#4,f4] f4 g4 a4!2", AU: "a#4 c5!2 ~@13",
  AV: "~ c#5 c5 c#5 a#4 c#5 g#4 c#5 f#4!2 f4 d#4!2 c#4 c4 c#4", AW: "c#4@5 ~@11, d#4 ~@15",
  AX: "a#4@3 c5@2 ~ c#5@2 a#4@2 ~ c5@3 c#5@2",
})).s("gm_acoustic_guitar_nylon").gain(0.44).pan(0.4)

// other · banjo
const banjo = note("<~@76 A B C D E F G H I J ~@34>".pickRestart({
  A: "~@8 a4 [b4,c#5] a4 [b4,c#5] [d5,e5] [f5,g5] [d5,e5,f5] c#5", // Bsus2 Dsus2 Fsus2 Dm
  B: "[a4,a#4] a4 [e4,a4] [f4,g4] [e4,f4] ~ c#4 [d4,e4] [c#4,d4] c#4 [c#4,d4] d4!5", C: "d4!10 [d4,g4] g4 [f4,g4] f4!3",
  D: "[e4,f4] e4!15", E: "[e4,f4] f4!15", F: "f4!8 [f4,g4] g4!7", G: "[f4,g4] f4!15", H: "f4!16",
  I: "[e4,f4] e4!3 [e4,e5] [d5,e5,f5] c#5 a#4 a4 g4 f4 ~ c#4 [a#3,c#4,d4] a3 a#3", J: "c#4 ~@15",
})).s("gm_banjo").gain(0.24)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@6 A B C D A E F ~ G ~ H I J K ~ L@2 ~ M ~ N ~@4 O@2 P@2 Q@2 O@2 R@2 S T S U V ~ W@2 X@2 O@2 Y@2 Z@2 T AA T AB AC AD
  AE AF AG T AH AI@2 AJ AG AK AL AM@2 O@2 AN AB AO@2 T AP AB ~ AQ@2 Y@4 AR@2 AS@2 AT AU AV AW AT AX AY@2 AZ@4 AN BA BB@2
  BC BD BC BE BF@2 BG BH
>`.pickRestart({
  A: "[f4,a4]", B: "[c4,e4,a4]@15 ~", C: "[e4,g#4]", D: "[c4,e4,a4]", E: "[c4,e4]", F: "[b3,e4,g#4]@15 ~", G: "b4 ~",
  H: "[d4,a4]@15 ~", I: "[c4,a4]", J: "a4@15 ~", K: "c4@15 ~", L: "[e4@31 ~]/2", M: "e4", N: "~ f4", O: "[a3,c#4,e4]/2",
  P: "[e4@19 ~ e4@4 e4@4 f#4@4, [g#3,b3]]/2", Q: "[e4,g#4]/2", R: "[d4,f4,a4]/2", S: "[a3,c4,e4]", T: "[a3,d4,f4]",
  U: "[g#3,d4,e4]", V: "[a3,c#4,e4]@7 ~", W: "[[a3,d4,f#4]@31 ~]/2", X: "[[a3,c#4,e4]@31 ~]/2", Y: "[a3,d4,f#4]/2",
  Z: "[a#3,d4,g4]/2", AA: "[g3,a#3,d4,e4]", AB: "[a3,c#4,e4]", AC: "[a3,d4,f4] [a3,d4,f#4]", AD: "[a#3,d4,g4]@15 ~",
  AE: "[d#3,a#3,d4,g4]", AF: "[a3,d4,f4]@15 ~", AG: "[g3,a#3,e4]", AH: "[g3,c#4,e4]@15 ~", AI: "[f3,a3,d4]/2",
  AJ: "[f3,d4]@3 e4@3 [d4,f4]@10, a3", AK: "e4 ~ f4@2, a3, ~ d4@3", AL: "[a#3,d4,e4,g4]",
  AM: "[a3@16 b3@15 ~, [d4,f4]]/2", AN: "[a#3,d4,f4]", AO: "[f4@3 g4, [a#3,d4]]/2", AP: "[b3,d4,f4]",
  AQ: "[b3,d4,g4]/2", AR: "[g3,b3,d4]/2", AS: "[c4,d#4,g4]/2", AT: "[a#3,d4,g4]", AU: "[g3,c4,d#4]", AV: "[g3,a#3,d4]",
  AW: "[a3,c4,f#4]", AX: "[a3,c4,f4]", AY: "[a#3,d4,f4]/2", AZ: "[a3,c4,f4]/2", BA: "[f3,a#3,d4]",
  BB: "[a#3,d#4,f#4]/2", BC: "[a#3,c#4,f4]", BD: "[a#3,d#4,f#4]", BE: "[a3,c4,f4]@15 ~",
  BF: "[a#3,c#4,f4] [a#3,d#4,f#4]", BG: "[a#3,c#4,f4]@8 [a#3,d#4,f#4]@7 ~", BH: "~@2 [a#3,c#4,f4] ~@13",
})).s("gm_string_ensemble_2").gain(0.23)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@6 A ~ B ~ A C ~ D@3 E F G H I J@2 K L M@2 N O P ~@90>".pickRestart({
  A: "d4@15 ~", B: "b3@15 ~", C: "a4@15 ~", D: "[a4@15 ~@9 a4@23 ~, [c4,e4]@47 ~]/3", E: "f4@15 ~", F: "e4",
  G: "[d4,f4]", H: "[e4,a4]", I: "[a3,c4,f4]", J: "[[g#3,b3]@31 ~]/2", K: "[d4,f4,a4]", L: "[b3,g#4]",
  M: "[[c4,f4,a4]@24 [d4,a4]@7 ~]/2", N: "[c4,e4,a4]", O: "[b3,d#4,f#4]", P: "[g#3,b3,e4]",
})).s("gm_string_ensemble_2").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@31 [x!4]!15 x [x!4]!38 x [x!4]!33 [~ x ~@6]>").gain(0.62)

// drums · snare
const snare = s("sd").struct("<~@31 A@15 ~@16 A@23 ~ A@29 B A@3 C>".pickRestart({
  A: "~@3 x ~@2 x ~@4 x ~@2 x ~", B: "~@3 x ~@5 x!2 ~@5", C: "~ x ~@6",
})).gain(0.69)

// drums · low tom
const low_tom = s("lt").struct("<~@31 [x!4]!15 x [x!4]!38 x [x!4]!33 [~ x ~@6]>").gain(0.55)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@31 A B@7 A C B C B@2 C D ~@23 A B@13 C D A B@2 C B C B@5 C B C B@5 C B C B@5 C B C B@3 ~
>`.pickRestart({
  A: "~ x!15", B: "x!16", C: "x!15 ~", D: "x",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@40 A ~ A ~@2 A ~@38 A ~@4 A ~ A ~@5 A ~ A ~@5 A ~ A ~@5 A ~ A ~@4>".pickRestart({
  A: "~@15 x",
})).gain(0.55)

// drums · ride
const ride = s("rd").struct("<~@115 [~@7 x ~@8] ~@4>").gain(0.55)

// drums · tambourine
const tambourine = s("tb").struct("<~@47 [~ x ~ x ~ x ~ x]!23 ~@16 [~ x ~ x ~ x ~ x]!33 ~>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@31 A ~@7 A ~@22 A@4 ~@4 A ~@15 A ~@14 A ~@8 A ~@5 A ~@2 B>".pickRestart({
  A: "x", B: "~ x ~@6",
})).gain(0.48)

// drums · congas
const congas = s("conga:13").struct("<~@6 A@24 B A@14 C ~ A@23 D@15 ~ A@33 E>".pickRestart({
  A: "~@2 x!2 ~ x ~@4 x!2 ~@4", B: "x", C: "~@2 x!2 ~ x ~@3 x ~ x ~@4", D: "~@3 x ~ x ~@4 x!2 ~@4", E: "~ x ~@6",
})).gain(1.55)

// drums · congas
const congas_2 = s("conga:18").struct("<~@6 A@24 ~ A@14 B ~ A@23 C@15 ~ A@33 ~>".pickRestart({
  A: "~ x ~@4 x ~@2 x ~@3 x ~@2", B: "~ x ~@4 x ~@6 x ~@2", C: "~@13 x ~@2",
})).gain(1.55)

// drums · congas
const congas_3 = s("conga:33").struct("<~@6 A@24 ~ A@15 ~ A@38 ~ A@33 ~>".pickRestart({
  A: "~@7 x ~@6 x!2",
})).gain(1.55)

// drums · ht
const ht = s("ht").struct("<~@13 [~@8 x!4 ~@4] ~@15 [~@8 x!5 ~@3] ~@90>").gain(0.41)

// drums · shaker
const shaker = s("sh").struct("<~@6 A@24 B C A@14 B D@23 A@15 B C A@32 E>".pickRestart({
  A: "x!14 ~@2", B: "x", C: "~ x!13 ~@2", D: "x!14 ~ x", E: "~ x ~@6",
})).gain(0.48)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@6 A@24 ~ A@15 ~ B@23 A@15 ~ A@33 ~>".pickRestart({
  A: "~@14 x!2", B: "~@7 x",
})).gain(0.28)

// drums · guiro
const guiro = s("guiro:4").struct("<~@6 [~ x ~@7 x ~@6]!24 ~@17 [~ x ~@7 x ~@6]!14 ~@59>").gain(8.76)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct(`<
  ~@47 A B C D@2 E F G A B C D@2 E F A B C D@2 E F G ~@16 A B C D@2 E F G A B C D@2 E F G A B C D@2 E F G A B C D@2 E A
  B C H
>`.pickRestart({
  A: "~@9 x ~@2 x ~@2 x", B: "~@3 x ~@2 x ~@2 x ~@4 x ~", C: "~@3 x ~@2 x ~@2 x ~ x ~@2 x ~",
  D: "~@2 x ~@2 x ~@3 x ~@2 x ~@2 x", E: "~@2 x ~@2 x ~@2 x ~@4 x ~@2", F: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@2",
  G: "x ~@2 x ~@2 x ~@4 x ~@2 x ~", H: "~ x ~@6",
})).gain(0.6)

stack(
  bass, acoustic_guitar_nylon, banjo, string_ensemble_2, string_ensemble_2_soft, kick, snare, low_tom, hihat, open_hat,
  ride, tambourine, crash, congas, congas_2, congas_3, ht, shaker, shaker_soft, guiro, woodblocks
)

More by Renzo Arbore