Re: [ecasound] FutureEcaSound: automating my workflow with Lisp
Brought to you by:
kaiv
From: Joel R. <jo...@po...> - 2007-01-23 23:06:29
|
On Tue, Jan 23, 2007 at 10:26:31AM -0500, David O'Toole wrote: > > I am getting into ecasound, and I would like to start up the old > "SuperEcasound" discussion that happened on the list wayyyy back. Hi David, Great to hear about your audio projects and plans. And somewhat reassuring to know that I'm not the only one who finds Ardour frustrating at times. First, I'm amazed at the generality of what you are planning. Is that typical of the 'lisp mentality'?? (Maybe it's time for me to learn lisp!) > So my big question is: what are your fantasies for the future of > Ecasound and SuperEcasound? What kind of things would you like to see > in a lisp-based/emacs-based ecasound application? > I would like to implement some basic workflow abstractions in Lisp > that are reduced to basic ecasound primitives like inputs, chains, > chain ops. Then I will implement basic user interfaces for these > (possibly using CellMode for Emacs: > http://dto.freeshell.org/notebook/CellMode.html ) > > Some details: > > - A "session" is a directory with .wav, .ecs, .ewf and a lisp > metadata file > - A "take" is a single timestamped recording (i.e. a wav file) > - A "clip" is a section of a take (i.e. defined by ewf) > - A "track" does the following: > - sequences clips for playback > - determines input and output when record-enabled > - adds effect processing to all clips within the track > - Recording creates N takes where there are N record-enabled tracks > - Easy jack connection interface This seems like a great start. Any generalized work you do will probably support a simpler, smaller feature set for those of us with more pedestrian needs. Since everyone's "pedestrian" needs are different, everyone who meets Ecasound seems to want to build their own custom interface. I am no exception. Perhaps you'll be interested in the templating system I have used in generating chain setups. I wanted to build up multitrack recordings by one or more tracks at a time, easily, being able to toggle any 'track' between record and playback mode for a given recording effort, to apply effects, either as processing for a live performance or on a recorded track. As a rather ordinary bear, I made a pile of Perl code that does much of this using Tk for the user interface. You can check it out at: http://ecmdr.infogami.com My 'tracks' are names associated with: - zero or more numbered .wav files - effects that can controlled by sliders or numerical entry - chains for raw and effects-processed ("cooked") signals I have GUI buttons controlling a set of templates that route the _raw_ and _cooked_ and _mixed_ sound signals from/to files and output devices using loop devices as necessary. In general there is a signal flow raw->cooked->mixed A more general solution than mine would allow JACK connections at any node in this graph. I made some simplifying assumptions that keep my head (and code) from exploding. The templates seem kind of 'lispy' (in my foggy conception of lisp) as they are abstract and powerful and simple, and because they operate in building up lists. The processing to generate a chain setup works like this: Evaluate the REC/MON status of each track Build lists of inputs and outputs by applying templates to each track, associating chain ids with files and devices. Use the templates to build lists of chain_ids ("customers") for cooked and mixed signals Rewrite the lists to eliminate unnecessary loop devices in cases where there are no customers for the cooked and mixed signals Write the chain setup from the input/output lists All effects processing I apply afterwards using IAM commands. Each template consists of: template name template target (rec tracks, mon tracks, or all tracks) prefix for chain ids created by this template output (device_name, file or loop) signal type (raw, cooked or mixed) pre-output processing subroutine Thanks for reading, hope you find this interesting. -- Joel Roth |