Re: [ecasound] FutureEcaSound: automating my workflow with Lisp

From: Joel Roth <joelz@email-addr-hidden>
Date: Wed Jan 24 2007 - 01:25:38 EET

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
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Ecasound-list mailing list
Ecasound-list@email-addr-hidden
https://lists.sourceforge.net/lists/listinfo/ecasound-list
Received on Wed Jan 24 04:15:01 2007

This archive was generated by hypermail 2.1.8 : Wed Jan 24 2007 - 04:15:01 EET