Sunday, November 20, 2016

Electronic Music

Here is an application intended to draw emergent properties from general purpose computers. This is in the tradition of the west coast modular synth, in the sense that it sacrifices ease of use for surprise.

The mouse position rotates a polytope. The roller button rotates the projection plane. The buttons switch between ends of the projection line. The polytope region volumes are noise volumes. The space boundaries are tone filters. The projection plane areas are durations. The projection plane boundaries are envelope filters. The projection line lengths are tempos. The projection line boundaries are rhythmic filters. Function keys (un)lock boundaries, (un)fill regions. Configuration file contains metric and boundary mappings. Branching history allows branching playback. Create new branches relative to other branches.

Just as the effect of multiple color filters is cumulative, so is the effect of multiple tone filters. Similarly, the effect of multiple envelope or rhythm "filters" should be cumulative. Thus, retained are the volume area length metrics, but lost are the filter orderings, except as deduced from adjacency.

The product of the three dimensional tone filters is the richest in the sense that they are repeating waveforms. The two dimensional filters, though geometrically more numerous, are less rich in the sense that they produce unrepeated envelopes, or potions of waveforms. Note that the specification of envelope filter is still a vector of harmonic amplitudes. The one dimensional filters are again geometrically more numerous, but less rich, thus. They not only produce unrepeated phrases, they interpret the negative portions of the waveform as silence, ignoring any negative information.

Another enhancement would be feedback. Thus, when a note plays, the region responsible for it could go on to the next fundamental tone. Generally, each projected region could go on to the next parameter. To avoid expressing my incompetence at harmony and melody, the parameters could be chosen by 1/f randomness or modulo one golden ratio increments.

Escape key halts recording and rotation, allowing mouse lift. Continuity is preserved across pauses by interpreting mouse and roller button motions as accelerations instead of motions. Discontinuities are allowed by enabling rotation and rate change separate from recording. Loops are recorded by interpolating from one branch to another and going to playback mode. Switching to record mode starts a new branch relative to the current in the sense that the rotation rates start from where the branch started.

Intervals Are Not Polytopes

One dimensional spaces are qualitatively different from spaces with 2 or more dimensions. My definition of "linear", as a space who's subspaces have the correct number of regions does not suffice to make one-dimensional spaces convertible to number lines. Here is a counter-example.

[[[0],[1,2,3]],[[1],[0,2,3]],[[2],[0,1,3]]]

Interpret this as a list of boundaries, each of which is a pair of half-spaces, and interpret the numbers as regions. As a two-dimensional space this is a simplex with empty vertex regions. As a one-dimensional space, each subspace has m+1 regions, where m is the number of boundaries. As a result of testing my Haskell code, I discovered this counter-example. I rewrote my isLinear and superSpace functions to behave differently for one-dimensional arguments.

Stay tuned for whether there are counter-examples of 2 or more dimension. If the proofs in previous posts are correct, then there will be none. Math is scientific in the sense that we can never know for certain that a proof is correct.

Sunday, November 6, 2016

Journey

I've restarted my Haskell program to take a more naive approach. Rather than go for optimization with lots of different representations that get saved to prevent recalculations, my new approach is to go for clarity. I found that the prior approach involved a lot of boring code. I was too tempted to automate the production of the boring code, and that became a nontrivial challenge. Anyway, my new code is here, and it is much more readable. Note that though the repository is still called sidegeo, the module directory is AffTopo. AffTopo stands for affine topology, which I believe more accurately describes the math in this blog than my original choice of sidedness geometry.

https://github.com/individkid/sidegeo/blob/master/src/AffTopo/Naive.hs

Perhaps more or less related to my coding efforts, I have taken a new perspective (pun intended) on the definition of polytope. In short, polytope (like creativity) means many things to many people in many contexts. Here are a couple of possible definitions.

If you project your polytope onto a picture plane, it produces a (simpler?) polytope in one fewer dimension. If you consider all possible projections of a polytope, the polytope might be well defined so long as it's projections are well defined. Since polytopes of zero dimension are well defined, this recursive definition might work. I say might, because the projections of a polytope have some relations not captured by simply collecting them into a set.

As another example of defining polytope, start with the usual graph of facets, and add convexity around each facet. My coding experience has increased my respect for directness. On the other hand, without curves we would not know that lines are straight.