Hi,
On 16 September 2012 09:10, Fons Adriaensen <fons@linuxaudio.org> wrote:
On Sun, Sep 16, 2012 at 12:46:42AM -0700, Henner Zeller wrote:

> Over the week or so, I've build some fuse filesystem filters flac files
> on-the-fly
> using the zita convolver. This makes it real easy to play
> around with files and filters. In particular with systems that otherwise
> don't support stream convolving, but just can read files.

Interesting project...

One thing: when skipping forward (or seeking in general)
there's no need to convolve all data up to that point.
If P is the new position and L is the lenght of the IR,
then just call Convproc->reset(), seek the input file to
P - L (or 0 if P < L), and convolve up to P. You're
computing a FIR filter, so no more history is required.

I know. The only reason for doing what I am doing is entirely because of the filesystem semantics.

On the filesystem level, I don't 'see' seeks to audio frame positions but _only_ file positions. Since the input and the output is a compressed flac file, the relationship cannot be predicted - this is why I have to walk up to that point to present a consistent view of the file (in particular if that file is mmap()ed or if users jump around in it, this is important).
(this would be different if input and output was wav where the relationship is clear; but wav doesn't provide such a rich header format, so that the user in media server that display tags and images would be bad).


If the seek involves an output discontinuity for the user,
you could even just call Conproc->reset(), seek to P, and
proceed normally. The result will be as if there was only
silence before P.

Ciao,

--
FA

A world of exhaustive, reliable metadata would be an utopia.
It's also a pipe-dream, founded on self-delusion, nerd hubris
and hysterically inflated market opportunities. (Cory Doctorow)