gogins / michael.gogins.studio

Studio of Michael Gogins: computer music, photographs, writings.
4 stars 0 forks source link

All-new pieces #34

Closed gogins closed 1 year ago

gogins commented 4 years ago

Now that Tzimtzum is finished, create a new album of all-new pieces. This will include my submission for the next NYCEMF so I need to really get going here.

Oops! -- it's 2023 and I have one month to make my NYCEMF piece. At least I (seem to have) finished Cycles.js, my adaption of a few ideas from Tidal Cycles to CsoundAC in the HTML5 environment.

gogins commented 4 years ago

The direction I will push here is simply deepening the RIFS/Lindenmayer system approach. Any other recursive/irreducible generative processes that I find, also.

The title as with Tzimtzum should reflect both my spiritual intention and the compositional thinking.

gogins commented 4 years ago

"Irreducible" is αμείωτος in Greek, vetari in Latin, and possibly tanmatra in Sanskrit. No, tanmatra is not right.

gogins commented 4 years ago

In terms of artistic quality, Tzimtzum is a partial success. All of the pieces sound good to me, but in most of the tracks, the pull into the piece is counterbalanced by flaws that almost but not quite pull me out of the piece.

In this new album, the objectives are:

gogins commented 3 years ago
gogins commented 1 year ago

Possible sources for ideas:

gogins commented 1 year ago

A feature of Cycles is that Nodes can have state that interacts with the state of other Nodes, i.e. can communicate outside of the cycler graph. This could be used e.g. for interpolating envelopes across cycles.

gogins commented 1 year ago

For snow-voice:

gogins commented 1 year ago

In Cycler, timer drift is too large, thus timer interval is zero, causes all kinds of problems. Probably fixable.

    // Correct for timer drift, which is measured every cycle.
    let timer_drift;
    if (this.cycle_count > 1) {
      timer_drift = this.expected_performance_time - this.current_performance_time;
    } else {
      timer_drift = 0;
    }
    // The correction applies the drift in reverse.
    let cycle_interval = Math.max(0, this.time_node_duration - timer_drift);

The problem is that this.expected_performance_time is for the next cycle, but we want it for this cycle.

I think this is fixed, will need to do regression testing.

gogins commented 1 year ago

To get input values into compositional classes with a minimum of coding, pass to those classes a reference to the input DOM object. Wrong. Get the DOM object using document.getElementById and store it in the instance. Also requires use of parseFloat as the value is a string that is not always correctly parsed by default.

gogins commented 1 year ago

What are the correct circle map parameter ranges? Apparently omega from 0 to 1, and kappa from 0 to whatever, I set it from 0 to 10.

gogins commented 1 year ago

I'm not going to be able to use cycles.js because I can't stack stacks.

Switching back to NW.js on Linux, will vary one of the Poustinia cycles because csound.node on Linux has the most features. Critical tasks:

gogins commented 1 year ago

There's no hum from the Scarlett with headphones, so the hum is from the speakers or the cables to the speakers. The hum comes from using unbalanced audio cables. I can get rid of the hum by turning the speaker volume down and the computer volume up. I should get balanced audio cables. I ordered 2 3' cables TRS to XLR from B&H.

gogins commented 1 year ago

I used to be able to run NW.js pieces without installing nwjs in the piece's directory. That no longer seems to be possible. I'll research that.

On Windows and Linux, you can put the files of your app in the same folder of NW.js binaries and then ship them to your users. Make sure nw (or nw.exe) is in the same folder as package.json. Or you can put the files of your app in a folder named package.nw in the same folder as nw (or nw.exe).

On Mac, put the files of your app into a folder named app.nw in nwjs.app/Contents/Resources/ and done.

It’s the recommended way to pack your app.

I'm trying with just a symbolic link to the nw executable. Doesn't work.

I'm trying with just a symbolic link from the piece directory to nwjs/package.nw. That seems to work.

gogins commented 1 year ago

The audio level is way too low. Not sure if that's 0dbfs or lack of parameters settings or what. It's 0dbfs, perhaps Csound 6.18 fixed a bug.

gogins commented 1 year ago

These are all (I think) of the pieces of mine that were performed at the NYCEMF. That's ten years. Jesus!

Are there other pieces I could resurrect for the NYCEMF? Sound fractals? cloud-music?

gogins commented 1 year ago

There is a problem with extended characters in the csd text. I'm not sure where this happens but the C++ opcodes example works just fine, so it is probably not Csound's fault.

Checking with grep --color='auto' -P -n "[\x80-\xFF]" file shows no problem.

Trying a JavaScript variable instead of a text area. No help, would need many escapes.

Problem is &note in the csd TextArea which gets HTML encoded. Changing to & note works in a csd and compiles from NW.js, but then crashes, no idea why.

All of this reminds me why I switched to the C++ and WebServer opcodes.

I had forgotten vst3opcodes don't work for Pianoteq because it does not support VST3 on Linux.

Audacity on Linux is now an AppImage and won't run except from its own directory. Fixed with this script named ~/.local/bin/audacity containing only (cd ~/Downloads && ./audacity-linux-3.3.2-x64.AppImage $1). But that needs the full path to the file to be opened.

gogins commented 1 year ago

I now have a working environment that I can use for snow-voice. It is based on Read Leaves v8.4.3.5 from last year.

The environment runs entirely in Csound, on Linux, using the C++ opcodes and the Web server opcodes. There are things I would like to see but they are not urgent:

New set of tasks:

gogins commented 1 year ago

How to get more variety of texture? First, let's try to specify what that means.

How to do this with Lindenmayer systems is not too opaque. IFS are harder.

In general, to change the shape of the attractor (which is more or less pulling the score into shape), if you want a note in the score, the transformations must put a copy of the attractor on that note; and if you want to avoid having a note in the score, the transformations must move the attractor away from that note.

There are several ways this can be done. The easiest way is to increase the number of transformations and use a RIFS to avoid putting notes in some parts of the score, by means of zeros in the transition matrix. Another way is to shear or rotate the attractor away from that note.

gogins commented 1 year ago

The score is partway through the iterations of the contraction but before the fixed point. Keep in mind, at the fixed point, there is an infinite number of notes stacked up on each audible note of the score.

At any time, if a note is to be written in the score, the iteration for the score must include that note. For that to happen, at least one of the transformations in that iteration must have moved the pen to write that note. And if a note is to be excluded from the score, all of the transformations in that iteration must have moved the pen away from that note.

For linear transformations, this means that changes in the contour of the score must involve transformations that do not simply tile the score with transformations. Instead, there must be shears, rotations, or null entries in the recurrence matrix. Alternatively, some or all of the transformations can be nonlinear, e.g. multiply one of the elements of the transformation matrix by an exponential of the level of iteration, or use some nonlinear difference equation for that dimension of the transformation.

gogins commented 1 year ago

Now the things to try are:

gogins commented 1 year ago
gogins commented 1 year ago

Bottom line, we have a good orchestra and some variety of structure. The main thing this piece needs is more variety of structure.

gogins commented 1 year ago

I am moving discussion of snow-crash, now that I have settled on some basics, to a new issue.