back to list

Re: Spectral Tuning

🔗Paul Erlich <paul@stretch-music.com>

10/14/2001 7:30:03 PM

--- In tuning@y..., jacky_ligon@y... wrote:

> Below is the spectrum of a single stroke with a soft mallet on a
22"
> Paiste Symphonic Gong, as found by doing an FFT using Wavanal 3.5,
a
> program designed for church bell tuners. This program can do simple
> resynthesis, so that you can always aurally confirm that it got the
> results of the partials correct.
>
> Cents
> 0 (C @ 131 cps)
> 693.122
> 1339.589
> 1723.463
> 1895.335
> 2246.357
> 2553.251
> 3010.370
> 3282.706
>
> A rotation of the spectrum is always interesting to look at, and
> commonly reveals other intervals of interest (cents values rounded):
>
> 0 693 1340 1723 1895 2246 2553 3010 3283
> 0 647 1030 1202 1553 1860 2317 2590 3283
> 0 383 555 906 1213 1670 1943 2636 3283
> 0 172 523 830 1287 1560 2253 2900 3283
> 0 351 658 1115 1388 2081 2728 3111 3283
> 0 307 764 1037 1730 2377 2760 2932 3283
> 0 457 730 1423 2070 2453 2625 2976 3283
> 0 273 966 1613 1996 2168 2519 2826 3283

Well, these are rotations if you take the 3283-cent interval as
an "octave". Are it and the "fundamental" the two most prominent
partials? Do you have data on the amplitudes of the partials?
>
> What would you recommend here Paul or others? What I'm looking for
is
> a tuning which aligns well with this spectrum, and would support
> melody and possibly simple chords of no more that 4 notes at a time.

Once you give us detail on the amplitudes, I'm sure Graham and I can
provide some interesting alternatives.

🔗graham@microtonal.co.uk

10/15/2001 3:21:00 AM

In-Reply-To: <9qdiu1+ectl@eGroups.com>
Jacky wrote:

> Cents Tail Amp.
> 0 75.344359
> 693 27.019384
> 1340 4.738614
> 1723 12.219264
> 1895 23.444061
> 2246 39.078442
> 2553 4.176044
> 3010 1.249457
> 3283 1.400947

Well, I'll take 0, 693, 1723, 1895 and 2246 as being the strongest
partials there. For an octave-equivalent temperament optimizing the
diamond of these harmonics, I think the best is a 174.3 cent generator.
It has an otonality in the 7 note MOS, to within 4.3 cents.

For the complete list, see
<http://x31eq.com/jacky.spectral.out>.

I also worked out the temperaments for a 693 cent interval of equivalence.
Here are the results for the generator, periods per equivalence
interval, error and complexity:

gen per err comp
------------------------
169.7 1 2.7 3
9.5 4 4.5 4
84.8 1 2.7 6
261.7 1 2.7 6
61.3 3 2.7 9
56.6 1 2.7 9
287.6 1 2.7 9
9.5 8 4.5 8
81.9 4 4.5 8
130.8 1 2.7 12
42.4 1 2.7 12
215.7 1 2.7 12
304.1 1 2.7 12

The first one looks like a winner. A 170 cent generator (around 1/7 of an
octave) to the 693 cent period, and a complete chord with the 4 note MOS.
Other MOS scales look like 13 and 17 notes, but remember that's per 693
cents not per octave.

For the top 10 in detail, see
<http://x31eq.com/jacky.spectral.nonoctave>. Note that there,
"cents" are for an octave of 693 real cents, which is why I converted them
above.

Caveats apply: I've got a program to work all this out, but don't have
experience of using it to make music with inharmonic timbres. So you
don't have to take anything on trust, here's the source code:

Octave-equivalent case:

>>> harmonics = [x/1.2e3 for x in (693, 1723, 1895, 2246)]
>>> import temper
>>> diamond = temper.TonalityDiamond(
... [(0,0,0,0),(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1)])
>>> ETs = temper.getLimitedETs(diamond, harmonics)
>>> temperaments = temper.getLinearTemperaments(ETs)
>>> f = open('jacky.spectral.out','w')
>>> f.write('\n\n'.join(map(str, temperaments[:10])))
>>> f.close()

Nonoctave:

>>> harmonics = [x/693.0 for x in (1723, 1895, 2246)]
>>> ETs = temper.getLimitedETs(temper.limit7, harmonics)
>>> temperaments = temper.getLinearTemperaments(ETs)
>>> open('jacky.spectral.nonoctave','w').write(
... '\n\n'.join(map(str, temperaments[:10])))

Display by cents:

>>> for temperament in temperaments:
... print "%6.1f %2i %4.1f %3i" % (
... temperament.basis[1]*693, temperament.mapping[0][0],
... temperament.getWorstError()*693,
... temperament.getComplexity())
...

The "temper" library is <http://x31eq.com/temper.py>.

Graham

🔗graham@microtonal.co.uk

10/15/2001 7:49:00 AM

In-Reply-To: <9qeo4d+d99j@eGroups.com>
Jacky wrote:

> > Well, I'll take 0, 693, 1723, 1895 and 2246 as being the strongest
> > partials there. For an octave-equivalent temperament optimizing
> the diamond of these harmonics, I think the best is a 174.3 cent
> generator.
>
> Graham,
>
> So basically 7 tET is a good match? And this generator gives us a
> stretched octave 7 tET?

That generator would give 7 large steps to the octave, with small
corrections to get you that bit closer. But yes, it looks like 7 tET is a
very good match.

FWIW, 12 notes of that octave-specific temperament would be

0.0
20.3
174.3
194.7
348.7
369.0
523.0
543.3
697.3
717.7
871.7
1046.0
1200.0

in terms of 7-equal:

0.00 0.12 1.02 1.14 2.03 2.15 3.05 3.17 4.07 4.19 5.08 6.10 7.00

and a 9 note period of the best nonoctave scale

0.0
155.3
169.7
325.0
339.3
494.7
509.0
664.3
678.7
693.0

In terms of 7-equal:

0.00 0.91 0.99 1.90 1.98 2.89 2.97 3.88 3.96 4.04

Graham

🔗graham@microtonal.co.uk

10/15/2001 9:04:00 AM

In-Reply-To: <memo.497003@cix.compulink.co.uk>
I wrote:

> FWIW, 12 notes of that octave-specific temperament would be

>From C, it's better as

0.0
20.3
174.3
194.7
348.7
523.0
677.0
697.3
851.3
871.7
1025.7
1046.0
1200.0

The white notes are a 7 note MOS, with B-C being the slightly smaller
step. You need to imagine an extra note between E and F for the 13 note
MOS.

Interestingly enough, it's almost exactly a subset of 62-equal, and the
fifths C-G, D-A and E-B are the normal ones from 31-equal. This might be
a way of mixing these timbres with regular harmonic ones. Here's the
scale as 31-equal:

0.0 0.5 4.5 5.0 9.0 13.5 17.5 18.0 22.0 22.5 26.5 27.0 31.0

Graham

🔗Paul Erlich <paul@stretch-music.com>

10/15/2001 1:30:58 PM

--- In tuning@y..., jacky_ligon@y... wrote:
> --- In tuning@y..., "Paul Erlich" <paul@s...> wrote:
> >
> > Well, these are rotations if you take the 3283-cent interval as
> > an "octave". Are it and the "fundamental" the two most prominent
> > partials? Do you have data on the amplitudes of the partials?
> >
> > Once you give us detail on the amplitudes, I'm sure Graham and I
> can provide some interesting alternatives.
>
> Sorry for the omission Paul - this is an important consideration
when
> I work with this always here, but I failed to think of it when I
> posted.
>
> Here are the tail amplitudes:
>
> Cents Tail Amp.
> 0 75.344359
> 693 27.019384
> 1340 4.738614
> 1723 12.219264
> 1895 23.444061
> 2246 39.078442
> 2553 4.176044
> 3010 1.249457
> 3283 1.400947
>
> Thanks,
>
> Jacky

Thanks very much Jacky. I recommend we first focus on these:

> 0 75.344359
> 693 27.019384
> 1895 23.444061
> 2246 39.078442

And perhaps treat 2246 as the interval of equivalence. Graham may be
able to churn some tunings out (let's look at ones where the partials
match to better than ~8 cents, shall we?) before I get a chance to
look at this in detail. Later we may want to include the

> 1723 12.219264

partial into our considerations. I doubt the other ones will be of
any audible importance for consonance in our analysis.

🔗Paul Erlich <paul@stretch-music.com>

10/15/2001 1:58:23 PM

Hey Graham -- nice work! How about using 2246 cents as the interval
of equivalence? What if we leave out 1723?

🔗Alison Monteith <alison.monteith3@which.net>

10/15/2001 2:01:38 PM

jacky_ligon@yahoo.com wrote:

> Paul and other interested parties,
>
> Taking up with the discussions of spectral tuning on MMM, I'd like to
> begin here first with a single timbre to use as a simple model for
> our collaborative work in the effort to find good tunings for
> inharmonic timbres.
>
> Below is the spectrum of a single stroke with a soft mallet on a 22"
> Paiste Symphonic Gong, as found by doing an FFT using Wavanal 3.5, a
> program designed for church bell tuners. This program can do simple
> resynthesis, so that you can always aurally confirm that it got the
> results of the partials correct.

Is Wavanal available for Mac? If so is it shareware or commercial? Any details most appreciated.

Thanks

Best wishes

>
>

🔗graham@microtonal.co.uk

10/16/2001 3:56:00 AM

In-Reply-To: <9qfmfv+ta1o@eGroups.com>
Jacky wrote:

> Approaching this from a non-octave ET point of view, here's a few
> possiblities I've discovered:
>
> 2246.357/13
> Generator=172.797

2246 cents looks like the best equivalence interval, as it's the strongest
partial. I get a 174 cent generator as the best for this, which is close
to you, but it's a linear temperament. Worst error 3 cents.

A 13 note scale in cents:

0.0, 174.0, 348.0, 522.0, 696.0, 870.0, 1044.0, 1218.0, 1392.0, 1566.0,
1740.0, 1914.0, 2088.0, 2246.0

And a 25 note scale:

0.0, 16.0, 174.0, 190.0, 348.0, 364.0, 522.0, 538.0, 696.0, 712.0, 870.0,
886.0, 1044.0, 1060.0, 1218.0, 1234.0, 1392.0, 1408.0, 1566.0, 1582.0,
1740.0, 1756.0, 1914.0, 1930.0, 2088.0

If you want to know anything else, get
<http://x31eq.com/temper.py> and a Python interpreter, and work
it out yourself. Here's today's readout:

>>> import temper
>>> harmonics = [x/2246.0 for x in (693, 1895, 1723)]
>>> ETs = temper.getLimitedETs(temper.limit7, harmonics)
>>> temperaments = temper.getLinearTemperaments(ETs)
>>> for temperament in temperaments[:10]:
... print "%6.1f %2i %4.1f %4.1f" % (
... temperament.basis[1]*2246, temperament.mapping[0][0],
... temperament.getWorstError()*2246,
... temperament.getComplexity()*1200.0/2246.0)
...
174.0 1 3.0 3.7
518.5 1 7.0 2.7
345.7 1 7.0 3.2
1037.0 1 7.0 3.2
430.0 2 172.0 1.1
259.3 1 7.0 5.3
518.5 2 7.0 5.3
345.7 2 7.0 6.4
86.0 2 7.0 6.4
950.2 1 7.0 6.4
>>> temperaments[0]

3/38, 93.0 cent generator

basis:
(1.0, 0.077471059661620656)

mapping by period and generator:
[(1, 0), (0, 4), (1, -2), (1, -3)]

mapping by steps:
[(25, 13), (8, 4), (21, 11), (19, 10)]

unison vectors:
[[1, -1, 1, -2], [2, -1, -2, 0]]

highest interval width: 7
complexity measure: 7 (8 for smallest MOS)
highest error: 0.001336 (1.603 cents)
unique
>>> temperaments[1]

3/13, 277.0 cent generator

basis:
(1.0, 0.23085485307212822)

mapping by period and generator:
[(1, 0), (1, -3), (2, -5), (1, -1)]

mapping by steps:
[(9, 4), (3, 1), (8, 3), (7, 3)]

unison vectors:
[[1, 2, -1, -1], [0, 3, -2, 1]]

highest interval width: 5
complexity measure: 5 (9 for smallest MOS)
highest error: 0.003117 (3.740 cents)
>>> temperaments[0].getScale(13, units=2246)
[0.0, 174.0, 348.0, 522.0, 696.0, 870.0, 1044.0, 1218.0, 1392.0,
1565.9999999999
998, 1740.0, 1914.0, 2088.0]
>>> ', '.join(['%.1f'%x for x in temperaments[0].getScale(25,
units=2246)])
'0.0, 16.0, 174.0, 190.0, 348.0, 364.0, 522.0, 538.0, 696.0, 712.0, 870.0,
886.0
, 1044.0, 1060.0, 1218.0, 1234.0, 1392.0, 1408.0, 1566.0, 1582.0, 1740.0,
1756.0
, 1914.0, 1930.0, 2088.0'
>>>

Graham