My brother John is an industrial designer and manufacturing engineer
at Hewlett-Packard in Vancouver, Wash. He reports here about his
own experience with genetic evolution.
-- Robbie Rhodes
attachment:
> From: "John D. Rhodes" <jrhodes@teleport.com>
> To: rhodes@foxtail.com (Robbie Rhodes)
> Date: Sun, 5 Nov 1995 09:43:02 +0000
Hi, Rob. This thread is fascinating. Thanks for copying me on it.
Larry Smith sounds pretty sharp. The "evaluator" he speaks of,
of course, *is* the crux of the genetic programming problem. Here are
a couple of additional thoughts:
#1. It seems to me genetic programming could be used to develop the
evaluator.
#2. I would use a sampled-sound library (from the target music box
[or piano] if possible) instead of a MIDI synth.
More on #1, genetic programming: I played with a Mac-based program
at Oregon Museum of Science and Industry some 5-6 years ago which
produced computer shape/color "globs" in a series of generations.
The program was written by a geneticist, who wanted to illustrate
genetics principles to his students. It operated roughly as follows:
I first imagined a target object which I wanted to selectively breed.
Let's say it was a symmetrical butterfly shape, black, with
large yellow spots.
The program presented me with a field of 8 roughly circular, randomly
color-speckled shapes. I selected a "breeding pair" from this field
of 8, based on resemblance to the target object. This pair then
produced 8 new offspring, and I (playing god) again selected the next
breeding pair. It was surprising how rapidly I could produce
relatively arbitrary shape/color targets.
The underlying genetic traits, I speculate, were things like:
symmetry, perimeter roughness, color "globbiness" (i.e., speckles
or patches), color preferences, aspect ratio, etc.
So, how 'bout using this approach to develop the evaluator: Start
with the genetic traits -- which must be both *quantifiable* and
*controllable*. Maybe -- and this gets tough: it's like specifying
position based on rate-of-change of acceleration! -- how to employ
number and complexity of "voices"; harmony rules; dictionary of
standard moves; etc. Then let "god" grade the evaluator on its
ability to converge on target sounds. We evolve the evaluator!
[ John is declaring that the programmer_person is actively guiding
the evolution of the evaluator. Hmmm ... does the buck stop here?
--Rob]
More on item #2:
a. I assume the objective is to create sheet music of the original
performance, not simply produce a combination of MIDI-notes/voices
which "sounds like" the original. So let's get the "sounds-like" out
of way with sampled notes, and concentrate on combining the notes to
produce the target timing and harmony. [ No: the major objective is
something like Midi control of a dynamic waveform synthesizer. --Rob]
b. I think you should be able to extract samples of *individual*
notes from a disk recording. Take advantage of the slight attack
descrepencies on simultaneous notes. Once you have the attack/decay
signature isolated for a given note, you should be able to remove it
from a chord (within reason) to assist isolating the signature of
other notes.
Further thoughts:
Computer scientists (like some manufacturing automation engineers I
work with) sometimes produce overly-complex solutions by attempting
to program/automate everything. Some problems (e.g. pattern
recognition) are extremely tough to find programmatic solutions for;
but humans (in fact, most animals) are *extremely* good at pattern
recognition -- in more than the visual domain, I should add. So, swallow
some inventor's pride, save lots of time, and put a human in the loop.
For example, Rob, you and brother Doug can listen to a piano
recording and play it by ear and write out the notation. You are
bringing far more to bear on the problem than simple aural analysis.
You are including: how many notes can one hand play, what is the
intended harmony, how would one voice this, etc. Use your knowledge
to supplement (and teach) the program.
-- John
|