Microtonal Tuning: Vincentino's "Madonna il poco dolce" (1555)

I became interested in microtonal tunings after watching a video on a Renaissance “enharmonic organ.”

A bit more looking and I found this piece, Madonna il poco dolce, by Nicola Vincentino, performed on a reconstruction of the enharmonic harpsichord he designed, the archicembalo.


I was curious to see if I could emulate this instrument in Sonic Pi, since I knew it could play fractional midi notes. Using the the tuning in cents found in the diagram on the Wikipedia page (checking them against a couple of other sources), I input offsets for each of the notes in one octave and created a function to move the notes to the octaves I wanted. I wasn’t quite sure how to store these in way that I could easily refer to them by name except by putting each offset in a variable. The song itself was transcribed from the original score, and checked against the above Youtube video. Each part is a nested list. I’m not sure if that’s the best way to store that either.

https://imslp.org/wiki/L'antica_musica_ridotta_alla_moderna_prattica_(Vicentino%2C_Nicola)

The only other thing I’m not sure of is what tuning pitch was used at this period in Italy, so C4 is just at modern pitch.


# "Madonna il poco dolce"
# composed by Nicola Vicentino
# from "L'antica musica ridotta alla moderna prattica" (1555) pages 68-69
# https://imslp.org/wiki/L%27antica_musica_ridotta_alla_moderna_prattica_(Vicentino%2C_Nicola)

# code by Thomas Quanci
# 31 August, 2019


# tuning for the enharmonic harpsichord, "archicembalo," designed by Vicentino
# https://en.wikipedia.org/wiki/Archicembalo

# this performance and sheet music used to check against original score
# https://www.youtube.com/watch?v=bhGwjgZ8zIY
# the score was preferred when the two differed


# Lyrics (from this vocal performance, https://www.youtube.com/watch?v=GoEpUcAHL08):

# Madonna, il poco dolce e il molto amaro
# Il breve riso, il troppo lungo pianto
# M’hanno ridotto a tanto
# Che’l pianger sempr’ e sospirar mi è caro

# My lady, the small sweetness and great bitterness,
# The brief smile, the too-long grief
# Have reduced me so much
# That to weep always and sigh are dear to me.


# defining the tuning

c  = 0.00 # offset from C in cents/100 = semitones = midi note
cd = 0.41
cs = 0.76

db = 1.17 # flat
dbd = 1.58 # diesis up flat (dot above note on score)
d = 1.93 # natural
dc = 1.98 # comma up natural (comma above note on score... not in this piece)
dd = 2.34 # diesis up natural (dot above note on score)
ds = 2.69 # sharp

eb = 3.10
ebd = 3.51
e = 3.86
ec = 3.92
ed = 4.27
es = 4.62

f = 5.03
fd = 5.44
fs = 5.79

gb = 6.20
gbd = 6.61
g = 6.96
gc = 7.02
gd = 7.37
gs = 7.72

ab = 8.13
abd = 8.54
a = 8.89
ac = 8.95
ad = 9.30
as = 9.65

bb = 10.06
bbd = 10.47
b = 10.82
bc = 10.88
bd = 11.23
bs = 11.58

r = -1 # rest


# durations for easy input

q = 0.25 # quarter (semiminim)
h = 0.5 # half (minim)


# for puttting notes in the desired octave

define :oct do |pitch, oct|
  return (12*(oct+1) + pitch)
end


# define the parts

#          [note, duration, octave]
soprano = [[g, 2, 4], #bar 1s (for reference, not in score)
           [gb, 1, 4],
           [fd, 1, 4],
           
           [g, h, 4], #2s
           [a, h, 4],
           [g, 1, 4],
           [a, 1, 4],
           [ad, 1.5, 4],
           
           [ad, h, 4], #3s
           [bb, 1, 4],
           [bb, 1, 4],
           [r, h],
           [c, h, 5],
           
           [bd, 1.5, 4], #4s
           [bd, h, 4],
           [b, h, 4],
           [b, h, 4],
           [bd, 1, 4],
           
           [c, h, 5], #5s
           [c, 1, 5],
           [bb, h, 4],
           [g, 1, 4],
           [a, 2, 4],
           
           [r, h], #6
           [g, h, 4],
           [f, q, 4],
           [d, q, 4],
           [a, 1, 4],
           [g, h, 4],
           
           [f, q, 4], #7s
           [f, q, 4],
           [e, 1, 4],
           [e, h, 4],
           [f, 1, 4],
           [fs, 1, 4],
           
           [g, 1, 4], #8s
           [gs, 1, 4],
           [a, 2, 4],
           
           [bb, 1, 4], #9s
           [b, 1, 4],
           [b, 1, 4],
           [b, 1, 4],
           
           [r, 1.5], #10s
           [f, h, 4],
           [fs, h, 4],
           [f, h, 4],
           [ed, 1.5, 4],
           
           [fd, h, 4], #11s
           [d, 1.5, 4],
           [ds, h, 4],
           [ed, h, 4],
           [ed, h, 4],
           
           [ed, 1, 4], #12s
           [f, 1, 4],
           [fs, 1, 4],
           [g, 2, 4],
           
           [r, h], #13s
           [g, h, 4],
           [e, h, 4],
           [e, h, 4],
           [f, h, 4],
           [fs, h, 4],
           
           [gb, 1, 4], #14s
           [gd, 1, 4],
           [r, h],
           [ad, h, 4],
           [bbd, h, 4],
           [gd, h, 4],
           
           [gbd, h, 4], #15s
           [gb, h, 4],
           [g, h, 4],
           [gs, h, 4],
           [a, 1, 4],
           [r, h],
           [d, 1, 4],
           
           [eb, h, 4], #16s
           [e, h, 4],
           [c, 0.75, 5],
           [bb, q, 4],
           [a, 1, 4],
           [c, h, 5],
           
           [a, 1, 4], #17s
           [bb, h, 4],
           [bb, 0.75, 4],
           [a, q, 4],
           [g, 1, 4],
           [fs, h, 4],
           
           [g, 2, 4], #18s
           [a, 1, 4],
           [r, 3],
           
           [a, 1, 4], #19s
           [bb, 1, 4],
           
           [b, 1, 4], #20s
           [b, 0.75, 4],
           [c, q, 5],
           [d, h, 5],
           [d, h, 5],
           [ad, h, 4],
           [bbd, h, 4],
           
           [bb, 1.5, 4], #21s
           [a, h, 4],
           [a, 2, 4],
           
           [fs, 2, 4], #22s
           
           [gb, 2, 4]] #23s

alto = [[d, 1, 4], #1a
        [d, 1, 4],
        [dd, 1, 4],
        [cd, h, 4],
        [cd, h, 4],
        
        [e, h, 4], #2a
        [f, h, 4],
        [d, 0.75, 4],
        [e, q, 4],
        [f, h, 4],
        [f, h, 4],
        [gb, 1, 4],
        
        [gb, 1, 4], #3a
        [r, 1],
        [g, 2, 4],
        
        [gd, 1.5, 4], #4a
        [gd, h, 4],
        [gs, h, 4],
        [gs, h, 4],
        [gd, 1, 4],
        
        [g, h, 4], #5a
        [f, 0.75, 4],
        [eb, q, 4],
        [d, h, 4],
        [eb, 1, 4],
        [d, 1, 4],
        
        [d, 1, 4], #6a
        [r, h],
        [d, h, 4],
        [d, q, 4],
        [f, q, 4],
        [f, 1, 4],
        [e, h, 4],
        
        [c, q, 4], #7a
        [d, q, 4],
        [g, h, 3],
        [g, h, 3],
        [r, h],
        [a, 1, 3],
        [d, 1, 4],
        
        [b, 1, 3], #8a
        [e, 0.75, 4],
        [d, q, 4],
        [c, h, 4],
        [c, h, 4],
        [a, 1, 3],
        
        [d, 1, 4], #9a
        [r, 1],
        [gs, 1, 4],
        [g, 1, 4],
        
        [fs, 1, 4], #10a
        [f, 0.75, 4],
        [e, q, 4],
        [d, 1, 4],
        [db, 1, 4],
        
        [cd, 1, 4], #11a
        [f, 1, 3],
        [r, 1],
        [cd, 1, 4],
        
        [db, 1, 4], #12a
        [d, 1, 4],
        [a, h, 3],
        [bb, 1, 3],
        [c, h, 4],
        
        [b, 1, 3], #13a
        [bb, 1, 3],
        [a, 1, 3],
        [d, 1, 4],
        
        [ad, 1, 3], #14a
        [d, h, 4],
        [gd, 1, 3],
        [gb, h, 3],
        [gd, h, 3],
        [bbd, h, 3],
        
        [ad, 1, 3], #15a
        [c, h, 4],
        [b, h, 3],
        [c, h, 4],
        [cs, h, 4],
        [d, h, 4],
        [d, h, 4],
        
        [b, h, 3], #16a
        [b, h, 3],
        [g, 1, 3],
        [a, h, 3],
        [c, 1, 4],
        [c, h, 4],
        
        [r, h], #17a
        [d, h, 4],
        [d, 1.5, 4],
        [d, h, 4],
        [d, h, 4],
        [d, h, 4],
        
        [b, 1, 3], #18a
        [c, 1, 4],
        [r, h],
        [d, h, 4],
        [ad, h, 3],
        [bbd, h, 3],
        
        [bb, h, 3], #19a
        [c, h, 4],
        [c, h, 4],
        [b, h, 3],
        [a, 1, 3],
        [r, h],
        [g, h, 4],
        
        [g, 1.5, 4], #20a
        [d, h, 4],
        [fs, 1, 4],
        [gb, 1, 4],
        
        [g, h, 4], #21a
        [g, h, 4],
        [fs, h, 4],
        [f, 1, 4],
        [d, 1, 4],
        [cs, h, 4],
        
        [d, 2, 4]] #22a

tenor = [[b, 1, 3], #1t
         [bb, 1, 3],
         [ad, 2, 3],
         
         [c, 1, 4], #2t
         [bb, 1, 3],
         [c, 1, 4],
         [dd, 1, 4],
         
         [dd, 1, 4], #3t
         [r, h],
         [d, h, 4],
         [eb, 1.5, 4],
         [eb, h, 4],
         
         [dd, 1, 4], #4t
         [dd, 1, 4],
         [e, 1, 4],
         [dd, 1, 4],
         
         [r, h], #5t
         [a, h, 3],
         [a, h, 3],
         [bb, h, 3],
         [bb, 1, 3],
         [a, 1, 3],
         
         [r, h], #6t
         [f, h, 3],
         [g, q, 3],
         [a, q, 3],
         [bb, h, 3],
         [a, 1, 3],
         [r, h],
         [c, h, 4],
         
         [a, q, 3], #7t
         [a, q, 3],
         [c, 1, 4],
         [c, h, 4],
         [r, 1],
         [a, 1, 3],
         
         [g, h, 3], #8t
         [g, h, 3],
         [b, h, 3],
         [b, h, 3],
         [a, 1, 3],
         [cs, 1, 4],
         
         [r, 1], #9t
         [d, 1, 4],
         [e, 2, 4],
         
         [a, 1, 3], #10t
         [a, 1.5, 3],
         [a, h, 3],
         [ad, 1, 3],
         
         [ad, 1, 3], #11t
         [r, h],
         [bb, h, 3],
         [fs, h, 3],
         [g, h, 3],
         [gd, 1, 3],
         
         [ad, 1, 3], #12t
         [a, 1, 3],
         [d, 1, 4],
         [g, 1, 3],
         
         [r, h], #13t
         [e, h, 4],
         [d, h, 4],
         [d, h, 4],
         [cs, h, 4],
         [c, h, 4],
         [a, 1, 3],
         
         [dd, h, 4], #14t
         [dd, h, 4],
         [bd, h, 3],
         [bbd, h, 3],
         [ad, h, 3],
         [dd, h, 3],
         [dd, 1, 3],
         
         [dd, 1, 3], #15t
         [e, 1, 3],
         [e, h, 3],
         [f, h, 3],
         [f, h, 3],
         [g, h, 3],
         
         [fs, h, 3], #16t
         [fs, h, 3],
         [c, h, 4],
         [e, h, 3],
         [e, h, 3],
         [e, h, 3],
         [a, 0.75, 3],
         [bb, q, 3],
         
         [c, h, 4], #17t
         [f, h, 3],
         [f, h, 3],
         [f, h, 3],
         [g, h, 3],
         [bb, h, 3],
         [a, 1, 3],
         
         [g, 1, 3], #18t
         [r, 1],
         [fs, 1, 3],
         [gb, h, 3],
         [fd, h, 3],
         
         [g, 2, 3], #19t
         [c, h, 4],
         [d, 1, 4],
         [d, h, 4],
         
         [e, h, 4],#20t
         [e, h, 4],
         [e, h, 4],
         [b, h, 3],
         [r, h],
         [a, h, 3],
         [dd, h, 4],
         [dd, h, 4],
         
         [bb, 0.75, 3], #21t
         [c, q, 4],
         [d, h, 4],
         [a, 0.75, 3],
         [g, q, 3],
         [f, h, 3],
         [e, 1, 3],
         
         [d, 4, 3]] #22t

bass = [[g, 1, 3], #1b
        [g, 1, 3],
        [dd, 1, 3],
        [fd, 1, 3],
        
        [c, h, 3], #2b
        [f, h, 3],
        [g, h, 3],
        [g, h, 3],
        [f, h, 3],
        [f, h, 3],
        [dd, 2, 3],
        
        [g, 1, 3], #3b
        [r, 1],
        [c, 1, 3],
        
        [gd, 1.5, 3], #4b
        [gd, h, 3],
        [e, h, 3],
        [e, h, 3],
        [gd, 1, 3],
        
        [e, h, 3], #5b
        [f, 1, 3],
        [g, h, 3],
        [g, 1, 3],
        [f, 1, 3],
        
        [r, h], #6b
        [d, h, 3],
        [c, q, 3],
        [f, q, 3],
        [g, h, 3],
        [d, 1, 3],
        [r, h],
        [c, h, 3],
        
        [f, q, 3], #7b
        [d, q, 3],
        [c, 1, 3],
        [a, h, 2],
        [d, 2, 3],
        
        [e, 2, 3], #8b
        [f, 1, 3],
        [fs, 1, 3],
        
        [g, 2, 3], #9b
        [e, 2, 3],
        
        [d, 3, 3], #10b
        [r, 1],
        
        [ad, 1, 2], #11b
        [bb, 1, 2],
        [b, 1, 2],
        [cd, 1, 3],
        
        [ad, 1, 2], #12b
        [d, 2, 3],
        [eb, 1, 3],
        
        [e, 1, 3], #13b
        [g, 1, 3],
        [r, 1],
        [d, 1, 3],
        
        [dd, h, 3], #14b
        [dd, h, 3],
        [gd, h, 2],
        [gd, h, 2],
        [dd, 1, 3],
        [gd, 1, 2],
        
        [r, 2], #15b
        [a, 1, 2],
        [bb, 1, 2],
        
        [b, 1, 2], #16b
        [c, 1, 3],
        [a, 1, 2],
        [f, 1.5, 3],
        
        [d, h, 3], #17b
        [bb, 0.75, 2],
        [a, q, 2],
        [g, h, 2],
        [g, h, 2],
        [d, 1, 3],
        
        [g, 1, 2], #18b
        [r, 1],
        [d, 1, 3],
        [dd, 1, 3],
        
        [eb, 1, 3], #19b
        [e, 1, 3],
        [f, 1, 3],
        [g, 1, 3],
        
        [e, 1, 3], #20b
        [r, h],
        [g, h, 3],
        [d, 1, 3],
        [dd, 1, 3],
        
        [eb, 1, 3], #21b
        [d, 2, 3],
        [a, 1, 2],
        
        [a, 4, 3]] #22b


#play the piece

use_bpm 50

use_synth :fm
div = 1 # divisor
dep = 0.5 # depth

at = 0.00 # attack
am = 1  # amp

with_fx :reverb, mix: 0.7 do
  in_thread do
    soprano.each do |n| # play soprano part
      if n[0] != -1  # check for rests
        play oct(n[0], n[2]), release: n[1], pan: 0.67, attack: at, amp: am, divisor: div, depth: dep
        sleep n[1]
      else
        sleep n[1]
      end
    end
  end
  
  in_thread do
    alto.each do |n| # play alto part
      if n[0] != -1
        play oct(n[0], n[2]), release: n[1], pan: -0.33, attack: at, amp: am, divisor: div, depth: dep
        sleep n[1]
      else
        sleep n[1]
      end
    end
  end
  
  in_thread do
    tenor.each do |n| # play tenor part
      if n[0] != -1
        play oct(n[0], n[2]), release: n[1], pan: 0.67, attack: at, amp: am, divisor: div, depth: dep
        sleep n[1]
      else
        sleep n[1]
      end
    end
  end
  
  in_thread do
    bass.each do |n| # play bass part
      if n[0] != -1
        play oct(n[0], n[2]), release: n[1], pan: -0.33, attack: at, amp: am, divisor: div, depth: dep
        sleep n[1]
      else
        sleep n[1]
      end
    end
  end
end
1 Like