[PlanetCCRMA] Mulitple Jack audio interfaces (was Tascam US-122 audio problem)

Steve Harris S.W.Harris@ecs.soton.ac.uk
Thu Feb 24 00:53:01 2005

On Wed, Feb 23, 2005 at 11:13:17 -0800, Fernando Pablo Lopez-Lezcano wrote:
> On Wed, 2005-02-23 at 16:54, Ben Cohen wrote:
> > > If you are only correcting for clock accuracy and
> > > using the same sample rate
> > > (e.g. two soundcards running at 48K) then you only
> > > need delete/insert a sample
> > > every few 100,000 or million samples. Smooth it a
> > > little and it shouldn't be too
> > > bad cpu-wise.
> > 
> > Wow. I did't think this would be possible without a
> > lot of work. 
> It _is_ not possible without a lot of work (IMHO). This issue surfaces 
> often on lau and the jack lists. Once you start looking at all the
> details that are needed to make it work, then it is not so easy.
> Obviously the audience is always welcome to prove that wrong with
> working code :-) It is not impossible, of course.
> But I'm not aware of any existing, working software solution to this
> problem (and I think it is becoming less and less of a problem as quite
> cheap cards start coming with multichannel i/o). 

Aye. I dont know who wrote the original message, but its very optimistic!
This is really very difficult, and the results will never be that good.

It should be possible with firewire devices, as its possible to make them
share a common clock, but with unmodified consumer PCI devices you have no
source of sync, the drift will be substantially more than 1 sample every
100k. Also, its not just the aggregate drift over a long time that
matters, its the short-time relative drift.

However, for DJ work, its not neccesary to have sample sync between the
cards, you can just run the two cards unlocked and do coarse drift
correction at the application level, eg. by running two JACK servers.
There is come DJ software than can do that, but I cant find a reference to
it now.

There is a paper in this years LA conference that will describe a
technique than can be used to solve this class of problem, with two
out-of-sync sources.

- Steve