Lex,

It was a pleasure seeing you last week, and congratulations again on your new circumstances!

 

Its hard to know how much either of us will be able to invest in this project, but our conversation (and several others I’ve had subsequently) convince me that it would be good if we could go forward.  I think we want a third collaborator--a really good and eager coder and perhaps you’ll find one in a student.  But even before that, I find myself thinking about how we might proceed.

 

I find myself thinking about a project that would be easy (and cheap) for us to begin with, yet open-ended enough that it could expand indefinitely if circumstances and results warrant.   We might produce a visualization to a simple melody and then as the music progresses, the visualization would become increasingly rich, interesting, innovative, etc.  Thus, the piece (like the project) begins easily yet aesthetically, gets more interesting (and difficult) as it goes along, and at all times points the way toward further developments. 

 

(I can do the early 3D programming I’m about to describe.  I don’t know how to generate sounds using the same, but can can certainly figure it out eventually.  Meanwhile, we can fake it (or better) by putting you at the keyboard and accompanying the visualization.)

 


First, here’s a short-cut depiction of  the kind of scheme I have in mind.   Don’t try to understand it now.

A simple visual python program that generates the screen shots illustrated.

 

from visual import *

def shownote(time,noteheight):

            return sphere(x=time,y=noteheight,z=time)

 

#notes=[0,1,2,3,4,5,6,7]     # do re me fa so la ti do

notes=[0,1,2,1,2,1,2,2,

               1,2,3,3,2,1,2,2,2,2,

               2,2,3,4,4,3,4,4,4,3,4,4,

               3,3,4,5,5,4,3,5,5,5,5,

               4,4,0,1,2,3,4,5,5,

               5,5,1,2,3,4,5,6,6,

               6,6,2,3,4,5,6,7,7]

 

 

for t in range(len(notes)):

            shownote(time=t,noteheight=notes[t])

 


Now, our feature presentation:

We begin with a single note, voiced by a single instrument, and accompanied by the appearance of a sphere floating in the middle of the screen space.  As the note sounds, the sphere slowly recedes left and away.

A second note follows; it “explains” and builds on what preceded it.  

The note is a lower pitch, same duration.

It’s the second note of Pachelbel’s canon, the musical piece I nominate for this first exercise.  (Familiar, attractive, starts simply with notes of constant duration, builds expectations, etc.)

With the second note, a second sphere appears at mid screen;

Because of the first sphere’s backward drift, the new sphere floats closer and looms larger. 
Because of the first sphere’s drift, part of it can be seen behind the new sphere.
The vertical Y-axis placement of each sphere respects conventional music notation, so the new sphere is “downset” from the first.
The new sphere (and all subsequent spheres) drift toward the same vanishing point.  (The effect recalls the opening credits of Star Wars.)

As the remaining notes of the theme play out one by one, we introduce some other visual conventions.

thin lines receding into the distance reproduce the horizontal lines of conventional music notation.

Spheres are colored as per my prior octave-respecting proposal.

When the theme repeats, a second voice is introduced.  So spheres begin appearing in pairs.

The two voices (streams of spheres) are parallel to each other. 

On the third iteration (if I remember Pachelbel correctly), half and quarter notes are introduced.

Shorter notes are “squashed” on the temporal dimension.

At this point, we can overlay your memory-augmented notation on this visualization.  The notes that should “linger” in memory might have larger diameter, or brighter luminance, etc.

 

And then, of course, as we get more sophisticated, polyphony produces landscapes rather than just spheres, etc.

Perhaps this is enough to get the conversation going…. 

 

As you may see from the python program the list of notes[] is encodes the melody (with mistakes, I know).

 

àWhat’s the conventional numerical encoding?