back to list

vals -> monzos

🔗Carl Lumma <carl@lumma.org>

1/9/2011 2:57:36 PM

Given a score consisting of monzos it is easy to produce a
tempered version consisting of mapping images (steps of an ET,
for instance).

Given a score consisting of the images, however, it is not
clear how to recover the monzos. Having the monzos is helpful
if one wants to retune the music.

We are talking, of course, about "automatic JI" algorithms,
many of which have been proposed over the years, including
by me. Here's my latest idea:

First label each point on the weighted Tenney lattice with its
mapped value (using the mapping provided or inferred from the
score), in addition to its monzo. We can do this out to some
radius r and if we wind up using a point at the edge of the
resulting ball, we simply pause and increase r.

We will think of the score as a sequence of chords, which we
will tune in order (this allows realtime tuning at the expense
of some look-ahead optimizations). Each note can be marked as
to whether it is new or sustained from a previous chord.

The retuning process consists of choosing a lattice point for
each note and replacing it in the score with the corresponding
monzo. For the first chord, we assign each note the monzo with
the least distance from the origin. On subsequent chords...

1 select those lattice points which would be used if this
were the first chord

2 select the previously-used lattice points for these notes
(the monzos chosen for these images most recently)

3 take the union of these points and then compute the volume
of each subset containing exactly the current chord. "volume"
here is a bit tricky but I'm sure there are algorithms for
enclosing the largest possible area given a set of points.
this is doubtless a hard problem but if the average chord
contains four notes it should be manageable

4 use the subset with the least volume

5 an option to disallow retuning of sustained notes. this
would simply amount to not computing the 'first chord' monzos
for sustained notes, so they are guaranteed to take their
previous values

That's it! I'm currently doing this by hand in Scala seq
files and it's super-laborious. -Carl

🔗Carl Lumma <carl@lumma.org>

1/9/2011 4:29:38 PM

I wrote:

>1 select those lattice points which would be used if this
>were the first chord
>2 select the previously-used lattice points for these notes
>(the monzos chosen for these images most recently)
>3 take the union of these points and then compute the volume
>of each subset containing exactly the current chord. "volume"
>here is a bit tricky but I'm sure there are algorithms for
>enclosing the largest possible area given a set of points.
>this is doubtless a hard problem but if the average chord
>contains four notes it should be manageable
>4 use the subset with the least volume

Drat, doesn't look like this quite works as stated. . . -C.