For some reason, I woke up today thinking about digital audio workstations (DAWs) and how these exceptional programs nonetheless have basic similarities to any other software running on a system. A DAW, used well, simultaneously inscribes output and collaborates with the operator on the form of that output. Only the operator knows how much a musical piece or moment owes to inscription or to collaboration. This fact of life made me think about the submerged, “mundane” part of the DAW running a sequence. It chugs away under the hood, grabbing x disk resources, allocating y RAM, balancing z threads. These real-time values are resultant of the music in a real sense: could they not be themselves incorporated into the music, be presented as input for musical processing, which would change the underlying values slightly, which would alter the input, which would change the underlying values slightly, which would….ad infinitum.
So I sketched out a design and gave it a name. Egovore is an AU audio software plug-in design. It runs as a AU plugin under a host DAW (Ableton Live, Reaper, Audiomulch) or under another plugin.
While executing a sequence, Egovore reads the host DAW’s own process space variables, including, optionally its own, and incorporates that data as input. Egovore’s job is to process that data in realtime, musically, and output it as a musical element.
In this manner, a dynamic, self-referential, self-reflexive source of data concerning the music itself, as represented in the host machine’s process tables is incorporated into the audible portion of the music.
Example: the running process’s statistical samples (ram usage, ticks, disk usage, process ID, address space ranges, number of threads, userid, load averages, swap, sharedlibs)
Example data flow:
main sequence---------------------------------------------------->output
| ^ ^
| | |
egovore(main()) | |
| | |
| | |
pid | |
ram | |
threads | |
... | |
| | |
| | |
-----------> midi ---> synth --->| |
| |
| |
----------->SpeechSynth--->chopper--->|
In the above, Egovore loops n times, calling top(), reads the line corresponding to the host application as well as the data summary. The columnar data are read into an input buffer. Egovore operates on that data, looping through changes as time proceeds, and produces source data for input to processes such as a MIDI synth, or the system’s Speech Synth. User-controllable parameters such as “Sensitivity” “Random Seed” “Random Amplification” “Scale” serve to tie the output to the musical milieu of the calling sequence as well as goose a range of results out of the processing.
Egovore’s output is both MIDI and audio. The operator/programmer of the host DAW obviously controls Egovore’s mix position and routing posture.
Of course, the name Egovore comes from the fact that the design uses the “self” of the music as represented by the operating system as input. In a conceptual sense, the music is consuming itself, hence Egovore. Plus, it’s a near-Googlewhackblatt right now, showing only 200-odd results.
Surely there’s a DSP programming student out there looking for a cool plugin idea to bang on. If that’s you, have at it.