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
4 Likes

This is really cool! A friend was just telling me the other day how gaelic music uses a lot of microtones and this is a great example if I start trying to transcribe some.

1 Like

Slightly neater code.


# "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
# 3 September, 2019


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

# 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.


# The Archicembalo
# approximate tuning in cents

# --------------------------------------------------
# |    |dc  | |ec  |   |    |gc  | |ac  | |bc  |   |
# |    |198 | |392 |   |    |702 | |895 | |1088|   |
# |    |----| |----|   |    |----| |----| |----|   |
# |    |dbd | |ebd |   |    |gbd | |abd | |bbd |   |
# |    |158 | |351 |   |    |661 | |854 | |1047|   |
# |    |----| |----|   |    |----| |----| |----|   |
# |cd    |dd    |ed    |fd    |gd    |ad    |bd    |
# |41    |234   |427   |544   |737   |930   |1123  |
# |------|------|------|------|------|------|------|---
#    | |db  | |ds  | |es  | |gb  | |ab  | |as  | |bs  |
#    | |117 | |269 | |462 | |620 | |813 | |965 | |1158|
# ---| |----| |----| |----| |----| |----| |----| |----|
# |    |cs  | |eb  |   |    |fs  | |gs  | |bb  |   |
# |    |76  | |310 |   |    |579 | |772 | |1006|   |
# |    |----| |----|   |    |----| |----| |----|   |
# |c     |d     |e     |f     |g     |a     |b     |
# |0     |193   |386   |503   |696   |889   |1082  |
# |------|------|------|------|------|------|------|


# defining the tuning

# quarter-comma meantone system (in modern terminology)
# offset from C in cents/100 = semitones = midi note

tuning = [0]
for i in -18..12
  tuning[i+18] = (Math.log(5**0.25, 2)*12*i)%12 # a circle of slightly flat fifths
end
tuning = tuning.sort # get them in order

c  = 0 # index in tuning offset list
cd = 1
cs = 2

db = 3 # flat
dbd = 4 # diesis up flat (dot above note on score, not modern diesis)
d = 5 # natural
dd = 6 # diesis up natural (dot above note on score, not modern diesis)
ds = 7 # sharp

eb = 8
ebd = 9
e = 10
ed = 11
es = 12

f = 13
fd = 14
fs = 15

gb = 16
gbd = 17
g = 18
gd = 19
gs = 20

ab = 21
abd = 22
a = 23
ad = 24
as = 25

bb = 26
bbd = 27
b = 28
bd = 29
bs = 30

comma = Math.log(81.0/80.0, 2)*3
# there are five extra keys and Vincentino decided to pitch them up this much (not modern comma)

tuning[31] = tuning[5] + comma
dc = 31 # comma up natural (comma above note on score... not in this piece)
tuning[32] = tuning[10] + comma
ec = 32
tuning[33] = tuning[18] + comma
gc = 33
tuning[34] = tuning[23] + comma
ac = 34
tuning[35] = tuning[28] + comma
bc = 35

r = -1 # rest

# for adding the offset and puttting notes in the desired octave

define :tuner do |deg, oct, tune|
  return (12*(oct+1) + tune[deg])
end


# define the parts

# durations for easy input

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

#         [note, duration, octave]
parts = [[[g, 2, 4], #bar 1-soprano (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]],
         
         #--------------------
         
         [[d, 1, 4], #1-alto
          [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
         
         #--------------------
         
         [[b, 1, 3], #1-tenor
          [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
         
         #----------------------
         
         [[g, 1, 3], #1-bass
          [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
panning = [0.33, -0.33, 0.67, -0.67] # panning for each part
p = 0 # panning index

with_fx :reverb, mix: 0.7 do
  parts.each do |part|
    in_thread do # each part in a thread
      tpan = p # panning index for thread
      part.each do |n| # play part
        if n[0] != -1  # check for rests
          play tuner(n[0], n[2], tuning), release: n[1], pan: panning[tpan], attack: at, amp: am, divisor: div, depth: dep
          sleep n[1]
        else
          sleep n[1]
        end
      end
    end
    p+=1
  end
end
3 Likes

I liked this very much. You’ve done a lot of work on this, and the end result is impressive.
Personally I prefer to play it with the at attack variable set to about 0.015, as I found the original a bit “clicky” especially on the lower notes.

1 Like