[Ardour-Dev] Non-freewheeling export mode in Ardour 3?

Sakari Bergen sakari.bergen at tkk.fi
Tue Nov 1 09:53:22 PDT 2011

On 01.11.2011 15:14, Paul Davis wrote:
> On Tue, Nov 1, 2011 at 9:09 AM, Fons Adriaensen<fons at linuxaudio.org>  wrote:
>> On Tue, Nov 01, 2011 at 07:23:35AM -0400, Paul Davis wrote:
>>> the problem (as i realized overnight) is that the computational cost
>>> of export is essentially unbounded and so its impossible to do this
>>> with JACK in normal mode. sure, one could say something like "well, it
>>> works on most machines if you use only a single uncompressed export
>>> format". that's not very satisfactory, and isn't likely to ever be
>>> reliably true enough to justify the claim in the first place.
>> Two things are being mixed up here:
>> 1. Non-RT processing to allow arbitrary complexity.
>> 2. The results becomes an external file.
>> AFAICS, these are orthogonal, and make sense separately.
> they are somewhat orthogonal, except that to separate them requires,
> as you noted, a distinct write-to-disk as a first step. Sakari wrote
> all the export code in a3, and it has quite a sophisticated graph
> model that allows a lot of fairly clever things.

The very first implementation of export in A3 actually did the 
write-to-disk as first step. However, the disk-io did happen in the 
process() callback, and thus it was not really RT capable. However, I 
noticed, that most of the time this made the export a lot slower. This 
lead to refactoring the code in such a way that the intermediate write 
to disk is only done if normalization is selected.

As Paul said, export uses a graph model where the different processing 
parts don't care about each other. This means that it would be easy to 
"cut" the graph at any point and write to the temporary file(s) in 
between, leaving the rest of the processing for later. However, the 
tricky part is separating the disk-io from the process() callback. If 
someone could point me at some project that already does this in a 
fairly portable way, I could look into this further :)

More information about the Ardour-Dev mailing list