back to list

scales for inharmonic timbres - Graham?

🔗Bill Sethares <sethares@ece.wisc.edu>

1/11/2004 4:31:29 PM

Paul and I have been having an off-line discussion, and he
recalls that Graham had some candidate scales designed for use
with the "ideal bar" timbre, which has partials at:

f, 2.73f, 5.4f, 8.9f

This is a "practical" inharmonic timbre in the sense that it is easy
to create sounds that have it.

Graham, do you have any pointers or thoughts? What were the
techniques you used to specify the scales?

Thanks,

Bill Sethares

🔗Graham Breed <graham@microtonal.co.uk>

1/12/2004 3:46:21 AM

Bill Sethares wrote:
> Paul and I have been having an off-line discussion, and he
> recalls that Graham had some candidate scales designed for use > with the "ideal bar" timbre, which has partials at:
> > f, 2.73f, 5.4f, 8.9f
> > This is a "practical" inharmonic timbre in the sense that it is easy
> to create sounds that have it.

I've looked at the ideal bar timbre, but the formula I have gives
f, 2.82843f, 5.42326f, 8.77058f, ...

There are lists of temperaments online at places like

http://x31eq.com/limit7.tubulong

but there may have been a bug in the program when I generated them.

> Graham, do you have any pointers or thoughts? What were the
> techniques you used to specify the scales?

It's the same as for harmonic linear temperaments, but with different values for the prime intervals. You can't do your own searches online, but you can get the Python module from

http://x31eq.com/temper/

Here's the trace for your tubulong timbre. It gives results in milliequivalences, which happen to be millioctaves. So multiply by 1200 to get cents. It is possible to make one of the harmonics a new equivalence interval -- scale the others by it.

Python 2.2.2 (#2, Feb 5 2003, 10:40:08)
[GCC 3.2.1 (Mandrake Linux 9.1 3.2.1-5mdk)] on linux-i386
Type "copyright", "credits" or "license" for more information.
IDLE 0.8 -- press F1 for help
>>> import temper
>>> idealbar = map(temper.log2, (2.73, 5.4, 8.9))
>>> diamond = temper.TonalityDiamond(temper.PrimeDiamond(3), idealbar)
>>> ets = temper.getLimitedETs(diamond)
>>> temper.getLinearTemperaments(ets)[:5]
[
25/58, 430.8 milli-equivalence generator

basis:
(1.0, 0.43084879198128878)

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

mapping by steps:
[(51, 7), (74, 10), (124, 17), (161, 22)]

highest interval width: 8
complexity measure: 8 (9 for smallest MOS)
highest error: 0.002549 (2.549 milli-equivalences)
unique,
3/11, 275.5 milli-equivalence generator

basis:
(1.0, 0.27554952442743608)

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

mapping by steps:
[(7, 4), (10, 6), (17, 10), (22, 13)]

highest interval width: 3
complexity measure: 3 (4 for smallest MOS)
highest error: 0.019546 (19.546 milli-equivalences),
23/54, 426.3 milli-equivalence generator

basis:
(1.0, 0.42629406516156837)

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

mapping by steps:
[(47, 7), (68, 10), (114, 17), (148, 22)]

highest interval width: 7
complexity measure: 7 (12 for smallest MOS)
highest error: 0.006665 (6.665 milli-equivalences)
unique,
19/67, 283.5 milli-equivalence generator

basis:
(1.0, 0.28345544987276355)

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

mapping by steps:
[(60, 7), (87, 10), (146, 17), (189, 22)]

highest interval width: 9
complexity measure: 9 (11 for smallest MOS)
highest error: 0.004301 (4.301 milli-equivalences)
unique,
10/71, 141.0 milli-equivalence generator

basis:
(1.0, 0.141009004441352)

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

mapping by steps:
[(64, 7), (93, 10), (156, 17), (202, 22)]

highest interval width: 11
complexity measure: 11 (15 for smallest MOS)
highest error: 0.003005 (3.005 milli-equivalences)
unique]
>>>

🔗wallyesterpaulrus <paul@stretch-music.com>

1/12/2004 10:49:03 AM

--- In tuning@yahoogroups.com, Graham Breed <graham@m...> wrote:

> Here's the trace for your tubulong timbre. It gives results in
> milliequivalences, which happen to be millioctaves. So multiply by
1200
> to get cents.

You mean, multiply by 1.2?

> It is possible to make one of the harmonics a new
> equivalence interval -- scale the others by it.

Right . . . but can you give some of the scales implied by the below
in a simple form that Bill can easily understand? Also, I remember
once you derived an MOS which looked almost exactly like 7-equal
using some inharmonic timbre -- was it this one?

> Python 2.2.2 (#2, Feb 5 2003, 10:40:08)
> [GCC 3.2.1 (Mandrake Linux 9.1 3.2.1-5mdk)] on linux-i386
> Type "copyright", "credits" or "license" for more information.
> IDLE 0.8 -- press F1 for help
> >>> import temper
> >>> idealbar = map(temper.log2, (2.73, 5.4, 8.9))
> >>> diamond = temper.TonalityDiamond(temper.PrimeDiamond(3),
idealbar)
> >>> ets = temper.getLimitedETs(diamond)
> >>> temper.getLinearTemperaments(ets)[:5]
> [
> 25/58, 430.8 milli-equivalence generator
>
> basis:
> (1.0, 0.43084879198128878)
>
> mapping by period and generator:
> [(1, 0), (-2, 8), (2, 1), (1, 5)]
>
> mapping by steps:
> [(51, 7), (74, 10), (124, 17), (161, 22)]
>
> highest interval width: 8
> complexity measure: 8 (9 for smallest MOS)
> highest error: 0.002549 (2.549 milli-equivalences)
> unique,
> 3/11, 275.5 milli-equivalence generator
>
> basis:
> (1.0, 0.27554952442743608)
>
> mapping by period and generator:
> [(1, 0), (2, -2), (3, -2), (4, -3)]
>
> mapping by steps:
> [(7, 4), (10, 6), (17, 10), (22, 13)]
>
> highest interval width: 3
> complexity measure: 3 (4 for smallest MOS)
> highest error: 0.019546 (19.546 milli-equivalences),
> 23/54, 426.3 milli-equivalence generator
>
> basis:
> (1.0, 0.42629406516156837)
>
> mapping by period and generator:
> [(1, 0), (4, -6), (2, 1), (4, -2)]
>
> mapping by steps:
> [(47, 7), (68, 10), (114, 17), (148, 22)]
>
> highest interval width: 7
> complexity measure: 7 (12 for smallest MOS)
> highest error: 0.006665 (6.665 milli-equivalences)
> unique,
> 19/67, 283.5 milli-equivalence generator
>
> basis:
> (1.0, 0.28345544987276355)
>
> mapping by period and generator:
> [(1, 0), (4, -9), (3, -2), (4, -3)]
>
> mapping by steps:
> [(60, 7), (87, 10), (146, 17), (189, 22)]
>
> highest interval width: 9
> complexity measure: 9 (11 for smallest MOS)
> highest error: 0.004301 (4.301 milli-equivalences)
> unique,
> 10/71, 141.0 milli-equivalence generator
>
> basis:
> (1.0, 0.141009004441352)
>
> mapping by period and generator:
> [(1, 0), (3, -11), (3, -4), (4, -6)]
>
> mapping by steps:
> [(64, 7), (93, 10), (156, 17), (202, 22)]
>
> highest interval width: 11
> complexity measure: 11 (15 for smallest MOS)
> highest error: 0.003005 (3.005 milli-equivalences)
> unique]
> >>>

🔗Graham Breed <graham@microtonal.co.uk>

1/12/2004 1:51:11 PM

wallyesterpaulrus wrote:

> You mean, multiply by 1.2?

Yes.

> Right . . . but can you give some of the scales implied by the below > in a simple form that Bill can easily understand? Also, I remember > once you derived an MOS which looked almost exactly like 7-equal > using some inharmonic timbre -- was it this one? I don't remember 7-equal coming up, although it works quite well here. Worst error around 1/4 of a scale step. One of the gamelan timbres was strongly biased towards 9-equal.

Anyway, let's go through the temperaments

>>25/58, 430.8 milli-equivalence generator

This comes out as 517 cents. I make the minimax pelogic 521 cents, so it's quite close.

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

There you go, there's the mapping by octave and fourth.

>>highest interval width: 8
>>complexity measure: 8 (9 for smallest MOS)
>>highest error: 0.002549 (2.549 milli-equivalences)

That's a worst error of just over 3 cents. Quite good, except it won't work as a pelog because you need more than 7 notes, and you need this to get the first harmonic to match. Errors tend to be negative, but aren't always, so it might work with a bit of octave stretching.

Here are 7 notes:

0.000
185.093
351.056
517.019
702.111
868.074
1034.037
1200.000

>>unique,
>>3/11, 275.5 milli-equivalence generator

This is 331 cents. I make the 27:25 minimax temperament a 271 cent generator. So they're not really close, but both vague minor thirds.

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

>>highest interval width: 3
>>complexity measure: 3 (4 for smallest MOS)
>>highest error: 0.019546 (19.546 milli-equivalences),

That's 23.5 cents. Not bad really, considering how simple it is.

Here's a 7-note scale in cents:

0.000
122.638
330.659
453.297
661.319
783.957
991.978
1200.000

The interval pattern is

s L s L s L L

Errors tend to be positive, so it might work with flattened octaves.

Hmm, 9-equal is inconsistent in this timbre, and so we're missing a few interesting scales. One is the 7&9 temperament we might expect to look like pelogic. In fact, it's not at all bad. It's got a 518.0 cent generator, and a worst error of 20.6 cents. The (octave, generator) mapping is

[(1, 0), (1, 1), (2, 1), (4, -2)]

so it does work within 7 notes. Here they are:

0.000
190.191
354.115
518.038
708.229
872.153
1036.076
1200.000

Errors tend to be negative, so it might work with stretched octaves.

Graham

🔗wallyesterpaulrus <paul@stretch-music.com>

1/12/2004 2:03:20 PM

--- In tuning@yahoogroups.com, Graham Breed <graham@m...> wrote:

> 1200.000

What if you drop the 2:1 ratio altogether?

🔗Graham Breed <graham@microtonal.co.uk>

1/13/2004 2:41:36 PM

wallyesterpaulrus wrote:

> What if you drop the 2:1 ratio altogether?

Yes, well, with that ideal bar timbre there's a good one where you set the first partial as the equivalence interval and the other two equivalent to each other. I'll translate the numbers some time.

Graham